gpt4 book ai didi

java - 如何在不使用任务监听器的情况下获取 Firebase Auth Token?

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:06 25 4
gpt4 key购买 nike

我正在使用 Retrofit 2,在 Firebase Auth 之前,我曾将 token 存储在 SharedPreferences 和我的 HttpInterceptor

@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 token 处理请求。

我也在考虑检查这里的 token 有效性以及它是否即将过期 getToken(true)

最佳答案

我不确定是否理解整个问题,但是等待监听器回调(换句话说,从异步调用中创建同步方法)可以这样实现:

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 在这里只是用作 String holder。
  • 防弹实现当然应该检查 task.isSuccessful()
  • 超时(此处为 30 秒)应根据您的情况进行调整

希望这对您有所帮助。

关于java - 如何在不使用任务监听器的情况下获取 Firebase Auth Token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com