Firebase при получении Push Notification не получил всплывающее окно

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

Я пока не знаю, но получил print (...) в didReceiveRemoteNotification, но не получил всплывающее окно. Я отправляю сообщение из Firebase → Console → Notification → Single device и копирует здесь токен, который я получил из консоли xCode → 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]

Также настройки приложений введите описание изображения здесь

Ответ 1

установите следующий код в 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];


    }

Ответ 2

Я предполагаю, что ваше приложение находится на переднем плане при тестировании. Когда ваше приложение находится на переднем плане, никаких видимых уведомлений не запускается, вместо этого вы получаете обратный вызов до didReceiveRemoteNotification. Дополнительную информацию см. В документации .

Чтобы проверить, положите свое приложение в фоновом режиме и повторите отправку уведомления push.

Ответ 3

У меня такая же конфигурация у вас есть, и она работает, как сказал AdamK. (В фоновом режиме появляется уведомление.) Также проверьте свои сертификаты.

Ответ 4

Сначала проверьте с помощью Firebase Notification Console, чтобы узнать, отправлено уведомление или нет. Если это успех, проблема в кодовой части; в противном случае проверьте, какая ошибка возникает в Firebase. Если вы получили сообщение об ошибке как отсутствующие APN, вам нужно проверить файл разработки .pro.txt на вкладке "Настройка проекта" - "Облачные сообщения".

Ответ 5

Просто используйте эту функцию в песочнице для делегатов приложений для разработки prod для prodction

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

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

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