web-dev-qa-db-ja.com

プッシュ通知の受信時にFirebaseがポップアップを受信しなかった

import Firebase
import FirebaseInstanceID
import FirebaseMessaging
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    registerForPushNotifications(application)
    FIRApp.configure()

    // Add observer for InstanceID token refresh callback.
    NSNotificationCenter
     .defaultCenter()
     .addObserver(self, selector: #selector(AppDelegate.tokenRefreshNotificaiton),
                                                     name: kFIRInstanceIDTokenRefreshNotification, object: nil)

    // Override point for customization after application launch.
    return true
  }

func registerForPushNotifications(application: UIApplication) {
      let settings: UIUserNotificationSettings =
        UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
      application.registerUserNotificationSettings(settings)
      application.registerForRemoteNotifications()
  }


  func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
                   fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
    print("===== didReceiveRemoteNotification ===== %@", userInfo)
  }


 func tokenRefreshNotificaiton(notification: NSNotification) {
    let refreshedToken = FIRInstanceID.instanceID().token()!
    print("InstanceID token: \(refreshedToken)")

    // Connect to FCM since connection may have failed when attempted before having a token.
     connectToFcm()
  }

  func connectToFcm() {
    FIRMessaging.messaging().connectWithCompletion { (error) in
      if (error != nil) {
        print("Unable to connect with FCM. \(error)")
      } else {
        print("Connected to FCM.")
      }
    }
  }

また、Info.plistで行いますFirebaseAppDelegateProxyEnabled = NO

今のところわかりませんが、didReceiveRemoteNotificationでprint(...)を取得しましたが、ポップアップを取得しません。 Firebase-> Console-> Notification-> Single deviceからメッセージを送信し、xCode Consoleから取得したトークンをここにコピーします-> func tokenRefreshNotificaiton

コンソールで次を取得しますが、ポップアップを取得しません

<FIRAnalytics/INFO> Firebase Analytics enabled
InstanceID token: TOKEN_ID
Connected to FCM.
===== didReceiveRemoteNotification ===== %@ [notification: {
    body = test;
    e = 1;
}, collapse_key: com.pf.app, from: 178653764278]

アプリ構成も enter image description here

16
Svitlana

appDelegate.mで次のコードを設定します

   - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    // for development 
        [[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeSandbox];

    // for production 
   //     [[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeProd];


    }
11
Ala'a AbuNemeh

テストするとき、アプリは最前面にあると思います。アプリがフォアグラウンドにあるとき、目に見える通知はトリガーされず、代わりにdidReceiveRemoteNotificationへのコールバックを受け取ります。詳細については、 documentation をご覧ください。

確認するには、アプリをバックグラウンドに入れて、プッシュ通知をもう一度送信してください。

1
AdamK

Prodctionの開発prodのアプリデリゲートサンドボックスでこの関数を使用するだけです

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.sandbox)

    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.prod)
}
0

まず、Firebase Notification Consoleを使用して、通知が送信されているかどうかを確認します。成功した場合、問題はコード側にあります。そうでない場合は、Firebaseで発生するエラーを確認してください。 APNsが見つからないというエラーメッセージが表示される場合は、[プロジェクトの設定]-> [クラウドメッセージング]タブで開発/実稼働用の.p12ファイルを確認する必要があります。

私はあなたと同じ設定を持っていますが、AdamKが言ったように機能します。 (バックグラウンドモードでは、通知が表示されます。)証明書も確認します。

0
wseries