iOS デバイスでリモート通知を受信した日付を取得できるようにしたいと考えています。
サーバーがプッシュ通知を送信してからユーザーのデバイスで受信するまでの待ち時間を特定しようとしています。
iOS デバイスでリモート通知を受信した日付を取得できるようにしたいと考えています。
サーバーがプッシュ通知を送信してからユーザーのデバイスで受信するまでの待ち時間を特定しようとしています。
APNS に接続されたバックエンドを制御し、didReceiveRemoteNotification で解析する場合は、カスタムの送信日フィールドを通知ペイロードに追加できます。明らかに、これにより、リモート通知が送信され、受信されなかった日付を取得できますが、一般に違いはわずかです。
「content-available」キーの使用を提案する解決策は、そのような通知のバックグラウンドでアプリを起動し、Settings.app > Battery > Battery Usage でアプリをトップのバッテリー違反者としてランク付けする可能性があるため、あなたが望むものではない可能性があります。 . また、低電力モードで動作しなくなったり、ユーザーがアプリのバックグラウンド更新を無効にした場合にも機能しなくなります。
アプリのバックグラウンド更新と「コンテンツ利用可能」キーは、バックグラウンドでコンテンツをダウンロードするアプリ向けです。アプリがそれを行っていない場合は、それらを使用しないでください。
application:didReceiveRemoteNotification:fetchCompletionHandler:
アプリケーションデリゲートで、現在の日付で を作成し、NSDate
NSUserSettings の配列内または直接内部に保存します。
これにより、受信した通知の履歴があり、後で処理することもできます。
application:didReceiveRemoteNotification:fetchCompletionHandler:
content-available
通知ペイロードに値 1 のキーを追加した場合にのみ、バックグラウンドで呼び出されます。
Appleのドキュメントから:
ダウンロード操作をトリガーするプッシュ通知の場合、通知のペイロードには、値が 1 に設定された content-available キーが含まれている必要があります。アプリ デリゲートの application:didReceiveRemoteNotification:fetchCompletionHandler: メソッドを呼び出します。そのメソッドの実装では、関連するコンテンツをダウンロードしてアプリに統合する必要があります。https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
システム (アプリではない) コンソールを見ると、プッシュ通知がいつ受信されたかがわかります。新しい iOS バージョンではログがフィルタリングされているようですが、事前にアプリを強制終了すると、次のようなものが表示されます
Jun 1 17:55:38 Aarons-iPhone-6-Plus SpringBoard[657] <Warning>: High Priority Push: net.test.test - App killed –
didReceiveRemoteNotification で NSDate オブジェクトを作成して初期化します。NSDate *notificationDate = [NSDate date] が機能するはずです。