我一直在尝试使用 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;
}
}
我通过反复试验(令人烦恼的是没有记录)确定,当您禁用 Firebase 用于验证应用程序环境的验证码请求(或静默 APN 请求)并且您尝试登录非白名单时,就会发生这种情况数量。
fbAuth.settings.appVerificationDisabledForTesting = YES;
^将其改回“否”,一切都会再次起作用。
我也遇到了同样的问题,这是因为我多次尝试和测试使用同一设备与我的wifi网络和移动网络。因此,他们以某种方式阻止了对此客户端 ID 的请求。当我在具有不同网络的不同设备中尝试它时,一切都很好。开发时只需将号码列入白名单并为其提供验证码
当您不使用您输入的数字进行测试和设置时,就会发生此错误
Auth.auth().settings?.isAppVerificationDisabledForTesting = true
。
步骤。
1-您在控制台中输入列入白名单的号码12125551212进行测试:
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 中提供的任何数字
该线程中提到的解决方案都不适合我。
就我而言,我必须将令牌类型从 prod 更改为 unknown
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Auth.auth().setAPNSToken(deviceToken, type: .unknown)
}