web-dev-qa-db-ja.com

バックグラウンドでプッシュ通知を受信する

私はこれが多くの場所でカバーされていることを知っていますが、これを理解することはできません。プッシュ通知に都市飛行船を使用しています。私のアプリがバックグラウンドにあるとき-didReceiveRemoteNotificationが呼び出されないことを除いて、すべてがうまくいくようです。フォアグラウンドで動作します-メッセージを適切に処理できます。また、通知センターからメッセージがタップされた場合、起動オプションからメッセージを取得できます。ただし、バックグラウンドでは、送信するメッセージ-iOSはアラートを表示します-didReceiveRemoteNotificationは呼び出されません。 (通知センター内からではなく)アプリケーションアイコンをタップすると、アプリが前面に表示され、通知が存在することがわかりません。何か案は?

33
Brandon

APNSプログラミングガイドから:

オペレーティングシステムがアプリケーションのローカル通知またはリモート通知を配信する場合に考えられるシナリオを確認しましょう。

通知は、アプリケーションがフォアグラウンドで実行されていないときに配信されます。この場合、システムは通知を表示し、アラートを表示し、アイコンにバッジを付け、おそらくサウンドを再生します。

提示された通知の結果として、ユーザーはアラートのアクションボタンをタップするか、アプリケーションアイコンをタップ(またはクリック)します。アクションボタンがタップされた場合(iOSを実行しているデバイスで)、システムはアプリケーションを起動し、アプリケーションはデリゲートのapplication:didFinishLaunchingWithOptions:メソッド(実装されている場合)を呼び出します。通知ペイロード(リモート通知の場合)またはローカル通知オブジェクト(ローカル通知の場合)を渡します。

IOSを実行しているデバイスでアプリケーションアイコンがタップされた場合、アプリケーションは同じメソッドただし、通知に関する情報を提供しませんを呼び出します。

最後の文はあなたのケースを説明し、アプリケーションが通知に関する情報を取得しない理由を説明していると思います。

18
Eran

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

38

didReceiveRemoteNotificationは、アプリがフォアグラウンドにある場合、またはアプリが起動されたばかりの場合、またはアプリがバックグラウンドからフォアグラウンドに購入された場合にのみ呼び出します

Appleのリンク および一部の 質問

6
CReaTuS

メソッドdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions parameter launchOptions辞書キーの1つはUIApplicationLaunchOptionsRemoteNotificationKey which押されたプッシュ通知情報を保持します。

ツアーのメインルートコントローラーが初期化された後、受信した情報をプッシュできます。プロパティに保存し、ビューが初期化された後にプッシュします。

if (launchOptions) {
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
        self.notificationToMakeAction = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    }
}