尝试使用 Firebase 验证电话号码时出现“无效令牌”

Posted

技术标签:

【中文标题】尝试使用 Firebase 验证电话号码时出现“无效令牌”【英文标题】:"Invalid Token" when trying to authenticate phone number using firebase 【发布时间】:2017-12-18 21:11:21 【问题描述】:

这是我的代码:

import FirebaseAuth


class AuthPhoneNum 

    static func getPhoneNum(phoneNumber: String) 
        PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber)  (verificationID, error) in
            if let error = error 
                print(error)
                return
            
            UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
        
    

    static func verify(verificationCode: String?) 
        guard let verificationID = UserDefaults.standard.string(forKey: "authVerificationID") else  return 
        if verificationCode != nil 
            let credential = PhoneAuthProvider.provider().credential(
                withVerificationID: verificationID,
                verificationCode: verificationCode!)

            Auth.auth().signIn(with: credential)  (user, error) in
                if let error = error 
                    print(error)
                    return
                
            
         else 
            print("No verification code")
        
    


这是控制台打印出来的:

错误域=FIRAuthErrorDomain 代码=17048“无效令牌。” UserInfo=NSLocalizedDescription=无效令牌。, error_name=INVALID_APP_CREDENTIAL

我做错了什么?谢谢

【问题讨论】:

您应该提供一个正确的代码示例来说明您正在尝试做的事情。 感谢您的提示。我更新了我的帖子。 我已经在这里回答了:***.com/questions/44091666/… Firebase Auth using phone number returns an internal error的可能重复 '另外,请注意,电话号码登录需要物理设备,不能在模拟器上使用。'如果这不是问题,您是否在控制台中启用了电话号码身份验证? 【参考方案1】:

我也遇到了这个问题。检查以下内容:

正确的捆绑包 ID 正确的 Google-Info.plist 正确的aps-environment值 调用auth.setAPNStoken 时正确的APNS 令牌类型(.unknown 用于自动检测)

在 Firebase 应用设置中没有任何帮助,直到我上传了 APNS 身份验证密钥 (p8) 而不是证书 - 我之前仅将这些证书用于推送通知,一切正常,但对于电话号码通知出错了。

【讨论】:

我也错过了 Firebase 控制台中的 APNs .p12 文件。一旦我上传了 .p12,它就可以工作了。 你的意思是 .p8 @AnilGupta,因为我找不到在任何地方添加 .p12 APN @algrid aps-environment 哪里? 我需要帮助 你在哪里上传p12?!【参考方案2】:

之前在 SO 上也遇到过同样的问题。所以想告诉你在运行代码之前设置所有的 pre-require 步骤。

预先要求的步骤:

在开发者帐户上注册捆绑 ID 并启用通知 捆绑包 ID。

在 firebase 控制台设置页面上注册相同的 bundle id 并创建 应用程序,下载 Google-Info.plist 文件,确保名称应相同。

在 Firebase 控制台上上传推送证书以用于沙盒以及 发展。

按照下面的链接进行代码实现。

setup code for Firebase Auth

【讨论】:

【参考方案3】:

首先重新生成 APNS 密钥并上传到 Firebase 以进行云消息传递

1) 导入 Firebase 和 FirebaseAuth

import Firebase
import FirebaseAuth

2) 在 didFinishLaunchingWithOptions 中配置 firebase。

FirebaseApp.configure()

3) 在 AppDelegate 中编写这两个 func。

  func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 
    let firebaseAuth = Auth.auth()
    firebaseAuth.setAPNSToken(deviceToken, type: AuthAPNSTokenType.prod)



func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) 
    let firebaseAuth = Auth.auth()
    if (firebaseAuth.canHandleNotification(userInfo))
        print(userInfo)
        return
    

非常重要的注意事项:uthAPNSTokenType 正确设置为 [沙盒/生产] 或设置为通用 .unknown

在我的例子中,apns 令牌类型是错误的:

Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.prod)

应该是:

Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.sandbox)

【讨论】:

我不允许替换 APNS 证书。但是更改为沙盒对我有用。非常感谢 我在 react native ios release build 中面临同样的问题......在 appdelegate.m 中添加产品代码后它的工作。谢谢朋友【参考方案4】:

您很可能需要上传 .p8 密钥文件 (我有一个企业帐户,但对于开发人员来说也是一样的) 在 Apple 开发者帐户中:

所有键 创建新密钥 (+) 输入所有应用的全局名称 Apple 推送通知服务 (APN) 旁边的复选框 下载您的 p8 文件 上传到 Firebase 仪表板

【讨论】:

它对我有用。无需建造。它也可以在所有发布版本中使用。【参考方案5】:

确保您在“关键服务”下选择的是 APN。每个开发者帐户的 APNs 证书数量限制为 2。因此,如果您之前已经拥有 2 个证书,则有可能通过检查 DeviceCheck 而不是 APNs 来创建证书。

【讨论】:

【参考方案6】:

在我的情况下,问题是 在 Firebase 项目设置中的 iOS 应用程序中的包 ID 不正确(项目设置 -> 常规 -> 您的应用程序)。

我希望这对忽略相同细节的人有所帮助。

【讨论】:

【参考方案7】:

如果其他人仔细检查了上述内容但仍然有问题,请不要忘记在您的 ios 配置文件中添加您的团队 ID 和应用程序 ID。

而且,别忘了重新下载,用更新的替换旧的。

【讨论】:

以上是关于尝试使用 Firebase 验证电话号码时出现“无效令牌”的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Firebase 身份验证时出现错误

当我尝试实现身份验证时出现 Firebase.app() 错误

Firebase 身份验证 - 电话 - “INVALID_CERT_HASH”

当我尝试将我的应用程序连接到 Firebase 身份验证时出现 MissingPluginException 异常

如何在视图模型中实现 Firebase 电话身份验证?

Firebase 使用电话号码对现有的自定义登录流程进行身份验证