首页 > 解决方案 > 我想将 FCMToken 发送到 IOS 中的 URL

问题描述

我将应用程序开发成 webview。并成功配置了 Firebase 推送通知。消息传递良好。

但现在我想将设备令牌放入 URL。通过它我可以根据令牌发送味精。

我在 Appdelegate.swift 中编写了这段代码

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let token = deviceToken.map {String (format: "%02.2hhx", $0)}.joined()
    print("Token : \(token)")
    let preferences = UserDefaults.standard
    preferences.setValue(token, forKey: "token")
    preferences.synchronize()
}

//Changes

func application(_ application: UIApplication,
                 didFailToRegisterForRemoteNotificationsWithError
    error: Error) {
    // Try again later.
}

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    // Print message ID.
    if let messageID = userInfo[gcmMessageIDKey] {
        print("Message ID: \(messageID)")
    }

    // Print full message.
    print(userInfo)

    completionHandler()
}
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    print("Firebase registration token: \(fcmToken)")

    //Saving fcmToken to pass to the url

    //Bhaskar Changes

    let preferences = UserDefaults.standard
    preferences.setValue(fcmToken, forKey: "token")
    preferences.synchronize()
    let token = Messaging.messaging().fcmToken
    let dataDict:[String: String] = ["token": fcmToken]
    NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}

func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
    print("Message Data", remoteMessage.appData)
}

以及 Viewcontroller.swift 中的这段代码

override func viewDidLoad() {
    super.viewDidLoad()

    //Retrieving the fcmToken
    let prefs = UserDefaults.standard
    let token = prefs.string(forKey: "token")
    //?token= \(token as Optional)&device=ios
    print("Token accessed : \(String(describing: token))")
    webView.load(URLRequest(url: URL(string: "https://instaglamexpress.com/app/customer/?device=ios&token=\(String(describing: token))")!))

}

但是每次我运行程序时。令牌未存储到令牌变量中。它显示“无”。

我是否遵循正确的程序。??

请帮助我解决实际问题。

标签: iosswift

解决方案


也许你忘记添加Messaging.messaging().delegate = self这种方式func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)永远不会被调用。


推荐阅读