Firebase ID Tokensを使用して、ユーザーからのHTTP要求を承認しています。現在、私は、Firebase IDトークンを要求し、それをリクエストヘッダに追加するリクエストインターセプタを設定しています。 SDK 25上で動作し、HTTPリクエストが流れていないと何もさえlogging-interceptor
ログオンしていない上に取得したときに改造したリクエストヘッダーにFirebase IDトークン(認証トークンではない)を送信する
private OkHttpClient.Builder getOKHttpBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder newRequest = request.newBuilder().header("x-access-token", getNewTokenPassively());
return chain.proceed(newRequest.build());
}
});
return builder;
}
private String getNewTokenPassively() {
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
final String[] currentToken = {null};
if(currentUser != null) {
currentUser.getIdToken(false).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
@Override
public void onComplete(@NonNull Task<GetTokenResult> task) {
try {
currentToken[0] = task.getResult().getToken();
}
catch (Exception e) {
//TODO: Investigate
}
}
});
}
while(currentToken[0] == null) {
//do nothing
}
return currentToken[0];
}
このコードは、SDK 24に上下に完璧に動作しますが。
私はこのインターセプタを以下のコードで使用しています。
私は.client(getOKHttpBuilder().build())
を削除し、.client(new OkHttpClient.Builder().build())
すべてが正常に動作して、それを交換してください。
「SDK 25以上で動作しない」という意味を明確にすることはできますか?エラーになりますか?スタックトレースはありますか? getNewTokenPassively()関数は適切な値を返さないか、まったく返さないのでしょうか?何か他のことが起こるかどうか? –
質問を編集して詳細を追加しました。 –