MISSING_CLIENT_IDENTIFIER,尝试在 Android 中进行 PhoneAuth 时

问题描述 投票:0回答:5

我一直在尝试使用 Firebase Auth 进行电话身份验证方法,我已确保遵循所有步骤,添加我的包名称,使用

添加 SHA 密钥

keytool -list -v -keystore "%USERPROFILE%.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

然后添加所有依赖项并将 json 文件包含到我的项目中

现在我以 +CountryCodeXXXXX 格式发送我的电话号码,由于某种原因,它在 PhoneAuthProvider.OnVerificationStateChangedCallbacks() 方法中给了我一个

MISSING_CLIENT_IDENTIFIER
,任何输入都会有帮助

这是我的代码

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = (EditText) findViewById(R.id.edit);
    send = (Button) findViewById(R.id.btnSend);
    send.setOnClickListener(this);
    mCallbacks= new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
            Toast.makeText(getBaseContext(),"Verification Successfull",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onVerificationFailed(FirebaseException e) {
            Toast.makeText(getBaseContext(),"Verification Failed "+e,Toast.LENGTH_LONG).show();
        }
    };
}




@Override
public void onClick(View view) {
    switch (view.getId()) {

        case R.id.btnSend:
            String temp = editText.getText().toString();
            Toast.makeText(getBaseContext(),temp,Toast.LENGTH_SHORT).show();
            PhoneAuthProvider.getInstance().verifyPhoneNumber(
                    temp,        // Phone number to verify
                    60,                 // Timeout duration
                    TimeUnit.SECONDS,   // Unit of timeout
                    this,               // Activity (for callback binding)
                    mCallbacks);
    break;




    }
}
android firebase firebase-authentication
5个回答
11
投票

我通过反复试验(令人烦恼的是没有记录)确定,当您禁用 Firebase 用于验证应用程序环境的验证码请求(或静默 APN 请求)并且您尝试登录非白名单时,就会发生这种情况数量。

fbAuth.settings.appVerificationDisabledForTesting = YES;

^将其改回“否”,一切都会再次起作用。


2
投票

我也遇到了同样的问题,这是因为我多次尝试和测试使用同一设备与我的wifi网络和移动网络。因此,他们以某种方式阻止了对此客户端 ID 的请求。当我在具有不同网络的不同设备中尝试它时,一切都很好。开发时只需将号码列入白名单并为其提供验证码


2
投票

对于斯威夫特

  • true
    :测试电话号码
  • false
    :真实电话号码
Auth.auth().settings?.isAppVerificationDisabledForTesting = false

可以在这里设置测试电话号码

enter image description here


0
投票

当您使用您输入的数字进行测试和设置时,就会发生此错误

Auth.auth().settings?.isAppVerificationDisabledForTesting = true

步骤。

1-您在控制台中输入列入白名单的号码12125551212进行测试:

enter image description here

2-然后为了绕过验证码,您尝试登录并使用:

Auth.auth().settings?.isAppVerificationDisabledForTesting = true // <-- specifically set this to true for testing to skip the captcha


// the phoneNumberTextField.text is 18008881234
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumberTextField.text!, uiDelegate: nil) { ... }

3- 但您没有使用您在步骤 1 中提供的白名单号码,而是使用了不同的号码:

18008881234(这不是您在第 1 步中提供的号码)

简而言之,要避免此问题,只需在使用 Auth.auth().settings?.isAppVerificationDisabledForTesting = true 进行登录测试时,使用您在步骤 1 中提供的任何数字


0
投票

该线程中提到的解决方案都不适合我。

就我而言,我必须将令牌类型从 prod 更改为 unknown

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    Auth.auth().setAPNSToken(deviceToken, type: .unknown)
}
© www.soinside.com 2019 - 2024. All rights reserved.