如何在 Swift AppDelegate 之外获取 Firebase FCM 令牌

How to get Firebase FCM token outside the Swift AppDelegate

我有一个 SwiftUI 应用程序,在它的自定义 AppDelagte 中,我获取了 FCM 令牌并将其保存到我的数据库中。哪个有效。

但是当用户注册并进入应用程序的主屏幕时,他们的 FCM 令牌不会上传到数据库,直到他们重新启动应用程序并且 AppDelagte 消息传递功能再次 运行。所以基本上,当用户注册时,应用程序将无法正常运行,直到他们重新启动应用程序。

我尝试获取并在他们通过以下方式成功注册后立即发送 FCM 令牌:

Messaging.messaging().fcmToken

其中 returns 一个空字符串,这意味着它仅在他们重新 运行 应用程序委托后创建。

如何解决这个问题,并在他们注册后立即将 FCM 令牌发送到他们的数据库配置文件?

您可以在获取后立即将 fcmToken 存储在 AppDelegate 的静态 属性 上,然后在用户注册时访问它。

向应用程序委托添加静态 属性:

class AppDelegate: UIResponder, UIApplicationDelegate {
    static var fcmToken: String?

    // when you get the token set it to the static property
    Self.fcmToken = fcmToken
}

然后当您需要令牌时,只需访问:

AppDelegate.fcmToken

您可以随时使用此方法访问令牌而不是存储令牌。

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

https://firebase.google.com/docs/cloud-messaging/ios/client