我正在尝试使用以下代码获取 FCM v1 的访问令牌。
static String SCOPES = "https://www.googleapis.com/auth/firebase.messaging";
private static String getAccessToken() throws IOException {
GoogleCredentials googleCredentials = GoogleCredentials
.getApplicationDefault()
.createScoped(Arrays.asList(SCOPES));
// googleCredentials.refresh();
googleCredentials.refreshIfExpired(); // Doesn't work either
return googleCredentials.getAccessToken().getTokenValue();
}
我能够获取令牌并向 FCM 发布消息。问题是,每次我调用
refreshIfExpired()
时,即使前一个令牌没有过期,它也会给我一个新令牌。这是预期的吗?我应该在最后检查一下是否过期吗?我猜测会有一些速率限制器来获取新的代币。我也尝试过拥有一个常见的 GoogleCredentials
对象,但仍然存在同样的问题。
刷新令牌存储在哪里?它在哪里检查访问令牌过期(客户端或服务器)?
我尝试阅读文档,但对我来说还不够清楚。我需要对此有一些清晰的了解,并且需要一种仅在令牌过期时刷新令牌的方法。
如果您使用服务帐户创建访问令牌,则它不会创建刷新令牌。
服务帐户没有刷新令牌。发送消息时必须重新进行身份验证过程。
即使我在令牌响应中得到了这个。
refresh_token: 'jwt-placeholder'