重複の可能性:
アプリの実行間で、ユーザーによる iPhone クロックの進行をローカルで検出するにはどうすればよいですか?
iOS で実際の時刻と日付 (デバイスの時刻ではない) を特定する方法はありますか
? ユーザーが変更できない、使用できる iOS の時計はありますか?
簡単に
自動更新可能なサブスクリプション ベースのアプリを使用しています。アプリは、Apple から最新のレシートを受け取ると、expires_date_ms
キーをに保存しますNSUserDefaults
。その日から 30 日後、アプリは Apple にチェックを入れ、サブスクリプションがまだ有効かどうかを確認します。アプリはオフライン アプリと見なすことができますが、サブスクリプション ステータスを確認するには、30 日ごとに 1 回インターネットに接続する必要があります。この時間比較は、接続する必要があることをユーザーに伝えるために使用されます。
問題
以下のコードを使用して、現在の時刻を と比較していますexpires_date_ms
。
NSTimeInterval expDateMS = [[productInfo objectForKey:@"expires_date_ms"] doubleValue];
NSTimeInterval currentDateMS = ([[NSDate date] timeIntervalSince1970] * 1000);
if (currentDateMS > expDateMS)
subExpired = YES;
これはうまく機能しますが、悪用される可能性のある抜け穴があることがわかります。ユーザーがデバイスの時計を 1 時間/1 か月/10 年戻すと[NSDate date]
、デバイスの現在の時刻を使用するため、時間の比較が信頼できなくなります (お願いします)。間違っていたら訂正してください)。
質問
デバイスに依存しない時間をミリ秒単位で取得する方法はありますか? デバイスのクロックに関係なく、正確かつ確実に測定できるものはありますか?