Firebase登录活动错误

时间:2018-02-24 09:06:28

标签: android firebase login firebase-authentication

我做了一个自定义登录活动,将OTP发送到用户的手机号码。一旦用户输入手机号码并点按“发送验证码"”,就会出现一个带有旋转器和应用程序崩溃的白色屏幕。

如果需要,我可以提供我使用的模块的更多细节。还有另一项活动,我已经启动了mName和mPhone。

package com.bogdankolomiets.skydreload.data;

import android.app.Activity;
import android.util.Log;

import com.google.firebase.FirebaseException;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;

import java.util.concurrent.TimeUnit;

import javax.inject.Inject;

import io.reactivex.Completable;
import io.reactivex.Single;

public class VerifyCodeManager {
private FirebaseAuth mFirebaseAuth;
private String mVerificationId = null;
private PhoneAuthProvider.ForceResendingToken mResendingToken;
private PhoneAuthCredential mPhoneAuthCredential;

@Inject
public VerifyCodeManager(FirebaseAuth firebaseAuth) {
    mFirebaseAuth = firebaseAuth;
    mFirebaseAuth.useAppLanguage();
}

public Single<Boolean> verifyPhone(Activity activity, String phoneNumber) {
    if (mResendingToken == null) {
        return sentSms(activity, phoneNumber);
    } else {
        return resendSms(activity, phoneNumber);
    }
}

private Single<Boolean> resendSms(Activity activity, String phoneNumber) {
    return Single.create(emitter -> {
        PhoneAuthProvider.getInstance()
                .verifyPhoneNumber(
                        phoneNumber,
                        60,
                        TimeUnit.SECONDS,
                        activity,
                        new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
                            @Override
                            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                                mPhoneAuthCredential = phoneAuthCredential;
                                emitter.onSuccess(true);
                            }

                            @Override
                            public void onVerificationFailed(FirebaseException e) {
                                e.printStackTrace();
                            }

                            @Override
                            public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                                super.onCodeSent(s, forceResendingToken);
                                mVerificationId = s;
                                mResendingToken = forceResendingToken;
                                emitter.onSuccess(false);
                            }
                        },
                        mResendingToken

                );
    });
}

private Single<Boolean> sentSms(Activity activity, String phoneNumber) {
    return Single.create(emitter -> {
        PhoneAuthProvider.getInstance()
                .verifyPhoneNumber(
                        phoneNumber,
                        60,
                        TimeUnit.SECONDS,
                        activity,
                        new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
                            @Override
                            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                                mPhoneAuthCredential = phoneAuthCredential;
                                emitter.onSuccess(true);
                            }

                            @Override
                            public void onVerificationFailed(FirebaseException e) {
                                e.printStackTrace();
                            }

                            @Override
                            public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                                super.onCodeSent(s, forceResendingToken);
                                mVerificationId = s;
                                mResendingToken = forceResendingToken;
                                emitter.onSuccess(false);
                            }
                        }

                );
    });
}

public Completable checkCode(String smsCode) {
    return Completable.create(e -> {
        if (smsCode != null && mVerificationId == null) {
            e.onError(new Throwable());
        } else {
            if (mPhoneAuthCredential == null && smsCode == null) {
                e.onError(new Throwable());
            } else if (mPhoneAuthCredential == null) {
                mPhoneAuthCredential = PhoneAuthProvider.getCredential(mVerificationId, smsCode);
            }
            mFirebaseAuth.signInWithCredential(mPhoneAuthCredential)
                    .addOnCompleteListener(task -> {
                        if (task.isSuccessful()) {
                            mPhoneAuthCredential = null;
                            mVerificationId = null;
                            mResendingToken = null;
                            e.onComplete();
                        } else {
                            e.onError(task.getException());
                        }
                    });
        }
    });
}

}

1 个答案:

答案 0 :(得分:0)

FirebaseAuthInvalidCredentialsException

引起

尝试将您传递的电话号码记录到sentSms()方法,并确保您传递的电话号码采用以下格式:

[+] [国家/地区代码] [用户电话号码]

示例:+919123456780