これは多くの場所でカバーされていることは知っていますが、私には理解できません。プッシュ通知にはUrbanAirshipを使用しています。didReceiveRemoteNotification
私のアプリがバックグラウンドにあるとき-呼び出されないことを除いて、すべてがうまくいくようです。フォアグラウンドで機能します-メッセージを適切に処理できます。また、通知センターからメッセージをタップすると、起動オプションからメッセージを取得できます。ただし、バックグラウンドで送信されるメッセージ(iOSはアラートを表示しますdidReceiveRemoteNotification
)は呼び出されません。(通知センター内からではなく)アプリケーションアイコンをタップすると、アプリが前面に表示され、通知が表示されているかどうかわかりません。何か案は?
4 に答える
application:didReceiveRemoteNotification:
通知ペイロードcontent-available
に値を持つキーを追加した場合にのみ、バックグラウンドで呼び出されます。1
アーバンエアシップの場合は、[設定]タブでテストプッシュを送信できます。プッシュ通知のサンプルペイロード:
{
"aps": {
"alert": "aaaa",
"badge": "+1",
"content-available": "1"
},
"device_tokens": [
"86BA71E361B849E8312A7B943BA6B26A74AB436381CF3FEE3CD9EB436A12A292"
]
}
Appleは彼のドキュメントで明確に言及しています...
プッシュ通知でダウンロード操作をトリガーするには、通知のペイロードに、値が1に設定されたcontent-availableキーが含まれている必要があります。そのキーが存在する場合、システムはアプリをバックグラウンドでウェイクアップ(またはバックグラウンドで起動)し、アプリデリゲートのapplication:didReceiveRemoteNotification:fetchCompletionHandler:メソッドを呼び出します。そのメソッドの実装では、関連するコンテンツをダウンロードしてアプリに統合する必要があります。 https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
APNSプログラミングガイドから:
オペレーティングがアプリケーションのローカル通知またはリモート通知を配信するときに考えられるシナリオを確認してみましょう。
通知は、アプリケーションがフォアグラウンドで実行されていないときに配信されます。この場合、システムは通知を表示し、アラートを表示し、アイコンにバッジを付け、おそらく音を鳴らします。
表示された通知の結果として、ユーザーはアラートのアクションボタンをタップするか、アプリケーションアイコンをタップ(またはクリック)します。アクションボタンがタップされた場合(iOSを実行しているデバイス上)、システムはアプリケーションを起動し、アプリケーションはそのデリゲートのアプリケーションを呼び出します。didFinishLaunchingWithOptions:メソッド(実装されている場合)。通知ペイロード(リモート通知の場合)またはローカル通知オブジェクト(ローカル通知の場合)を渡します。
iOSを実行しているデバイスでアプリケーションアイコンがタップされた場合、アプリケーションは同じメソッドを呼び出しますが、通知に関する情報を提供しません。
最後の文はあなたのケースを説明し、アプリケーションが通知に関する情報を受け取らない理由を説明していると思います。
メソッドdidFinishLaunchingWithOptions:(NSDictionary *)launchOptionsパラメーターlaunchOptionsディクショナリキーの1つは、押されたプッシュ通知情報を保持するUIApplicationLaunchOptionsRemoteNotificationKeyです。
ツアーのメインルートコントローラーが初期化された後、受信した情報をプッシュできます。それをいくつかのプロパティに保存し、ビューが初期化された後にプッシュします。
if (launchOptions) {
if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
self.notificationToMakeAction = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
}
}