Android: ¿caducan los tokens de autenticación de usuario de Firebase?
Decidi usarVolley
e ir a la ruta RESTful conFirebase
ya que sus oyentes parecen colgar cuando no hay conexión a internet. Al menos con Volley, me permite saber si una solicitud de red no tuvo éxito debido a una conexión a Internet o no.
Necesito saber siFirebaseUser
los tokens de autenticación caducan o no. En mi aplicación, solo permito la autenticación de Google y Facebook, y uso el siguiente código suponiendo que el token de autenticación de usuario de Firebase NO caduque:
private String authToken;
// Callbacks
public interface ApiCallbacks {
public void onSuccess(JSONObject response);
public void onError(String errorString);
}
private interface AuthTokenCallbacks {
public void onAuthTokenSuccess();
public void onAuthTokenError(String errorString);
}
// Request Helpers
private void getAuthToken(final AuthTokenCallbacks callbacks) {
// Lazy instantiation
if (authToken == null) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user == null) {
callbacks.onAuthTokenError("Please log in");
} else {
user.getToken(false).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
@Override
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (task.isSuccessful()) {
authToken = task.getResult().getToken();
callbacks.onAuthTokenSuccess();
} else {
callbacks.onAuthTokenError("Please log in");
}
}
});
}
} else {
callbacks.onAuthTokenSuccess();
}
}
public void sendGetRequestTo(final String endpoint, final HashMap<String, String> arguments, final RequestQueue requestQueue, final String tag, final ApiCallbacks callbacks) {
// Only execute get request if we have an auth token
getAuthToken(new AuthTokenCallbacks() {
@Override
public void onAuthTokenSuccess() {
final String requestUrl = getRequestUrlString(endpoint, arguments);
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, requestUrl, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
callbacks.onSuccess(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callbacks.onError(error.toString());
}
});
request.setTag(tag);
requestQueue.add(request);
}
@Override
public void onAuthTokenError(String errorString) {
callbacks.onError("Please log in");
}
});
}
¿Es esta la forma correcta de hacerlo? Solo necesito saber si voy en la dirección correcta porque no quiero futuros problemas con la expiración de mis tokens de autenticación (si es que lo hacen).
EDITAR
Olvidé mencionar que mifinal String requestUrl = getRequestUrlString(endpoint, arguments);
El método básicamente construye la cadena de solicitud de URL conauth=authTokenString
agregado al final de mi url.