首页 > 解决方案 > 返回 FCM 令牌以存储在变量中(带有 Firebase 的 Swift 5)

问题描述

我正在尝试从当前用户获取 FCM 令牌作为变量,以便将其写入他们的 Firestore 文档。这是我用来检索令牌的代码,它有效:

var fcmToken = ""

    InstanceID.instanceID().instanceID(handler: { (result, error) in
        if let error = error {
             print("Error fetching remote instange ID: \(error)")
             } else if let result = result {
                  fcmToken = setFCMToken(result.token)
        }
    })
//use fcmToken variable here to write data in user document. Value getting sent is just initial declaration of ""
    func setFCMToken(_ token:String) -> String{
        print(token)
        return token
    }

但是 fcmToken 变量没有更新。我相信我的问题可能与范围有关。我不知道如何解决这个问题。谢谢您的帮助!

标签: swiftfirebasefirebase-cloud-messaging

解决方案


我想通了,似乎有点额外,但它有效:

    //Initial declaration at top of class above ViewDidLoad
    var fcmToken = ""

    //In ViewDidLoad
        InstanceID.instanceID().instanceID(handler: { (result, error) in
            if let error = error {
                print("Error fetching remote instange ID: \(error)")
                } else if let result = result {
                self.fcmToken = result.token
                self.setFCMToken(self.fcmToken)
            }
        })


    //Where ever you need to access token as variable
    let token = self.getFCMToken()

    //bottom of VC
    func setFCMToken(_ token:String){
        print(token)
        self.fcmToken = token
    }
    
    func getFCMToken() -> String{
        return self.fcmToken
        
    }


推荐阅读