android 短信 代码错误,android – Firebase手机身份验证错误:短信代码已过期

根据文档实施FireBase手机身份验证后,我遇到了一些问题.

>某些号码无法通过身份验证:我使用Airtel作为我的服务提供商.

在日志中,我可以确认代码已经发送但我没有在手机上收到它:

D/PhoneAuthenticating: onCodeSent:AM5PThBss5tbYdpNW5R9Q7o8zOYeHvd7lnZ1KBlS…

>切换到另一个操作符,我可以收到代码,但之后它说SMS代码在尝试验证后立即过期.我做了更多尝试,结果是一样的

W/PhoneAuthenticating: signInWithCredential:failure

com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: The sms code has expired. Please re-send the verification code to try again.

at com.google.android.gms.internal.nf.zzK(Unknown Source)

at com.google.android.gms.internal.mg.zza(Unknown Source)

at com.google.android.gms.internal.oa.zzL(Unknown Source)

at com.google.android.gms.internal.oc.onFailure(Unknown Source)

at com.google.android.gms.internal.nj.onTransact(Unknown Source)

at android.os.Binder.execTransact(Binder.java:446)

抛出此异常:

FirebaseAuthInvalidCredentialsException

在firebase中,代码到期时间超过3599秒.验证所需的时间不到一分钟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是基于 Android 平台生成短信验证码并进行手机号和邮箱验证的代码: 1. 添加依赖库 在 `build.gradle` 文件中添加以下依赖库: ```groovy dependencies { implementation &#39;com.google.android.gms:play-services-auth:19.0.0&#39; implementation &#39;com.google.android.gms:play-services-auth-api-phone:17.5.0&#39; implementation &#39;com.google.android.material:material:1.4.0&#39; } ``` 2. 申请权限 在 `AndroidManifest.xml` 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> ``` 3. 生成短信验证码 ```java private String generateCode() { Random random = new Random(); int code = random.nextInt(899999) + 100000; return String.valueOf(code); } ``` 4. 发送短信验证码 ```java private void sendSMS(String phoneNumber, String code) { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber, null, "Your verification code is " + code, null, null); } ``` 5. 验证手机号 ```java private void verifyPhoneNumber(String phoneNumber) { PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // Activity (for callback binding) .setCallbacks(mCallbacks) // OnVerificationStateChangedCallbacks .build(); PhoneAuthProvider.verifyPhoneNumber(options); } ``` 6. 验证邮箱 ```java private void verifyEmail(String email) { GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(this, gso); googleSignInClient.silentSignIn().addOnSuccessListener(new OnSuccessListener<GoogleSignInAccount>() { @Override public void onSuccess(GoogleSignInAccount googleSignInAccount) { AuthCredential credential = EmailAuthProvider.getCredential(email, null); FirebaseAuth.getInstance().getCurrentUser().linkWithCredential(credential).addOnCompleteListener(task -> { if (task.isSuccessful()) { Toast.makeText(MainActivity.this, "Email verified", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show(); } }); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); } }); } ``` 以上是基于 Android 平台生成短信验证码并进行手机号和邮箱验证的代码,其中验证手机号使用了 Firebase Authentication,验证邮箱使用了 Google Sign-In。需要注意的是,验证邮箱需要在 Firebase 控制台中开启 Email/Password 登录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值