“Invalid Token” when trying to authenticate phone number using firebase

五迷三道 提交于 2019-12-18 14:38:51

问题


This is my code:

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")
        }
    }

}

This is what the console prints out:

Error Domain=FIRAuthErrorDomain Code=17048 "Invalid token." UserInfo={NSLocalizedDescription=Invalid token., error_name=INVALID_APP_CREDENTIAL}

What am I doing wrong? Thanks


回答1:


I was also experiencing this problem. Checked the following:

  • Correct bundle Id
  • Correct Google-Info.plist
  • Correct aps-environment value
  • Correct APNS token type when calling auth.setAPNStoken (.unknown for auto detect)

Nothing helped until in Firebase app settings I uploaded the APNS authentication key (p8) instead of certificates - I used those certificates before for push notifications only and everything was working fine but for phone number notifications something went wrong.




回答2:


It is most likely that you need to upload an .p8 Key file (I have an Enterprise account but same thing for developer)
In Apple Developer Account:

  • All Keys
  • Create New Key (+)
  • Type in Global name for all of your apps
  • Checkbox next to Apple Push Notifications service (APNs)
  • Download your p8 file
  • Upload to firebase dashboard



回答3:


same problem questions have been before on SO. so would like to tell you setup all pre-require step before run code.

Pre-Require Steps:

  • Register bundle id on Developer account and enable notifications for bundle id.

  • Register same bundle id on firebase console setting page and create app, download Google-Info.plist file, make sure name should be same.

  • Upload Push certificates on firebase console for sandbox as well as development.

  • follow this below link for code implementation.

setup code for Firebase Auth




回答4:


First regenerates APNS key and upload in firebase for cloud messaging

1) Import Firebase and FirebaseAuth

import Firebase
import FirebaseAuth

2) In didFinishLaunchingWithOptions Configure firebase.

FirebaseApp.configure()

3) Write these two func in AppDelegate.

  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
    }
}

Very Important note : uthAPNSTokenType set correctly for [sandbox / production] or set for common .unknown

In my case it was the apns token type that was wrong:

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

should have been:

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



回答5:


Make sure that it is APNs that you are selected under Key Services. The number of APNs certificates per developer account is limited to 2. So if you already had 2 certificates before, there is a chance that you are created the certificate by checking DeviceCheck instead of APNs.



来源:https://stackoverflow.com/questions/45091583/invalid-token-when-trying-to-authenticate-phone-number-using-firebase

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!