FCM и iOS - сообщение принимается только при переключении на передний план или при повторном открытии приложения - PullRequest
0 голосов
/ 28 мая 2018

Привет, сообщество stackoverflow!

У меня проблемы с iOS и FCM: при первом запуске приложения сообщения FCM не принимаются.Если я

  • закрою приложение и снова открою его, или
  • снова переключит приложение в фоновый режим и на передний план,

внезапно все сообщения будут получены.После этого приложение работает нормально - просто первый раз не работает должным образом.Единственное, что помогает, - это понизить «FirebaseInstanceID» до «2.0.0».Другими модулями Firebase являются

  • Firebase 4.13.0
  • FirebaseAnalytics 4.2.0
  • FirebaseAuth 4.6.1
  • FirebaseCore 4.0.20
  • FirebaseCrash 2.0.2
  • FirebaseInstanceID 2.0.0
  • FirebaseMessaging 2.2.0

XCode - версия 9.3 (9E145)

Мой AppDelegate с didFinishLaunchingWithOptions имеет

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

FirebaseApp.configure()

application.registerForRemoteNotifications()

У меня также есть

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    print("APNs token retrieved: \(deviceToken)")

     Messaging.messaging().apnsToken = deviceToken
}

И я использую

extension AppDelegate : MessagingDelegate {

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    ...
}
func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
...
}

Это обычное поведение / ошибка или я что-то делаюздесь не так?

Большое спасибо!

1 Ответ

0 голосов
/ 04 июня 2018

Этот FCM должен быть зарегистрирован в фоновом режиме.Вы должны позволить ему работать в фоновом режиме.

1 / Включить фоновый режим в вашем проекте. Возможности и выбрать параметры, которые вы используете (выборка фона, удаленные уведомления)

2 / В appdelegate: - Объявить: var backgroundTask: UIBackgroundTaskIdentifier ?.- Добавьте это в приложение DidEnterBackground

  backgroundTask = application.beginBackgroundTask(withName: "Task", expirationHandler: {
                application.endBackgroundTask(self.backgroundTask!)
                self.backgroundTask = UIBackgroundTaskInvalid
            })
...