Open
Description
Hi, I am usign GRPC service and I am trying to extends ClientInterceptor to append some headers and ask to Firebase to give me a IdToken but I don't understand how can do it because task.getResult()
go to in exception java.lang.IllegalStateException: Task is not yet complete
I have tried also with a sync mode
GetTokenResult tokenResult = Tasks.await(task, 20, TimeUnit.SECONDS);
but nothing, exception java.lang.IllegalStateException: Must not be called on the main application thread
public class CustomHeaderInterceptor implements ClientInterceptor {
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
headers.put(Metadata.Key.of("X-XXX", Metadata.ASCII_STRING_MARSHALLER), "test_test");
try {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user == null) {
throw new Exception("User is not logged in.");
} else {
Task<GetTokenResult> task = user.getIdToken(false);
GetTokenResult tokenResult = task.getResult();
String idToken = tokenResult.getToken();
headers.put(Metadata.Key.of("Authorization", Metadata.ASCII_STRING_MARSHALLER), "Bearer " + idToken);
super.start(responseListener, headers);
}
} catch (Exception e) {
Log.d(this.getClass().getName(), new Gson().toJson(e));
}
}
};
}
}
I have tried also CompletableFuture
Task<GetTokenResult> task = user.getIdToken(false);
CompletableFuture<String> completableFuture = new CompletableFuture<>();
task.addOnCompleteListener(new OnCompleteListener<>() {
@Override
public void onComplete(Task<GetTokenResult> task1) {
GetTokenResult tokenResult = task1.getResult();
String idToken = tokenResult.getToken();
completableFuture.complete(idToken);
}
});
String idToken = completableFuture.get();
but the code stop on completableFuture.get()
How can I do to ask and append on each call the firebase token?