Cómo utilizar base de datos firebase desde broadcastreceiver

Estoy tratando de utilizar base de datos Firebase de un BroadcastReceiver para buscar algunos datos. Desafortunadamente el usuario es null veces, lo que significa que no puedo usar el UID los datos de búsqueda.

 @Override public void onReceive(final Context context, Intent intent) { FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if(user != null){ //sometimes not null }else{ //sometimes null } } }); } 

También FirebaseAuth.getInstance().getCurrentUser es null veces. Además, no estoy ejecutando mucho tiempo opertaion dentro de mi broadcastreceiver . Estoy hablando de obtener una sola opjes sin nodos debajo de ella.

¿Cómo puedo utilizar la base de datos Firebase desde un BroadcastReceiver ?

Trate de delegar a un servicio intencionado como este

 public class AuthenticationCheckService extends IntentService { public AuthenticationCheckService() { super("AuthenticationCheckService"); } @Override protected void onHandleIntent(@Nullable Intent intent) { //Once this code runs and its done the service stops so need to worry about long running service checkAuthenticationStatus(); } private void checkAuthenticationStatus() { FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { //Do stuffs } else { //Resolve to authentication activity } } }); } } 

A continuación, inicie el servicio dentro del método onReceive como este

 @Override public void onReceive(final Context context, Intent intent) { //Method implemented below checkAuthStatus(context); } private void checkAuthStatus(Context context) { Intent authCheckIntent = new Intent(context, AuthenticationCheckService.class); context.startService(authCheckIntent); } 

Entonces recuerde registrar el servicio en su archivo de manifiesto

  <service android:name=".AuthenticationCheckService" /> 

BroadcastReceiver no pretende ser utilizado para operaciones largas, intente iniciar IntentService desde ese receptor en su lugar. Android terminará este receptor si el trabajo toma demasiado tiempo. Tal vez, esa es la razón por qué el resultado es nulo a veces.

Confirme si el usuario / dispositivo está firmadoIn / Inicie sesión en Firebase para obtener más información sobre cómo autenticar una comprobación de usuario Configure Firebase Authentication for Android

Creo que lo averigüé. El problema no era el receptor de radiodifusión, sino el firebase que refrescaba el token. En ese momento el usuario era null . Algo así funcionó:

 @Override public void onReceive(final Context context, Intent intent) { FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if(user != null){ FirebaseAuth.getInstance().removeAuthStateListener(this); //do stuff }else{ //do nothing } } }); } 
  • ¿Cómo dar acceso diferente a diferentes tipos de usuarios para iniciar sesión en Firebase?
  • FirebaseUI autenticación con Facebook no funciona
  • ¿Cómo puedo solucionar el error de Android Firebase "Default FirebaseApp no ​​se inicializa en este proceso"?
  • Android Firebase - almacenamiento de datos sin autenticación
  • ¿Por qué el usuario de firebase todavía inició sesión después de haberlo eliminado del panel de FireBase?
  • Agregar más información de usuario con firebase
  • Firebase configuración de configuración remota por userId
  • Fusión de manifiesto de Android con las bibliotecas de facebook y firebase
  • ¿Cómo puedo permitir que mi aplicación acceda a firebase sin un login?
  • No se puede crear un usuario con la última versión de Firebase. Consigo un W / DynamiteModule y W / GooglePlayServicesUtil
  • NoClassDefFoundError: com.google.firebase.FirebaseOptions
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.