risposta di Karan aveva alcuni errori di battitura, e anche fallito per verificare una risposta di "0" anziché solo "nil". (L'ho implementato nella mia app e ho ricevuto diversi falsi positivi da connessioni deboli o reti non autorizzate.)
L'ho adattato di seguito e ho aggiunto il codice server corrispondente per coloro che non sanno cosa si riferiva a Karan a. Questo viene implementato come un metodo categoria in un'estensione NSDate, così si può chiamare usando [NSDate verifiedDate];
+(NSDate*)verifiedDate {
if([self hasInternetConnectivity]) {
NSURL *scriptUrl = [NSURL URLWithString:@"http://[yourwebsite].com/timestamp.php"];
NSData *data = [NSData dataWithContentsOfURL: scriptUrl];
if(data != nil) {
NSString *tempString = [NSString stringWithUTF8String:[data bytes]];
if([tempString doubleValue] > 946684800) { // Date is at least later than 2000 AD, or else something went wrong
NSDate *currDate = [NSDate dateWithTimeIntervalSince1970:[tempString doubleValue]];
NSLog(@"verifiedDate: String returned from the site is: %@ and date is: %@", tempString, [currDate description]);
return currDate;
} else {
NSLog(@"verifiedDate: Server returned false timestamp (%@)", tempString);
return [NSDate date];
}
} else {
NSLog(@"verifiedDate: NSData download failed");
return [NSDate date];
}
} else {
NSLog(@"verifiedDate: InternetConnectivity failed");
return [NSDate date];
}
}
Ed ecco il codice del server, memorizzato nella cartella principale del server come "timestamp.php"
<?php
echo(time());
?>
Se è stata utilizzata l'una o l'altra soluzione, selezionare la risposta preferita ;-) –
Hai considerato il fatto che l'utente potrebbe attivare la modalità aereo e quindi modificare la data e l'ora? – Mahouk