システムクロックを変更しているユーザーを検出するために私が考えることができる唯一の方法は次のとおりです。
- アプリが起動したら、サーバーに時間を尋ねて、それと の違いに注意してください
[NSDate date]
。それを持続する[NSNumber numberWithFloat:serverOffset];
- (BOOL)deviceClockChanged
サーバーに再度要求し、永続化された値と比較するようなメソッドを実装します。差が、クロック ドリフト + 同期要求の遅延の小さな許容範囲よりも大きい場合は、クロックが変更されたと結論付けることができます。このすべてを UTC で実行して、タイム ゾーン間のユーザーの移動とは無関係に機能するようにします。
- これを考慮してください: ユーザーが通知を遅らせるために時間についてアプリをだますことをひどく望んでいる場合、彼の電話の残りの部分を台無しにします。おそらく、通知スケジュールを編集できるようにする必要があります。
必要に応じて、ポイント 1 と 2 のコード例を提供できます。また、必要に応じて、ポイント 3 に @"alert text" を提供して、ユーザーが自分の通知を編集することに罪悪感を抱かせるようにすることもできます。
ここで私の元の答え。ユーザーが通知を編集できるようにすることを選択した場合、これらのメソッドが重要になります... UIApplication には次のプロパティがあります。
NSArray *scheduledLocalNotifications;
および実装:
- (void)cancelLocalNotification:(UILocalNotification *)notification
したがって、1 つを変更するには、キャンセルしてから再スケジュールします。