ios - FCM 和 iOS - 仅在切换到前台或重新打开应用程序时收到消息

标签 ios swift firebase firebase-cloud-messaging

你好 stackoverflow 社区!

我在使用 iOS 和 FCM 时遇到了一些问题:当我第一次启动该应用程序时,收不到 FCM 消息。如果我

  • 关闭应用程序并再次打开它或
  • 再次将应用切换到后台和前台,

突然收到所有消息。之后,该应用程序运行正常 - 只是第一次无法正常运行。 唯一有帮助的是将“FirebaseInstanceID”降级为“2.0.0”。 其他 Firebase Pod 是

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

XCode 是版本 9.3 (9E145)

我的带有 didFinishLaunchingWithOptions 的 AppDelegate 有

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) {
...
}

这是一个常见的行为/错误还是我在这里做错了什么?

非常感谢!

最佳答案

此 FCM 应注册为后台模式。您应该允许它在后台运行。

1/在您的项目功能中启用后台模式并选择您使用的选项(后台获取、远程通知)

2/在 appdelegate 中: - 声明:var backgroundTask: UIBackgroundTaskIdentifier?。 - 将其添加到 applicationDidEnterBackground

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

关于ios - FCM 和 iOS - 仅在切换到前台或重新打开应用程序时收到消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50564454/

相关文章:

ios - ViewController - 全屏

ios - 尾随的滑动 Action 不会消失

firebase - 如何知道哪个registration_id是坏的/过期的/已删除的

ios - Xcode IOS 如何访问未知文件名的文件

ios - 广场定位自动布局

ios - 在 iOS 中检索按上次播放时间排序的歌曲列表

ios - 调整我的警报消息的大小并设置字体颜色

swift - 完成 block 从不在 SKAction 组序列的末尾调用

firebase - forEach 在 flutter 中出错以显示带有来自 firebase 实时数据的 ListView

firebase - 使用flutter在Firebase上上传文件时,如何渲染加载程序?