Volley
を使用し、インターネットに接続していないときにリスナーがハングしているようなので、Firebase
のRESTfulルートに進むことにしました。少なくともVolleyと一緒に、インターネット接続のためにネットワークリクエストが成功しなかったかどうかを知ることができます。Android - Firebaseのユーザー認証トークンは期限切れですか?
FirebaseUser
認証トークンの有効期限が切れるかどうかを知る必要があります。私のアプリでは、私はGoogleとFacebookの認証を許可し、私はFirebaseユーザーの認証トークンの有効期限が切れるしないでくださいと仮定して、次のコードを使用します。
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");
}
});
}
これはそれを行うための正しい方法ですが?私は正当な方向に向かいつつあるかどうかを知る必要があります。なぜなら、私の認証トークンの期限が切れている(もしそうなら)将来の問題を望んでいないからです。
EDIT
は、私は私のfinal String requestUrl = getRequestUrlString(endpoint, arguments);
方法は基本的に私のURLの末尾に追加auth=authTokenString
とURL要求文字列を構築することを言及するのを忘れてしまいました。