尝试使用 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 @algridaps-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.app() 错误
Firebase 身份验证 - 电话 - “INVALID_CERT_HASH”