web-dev-qa-db-ja.com

firebaseを使用して電話番号を認証しようとすると「無効なトークン」

これは私のコードです:

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}

私は何を間違えていますか?ありがとう

16
Jordan Tate

私もこの問題を経験していました。以下を確認しました。

  • 正しいバンドルID
  • 正しいGoogle-Info.plist
  • 正しいaps-environment
  • auth.setAPNStoken(自動検出の場合は.unknown)を呼び出すときのAPNSトークンタイプを修正

Firebaseアプリの設定I 証明書の代わりにAPNS認証キー(p8)をアップロード-プッシュ通知のみにこれらの証明書を使用し、すべて正常に機能していましたが、電話番号の通知に問題が発生するまで、何も役に立ちませんでした。

11
algrid

ほとんどの場合、.p8キーファイルをアップロードする必要があります(エンタープライズアカウントを持っていますが、開発者にとっても同じことです)
Apple開発者アカウント:

  • すべてのキー
  • 新しいキーを作成(+)
  • すべてのアプリのグローバル名を入力します
  • Apple Push Notificationsサービス(APN)の横のチェックボックス
  • P8ファイルをダウンロードします
  • Firebaseダッシュボードにアップロードする
3
Jayb967

最初にAPNSキーを再生成し、クラウドメッセージング用にfirebaseにアップロードします

1)FirebaseとFirebaseAuthをインポートする

import Firebase
import FirebaseAuth

2)didFinishLaunchingWithOptionsでfirebaseを設定します。

FirebaseApp.configure()

3)AppDelegateでこれら2つの関数を記述します。

  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は[sandbox/production]に正しく設定されるか、一般的な.unknown

私の場合、間違っていたのはapnsトークンタイプでした。

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

になるはずだった:

Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.sandbox)
2
Arun Kumar P

同じ問題の質問はSOの前にありました。そのため、コードを実行する前にすべての必要なステップをセットアップするように伝えたいと思います。

必要なステップ:

  • 開発者アカウントにバンドルIDを登録し、バンドルIDの通知を有効にします。

  • Firebaseコンソール設定ページで同じバンドルIDを登録し、アプリを作成し、Google-Info.plistファイルをダウンロードし、名前が同じであることを確認します。

  • 開発だけでなく、サンドボックス用のFirebaseコンソールにプッシュ証明書をアップロードします。

  • コードの実装については、以下のリンクに従ってください。

Firebase Authのセットアップコード

1
Parth

[キーサービス]で選択されているのがAPNであることを確認します。開発者アカウントごとのAPN証明書の数は2に制限されています。したがって、以前に2つの証明書をすでに持っていた場合、APNの代わりにDeviceCheckをチェックして証明書を作成する可能性があります。

enter image description here

0
Naval Hasan