Подтвердить что ты не робот

Уведомления Firebase, не работающие в iOS 11

Я разрабатываю приложение, которое использует оповещения PushBase Firebase. Он работал хорошо, пока я не попытался в iOS 11. Используя iphone с ios 11, уведомления не поступают. Здесь мой код:

- (void)application:(UIApplication *)application 
  didReceiveRemoteNotification:(NSDictionary *)userInfo
  fetchCompletionHandler:(void (^)
  (UIBackgroundFetchResult))completionHandler {
      //Manage notification
  }

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
   willPresentNotification:(UNNotification *)notification
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
    //Manage notification
}

Ни один из методов не вызывается.

Спасибо за помощь!

4b9b3361

Ответ 1

Это проблема с Firebase. Кажется, это связано с недавним обновлением их вместо iOS 11. Они работают над исправлением для него.

Тем временем, если вы добавите pod 'FirebaseInstanceID', '2.0.0' в свой podfile, он исправит его.

Вы можете прочитать больше здесь: https://github.com/firebase/quickstart-ios/issues/327#issuecomment-332655731

Ответ 2

Вам нужно реализовать UNUserNotificationCenterDelegate

 extension AppDelegate: UNUserNotificationCenterDelegate {
        func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
            completionHandler(.alert)
        }
    }

и установите его в UNUserNotificationCenter объект внутри didFinishLaunchingWithOptions

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
      UNUserNotificationCenter.current().delegate = self
      return true
}

Ответ 3

Проверьте это в возможностях вашего проекта. Это помогло мне) введите описание изображения здесь

Ответ 4

Можете ли вы попробовать это

    Messaging.messaging().delegate = self
    Messaging.messaging().shouldEstablishDirectChannel = true

Ответ 5

Я застрял как 3 часа, а затем 2 шага, найденные в сети, помогли мне.

  1. Попробуйте отправить уведомление через firebase извне, как это - просто замените ServerKey для своей учетной записи serverkey и FCM_TOKEN для своего fcm токена приложения:
curl -X "POST" "https://fcm.googleapis.com/fcm/send" \
     -H "Authorization: key=ServerKey" \
     -H "Content-Type: application/json" \
     -d $'{
  "notification": {
    "body": "Testing with direct FCM API",
    "title": "Test Message",
    "badge": "0",
    "sound": "default"
  },
  "registration_ids": [
"FCM_TOKEN"
  ]
}'
  1. Вы получите ответ об ошибке, вероятно. У меня есть "InvalidApnsCredential", который произошел из-за несоответствия TeamID в учетной записи разработчика firebase и apple (точнее, ключа авторизации) → также будьте осторожны, что firebase действительно меняет событие TeamID после сохранения (это дало мне много недопустимых изменений сохранения, которые произошли после обновления браузера)