Приложение Android падает при аутентификации на базе firebase - PullRequest
0 голосов
/ 11 мая 2018

Я использую firebase для аутентификации номера телефона. Когда я использую свой номер телефона, он автоматически проверяет его. Но когда я использую другой номер телефона, я получаю classCastException . Он говорит "getGoogleApiForMethod ()возвратил Gms ". Аналогичная проблема в stackoverflow Link . Ответ заключался в том, чтобы понизить сервисы firebase или google play в телефоне или эмуляторе. Я включил gradle, а также ниже. Проверьте это

Исключение:

W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@c2c24f7
05-11 15:00:05.597 29282-29282/ W/System.err: java.lang.ClassCastException: Otp.OtpCodeFrag cannot be cast to java.util.concurrent.Executor
05-11 15:00:05.607 29282-29282/ W/System.err:     at Otp.OtpCodeFrag.signInWithPhoneAuthCredential(OtpCodeFrag.java:402)
        at Otp.OtpCodeFrag.access$200(OtpCodeFrag.java:39)
        Otp.OtpCodeFrag$2.onClick(OtpCodeFrag.java:222)
        at android.view.View.performClick(View.java:5716)
        at android.widget.TextView.performClick(TextView.java:10926)
        at android.view.View$PerformClick.run(View.java:22596)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:7325)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

OTPFrag.java:

        onVerificationStateChangedCallbacks=new PhoneAuthProvider.OnVerificationStateChangedCallbacks()
                    {
                        @Override
                        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential)
                        {
                            phoneauthCredential = phoneAuthCredential;
                            automatic_verification = true;

                            Toast.makeText(getContext(), "Verification Completed", Toast.LENGTH_SHORT).show();

                        }
                        @Override
                        public void onVerificationFailed(FirebaseException e) {
                            Toast.makeText(getContext(),"Verification Failed",Toast.LENGTH_SHORT).show();
                            e.printStackTrace();
                        }

                        @Override
                        public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken)
                        {
                            super.onCodeSent(s, forceResendingToken);
                            Toast.makeText(getContext(),"CodeSent",Toast.LENGTH_SHORT).show();
                            verificationid=s;
                            codesent=true;
                            token=forceResendingToken.toString();
                            Log.e("Token",token);
                            Log.e("ID",s);
        //                           smscode=phoneauthCredential.getSmsCode();
                        }
                        };

                    PhoneAuthProvider.getInstance().verifyPhoneNumber(
                        phonenumber,        // Phone number to verify
                        4,                 // Timeout duration
                        TimeUnit.SECONDS,   // Unit of timeout
                        getActivity(),               // Activity (for callback binding)
                        onVerificationStateChangedCallbacks);

    otpCodeLytBinding.verifyOtp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {

                code1=otpCodeLytBinding.cd1.getText().toString();
                code2=otpCodeLytBinding.cd2.getText().toString();
                code3=otpCodeLytBinding.cd3.getText().toString();
                code4=otpCodeLytBinding.cd4.getText().toString();
                code5=otpCodeLytBinding.cd5.getText().toString();
                code6=otpCodeLytBinding.cd6.getText().toString();
                   if (code1!=null&&!code1.equals("")&&code2!=null&&
                   !code2.equals("")&&code3!=null&&!code3.equals("")
                   &&code4!=null&&!code4.equals("")&&code5!=null
                   &&!code5.equals("")&&code6!=null&&!code6.equals(""))
               {
                   completecode=code1+code2+code3+code4+code5+code6;
                   Log.e("cm",completecode);
                   try {
                       if (verificationid!=null&&completecode!=null){

                           PhoneAuthCredential credential = PhoneAuthProvider.
                               getCredential(verificationid, completecode);
                           signInWithPhoneAuthCredential(credential);
                       }
                       else {
                           Toast.makeText(getContext(),"Something null",Toast.LENGTH_SHORT).show();
                       }
                   }
                   catch (Exception e)
                   {
                       e.printStackTrace();
                   }

               }
               else {
                       Toast.makeText(getContext(),"Please enter otp",Toast.LENGTH_SHORT).show();
                   }
            }
        });
     private void signInWithPhoneAuthCredential(PhoneAuthCredential credential)
        {
            Log.e("SigningIn","Started");
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener((Executor) this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                // Sign in success, update UI with the signed-in user's information
    //                            Log.d(TAG, "signInWithCredential:success");
    //
    //                            FirebaseUser user = task.getResult().getUser();
                                                          }
 else {
                                // Sign in failed, display a message and update the UI
                                Log.w(TAG, "signInWithCredential:failure", task.getException());
                                if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                                    // The verification code entered was invalid
                                }
                            }
                        }
                    });
        }

build.gradle (приложение):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.root5solutions.loc8official"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.balysv:material-ripple:1.0.2'

//    implementation 'com.appolica:flubber:1.0.1'
    implementation 'com.google.firebase:firebase-core:15.0.2'
    implementation 'com.google.firebase:firebase-auth:15.1.0'
    testImplementation 'junit:junit:4.12'
//    androidTestImplementation 'com.android.support.test:runner:1.0.2'
//    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'

build.gradle (проект):

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        classpath 'com.google.gms:google-services:3.2.0'



        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "https://maven.google.com" // Google's Maven repository
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

1 Ответ

0 голосов
/ 11 мая 2018

Я не знаю, что вы пытаетесь сделать с этой строкой:

.addOnCompleteListener((Executor) this, new OnCompleteListener<AuthResult>() {

Приведение this к Executor не имеет смысла. То, что вы хотите вместо this, является ссылкой на текущую активность. Попробуйте getActivity() вместо этого, чтобы получить эту ссылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...