2016-08-23 8 views
6

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要求文字列を構築することを言及するのを忘れてしまいました。

答えて

6

はい、有効期限が切れます()。有効期限はjwt.ioです。リフレッシュを強制しない場合(つまりuser.getToken(false))、返されたトークンは期限が切れた場合にのみ更新されます。 truegetToken(...)に渡すと、新しいトークンが作成されます。このトークンには、firebaseサーバーでリンクされたプロバイダのトークン検証も含まれます(たとえば、Facebookにユーザーが自分のアカウントをまだリンクしているかどうかを検証します)。後者は毎日のトークンサービスクォータにカウントされるので、必要なときにだけ使用するようにしてください。

関連する問題