with studio retrieve password getcurrentuser firestore data create con authui auth autenticacion and android firebase-authentication

studio - Autenticación de SMS en Android NullPointerException



firestore auth android (1)

Puedes echar un vistazo a este código de trabajo.

build.gradle (nivel de aplicación)

dependencies { implementation ''com.google.firebase:firebase-core:16.0.5'' implementation ''com.google.firebase:firebase-auth:16.0.5'' }

build.gradle (nivel de proyecto)

buildscript { dependencies { classpath ''com.google.gms:google-services:4.1.0'' } }

Actividad:

import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.FirebaseException; import com.google.firebase.FirebaseTooManyRequestsException; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.PhoneAuthCredential; import com.google.firebase.auth.PhoneAuthProvider; import java.util.concurrent.TimeUnit; public class FCMsmsTest extends AppCompatActivity { private EditText editText; private String mVerificationId = ""; PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) { Toast.makeText(FCMsmsTest.this, "onVerificationCompleted " + phoneAuthCredential.toString(), Toast.LENGTH_SHORT).show(); signInWithPhoneAuthCredential(phoneAuthCredential); } @Override public void onVerificationFailed(FirebaseException e) { Toast.makeText(FCMsmsTest.this, "onVerificationFailed " + e.toString(), Toast.LENGTH_SHORT).show(); if (e instanceof FirebaseAuthInvalidCredentialsException) { Toast.makeText(FCMsmsTest.this, "Invalid Request " + e.toString(), Toast.LENGTH_SHORT).show(); } else if (e instanceof FirebaseTooManyRequestsException) { Toast.makeText(FCMsmsTest.this, "The SMS quota for the project has been exceeded " + e.toString(), Toast.LENGTH_SHORT).show(); } } @Override public void onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken token) { Toast.makeText(FCMsmsTest.this, "onCodeSent " + verificationId, Toast.LENGTH_SHORT).show(); editText.setText(""); mVerificationId = verificationId; PhoneAuthProvider.ForceResendingToken mResendToken = token; showDialog(); } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fcm_sms_test); editText = findViewById(R.id.edit_text); findViewById(R.id.btn_send_sms).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (editText.getText().toString().trim().length() > 9) { sendSMS("+91" + editText.getText().toString().trim()); } else { Toast.makeText(FCMsmsTest.this, "Enter Valid PhoneNumber", Toast.LENGTH_SHORT).show(); } } }); } private void sendSMS(String phoneNumber) { PhoneAuthProvider.getInstance().verifyPhoneNumber( phoneNumber, // Phone number to verify 60, // Timeout duration TimeUnit.SECONDS, // Unit of timeout this, // Activity (for callback binding) mCallbacks); } private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) { FirebaseAuth mAuth = FirebaseAuth.getInstance(); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Toast.makeText(FCMsmsTest.this, "signInWithCredential:success", Toast.LENGTH_SHORT).show(); FirebaseUser user = task.getResult().getUser(); } else { Toast.makeText(FCMsmsTest.this, "signInWithCredential:failure", Toast.LENGTH_SHORT).show(); if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) { Toast.makeText(FCMsmsTest.this, "The verification code entered was invalid", Toast.LENGTH_SHORT).show(); } } } }); } private void showDialog() { AlertDialog.Builder alert = new AlertDialog.Builder(this); final EditText edittextCode = new EditText(FCMsmsTest.this); alert.setMessage("Enter Your Message"); alert.setTitle("Enter Your Title"); alert.setView(edittextCode); alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String YouEditTextValueString = edittextCode.getText().toString(); PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, YouEditTextValueString); signInWithPhoneAuthCredential(credential); } }); alert.show(); } }

xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:padding="50dp"> <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+91" /> <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="phone" /> </TableRow> <Button android:id="@+id/btn_send_sms" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:text="Send OTP" /> </LinearLayout>

Actualice su proyecto en consecuencia.

Estoy recibiendo este error

Error actualizado:

E/AndroidRuntime: FATAL EXCEPTION: main Process: xxx.com.xxx, PID: 4963 java.lang.NullPointerException: Attempt to invoke virtual method ''com.google.android.gms.tasks.Task com.google.android.gms.common.api.GoogleApi.zzb(com.google.android.gms.common.api.internal.zzdf)'' on a null object reference at com.google.android.gms.internal.zzdtp.zzb(Unknown Source) at com.google.android.gms.internal.zzdtw.zza(Unknown Source) at com.google.firebase.auth.FirebaseAuth.zza(Unknown Source) at com.google.firebase.auth.PhoneAuthProvider.zza(Unknown Source) at com.google.firebase.auth.PhoneAuthProvider.verifyPhoneNumber(Unknown Source) at xxx.com.xxx.PhoneNumberActivity.onClick(PhoneNumberActivity.java:110) at android.view.View.performClick(View.java:5265) at android.view.View$PerformClick.run(View.java:21534) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5728) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

Cuando intento ejecutar este código

PhoneAuthProvider.getInstance().verifyPhoneNumber( phoneNumber, // Phone number to verify 60, // Timeout duration TimeUnit.SECONDS, // Unit of timeout this, // Activity (for callback binding) mCallbacks); // OnVerificationStateChangedCallbacks

En la aplicación build.gradle

implementation ''com.google.firebase:firebase-database:11.6.0'' implementation ''com.google.firebase:firebase-auth:11.6.0''

¿Por qué dice que es nulo? ¿Qué es nulo? Lo estoy ejecutando en el dispositivo Android versión Android 6.0. ¿Es porque no hay una tarjeta SIM en el teléfono? Ya he habilitado la autenticación del teléfono en la consola y está funcionando en iOS.

Actualizaciones:

Después de actualizar la versión de firebase-core y firebasse-auth, la aplicación ya no se bloquea.

implementation ''com.google.firebase:firebase-core:16.0.5'' implementation ''com.google.firebase:firebase-auth:16.0.5''

Descubrí que está causado por la versión 8.3.01 (2385995-434) de los servicios Google Play del teléfono que estoy probando. ¿Alguna solución para que funcione con 8.3.01?

Error:

"W / GooglePlayServicesUtil: servicios de Google Play desactualizados. Requiere 12451000 pero se encontraron 8301434"

Pregunta:

¿Cómo controlar la minima versión de los servicios de Google Play?