Firebase ID Tokens을 사용하여 사용자의 HTTP 요청을 인증하고 있습니다. 현재 Firebase ID 토큰을 요청하고 요청 헤더에 요청 인터셉터를 설정했습니다.개조 된 요청 헤더에 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)에서 완벽하게 작동하고 아래에 있지만 SDK (25)와 HTTP 요청을 통해 흐르지 않고, 아무것도, 심지어 logging-interceptor
에 기록되지 도착 위에 실행할 때.
아래 코드와 함께이 인터셉터를 사용하고 있습니다.
public Retrofit getRetrofit() {
return new Retrofit.Builder()
.baseUrl(baseUrl)
.client(getOKHttpBuilder().build())
.addConverterFactory(converter)
.build();
}
내가 .client(getOKHttpBuilder().build())
를 제거하고 .client(new OkHttpClient.Builder().build())
모든 것이 잘 작동로 교체합니다.
"SDK 25 이상에서 작동하지 않음"이란 의미를 정확히 설명 할 수 있습니까? 오류가 발생합니까? 스택 트레이스가 있습니까? getNewTokenPassively() 함수가 올바른 값을 반환하지 않거나 전혀 반환하지 않습니까? 다른 일이 발생하거나 발생하지 않습니까? –
질문을 편집하여 자세한 정보를 추가했습니다. –