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