これは私のコードです:
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}
私は何を間違えていますか?ありがとう
私もこの問題を経験していました。以下を確認しました。
aps-environment
値auth.setAPNStoken
(自動検出の場合は.unknown
)を呼び出すときのAPNSトークンタイプを修正Firebaseアプリの設定I 証明書の代わりにAPNS認証キー(p8)をアップロード-プッシュ通知のみにこれらの証明書を使用し、すべて正常に機能していましたが、電話番号の通知に問題が発生するまで、何も役に立ちませんでした。
ほとんどの場合、.p8キーファイルをアップロードする必要があります(エンタープライズアカウントを持っていますが、開発者にとっても同じことです)
Apple開発者アカウント:
最初に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)
同じ問題の質問はSOの前にありました。そのため、コードを実行する前にすべての必要なステップをセットアップするように伝えたいと思います。
必要なステップ:
開発者アカウントにバンドルIDを登録し、バンドルIDの通知を有効にします。
Firebaseコンソール設定ページで同じバンドルIDを登録し、アプリを作成し、Google-Info.plistファイルをダウンロードし、名前が同じであることを確認します。
開発だけでなく、サンドボックス用のFirebaseコンソールにプッシュ証明書をアップロードします。
コードの実装については、以下のリンクに従ってください。