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.
- Obtener 'No se puede resolver el método' addOnCompletionListener () '...' al intentar colocar algún código dentro del método onClick () de builder.setPositiveButton
- Comportamiento incoherente de la base de datos en tiempo real de Firebase en modo sin conexión
- Cómo comprobar si la tarea de escritura tuvo éxito en Firebase
- Firebase para Android no funciona en mi dispositivo de prueba de repente
- Autenticación de código Qr mediante Firebase
¿Cómo puedo utilizar la base de datos Firebase desde un BroadcastReceiver
?
- Administrador de Firebase NoClassDefFoundError: FirebaseOptions $ Builder
- Cómo comprobar si un usuario está iniciando sesión por primera vez con Firebase Authentification
- Android Auth Error: "GetToken falló con el código de estado: INVALID_AUDIENCE"
- ¿Qué se entiende por Listener con escopo de actividad en android?
- Utilizar DB de Firebase con DB local
- No se puede autenticar a los usuarios con Firebase mientras se utilizan datos móviles en la aplicación de Android, pero no hay error al utilizar wifi
- Crear usuario en la base de datos después de Firebase Auth (android)
- Firebase Auth no funciona - "Actualizar los servicios de Google Play" msg en el emulador (Android)
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 } } }); }
- Android: Diferencia entre FileOutputStream y FileWriter
- Android: cómo establecer fijo no (5) de filas se muestra en ListView y después de desplazamiento?