2016-11-01 14 views
1

私はレトロフィット2を使用していますし、Firebase認証前に私はSharedPreferencesで私のトークンを格納するために使用し、私のHttpInterceptorタスクリスナーを使用せずにFirebase認証トークンを取得する方法は?

@Named("rest_api") 
@Singleton 
@Provides 
Interceptor provideRESTInterceptor(final UserManager userManager) { 
    return new Interceptor() { 
     @Override 
     public Response intercept(final Chain chain) throws IOException { 
      final Request original = chain.request(); 

      Request request = original.newBuilder() 
        .header("Accept", "application/json") 
        .header("Authorization", "XXXX " + sharedPreference.getToken()) 
        .method(original.method(), original.body()) 
        .build(); 

      Response response = chain.proceed(request); 
      return response; 
     } 
    }; 
} 

にどのように私は FirebaseUser.getToken(false/true)と、このような何かを達成できますか?リスナーのコールバックを待つ方法と、firebaseトークンでリクエストを処理する方法は分かりません。私もここにしている場合、トークンの有効性を確認するために考えています

その私は、他の言葉で(全体の問題を理解することが、リスナーコールバックを待つことを確認していない作りgetToken(true)

+0

こんにちは@bikash。あなたは "XXXX"の代わりに何を使用して、ソリューションが機能するでしょうか? – Chisko

+0

私は@Benoitによって与えられたソリューションを使用していますが、それまではうまく動作しています。それも試してみてください – Bikash

+0

ありがとうございます。しかし、試してみて、トークンが受け入れられていません。私はあなたの答えを見たとき、私はそれに "ベアラー"を追加し、私は別の応答を持っていますが、未承認のので、私はあなたが "XXXX"の代わりに何を置くのだろうかと思っていた。 – Chisko

答えて

3

の有効期限が近づい)非同期呼び出しのうち同期方法は次のように達成することができる。

private String getToken() { 
    final StringBuilder token = new StringBuilder() ; 
    final CountDownLatch countDownLatch = new CountDownLatch(1) ; 
    FirebaseAuth.getInstance().getCurrentUser().getToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() { 
     @Override 
     public void onComplete(@NonNull Task<GetTokenResult> task) { 
      token.append(task.getResult().getToken()); 
      countDownLatch.countDown(); 
     } 
    }); 
    try { 
     countDownLatch.await(30L, TimeUnit.SECONDS); 
     return token.toString() ; 
    } catch (InterruptedException ie) { 
     return null;    
    } 
} 

  • のStringBuilderは単なる文字列ホルダとしてここで使用されています。
  • 防弾実装はもちろんtask.isSuccessfulをチェックする必要があります()
  • タイムアウト(ここでは30秒)があなたの状況にこのことができます

希望を適合させるべきです。

+0

の新しい私はちょうどブール値とfalseに設定してキャッシュトークンを取得するコードを変更した後、その有効期限がブール値リフレッシュトークンを取得するにはtrueに設定します – Bikash

関連する問題