1

在我阅读Verifying Back-End Calls from Android Appshttp://android-developers.blogspot.tw/2013/01/verifying-back-end-calls-from-android.html)之后,我也阅读了Google Play services and OAuth Identity Toolshttp://android-developers.blogspot.tw /2012/09/google-play-services-and-oauth-identity.html)它说

“您应该在每组 GET 或 POST 之前调用 GoogleAuthUtil.getToken() 以获取令牌;适当地缓存内容以及处理令牌到期和刷新是很聪明的。”

读完这句话,我有三个问题。

  1. 因为需要GoogleAuthUtil.getToken()在每组 GET 或 POST 之前调用来获取令牌,所以我想知道是否GoogleAuthUtil.getToken()是线程安全的。

假设一个场景,我需要在后台定期与我的服务器同步。每次我通过一组 HTTP 请求与我的服务器联系之前,我需要调用GoogleAuthUtil.getToken()以便可以使用有效令牌发送请求。

另一方面,当用户与我的应用程序交互时,我也需要做同样的事情:调用GoogleAuthUtil.getToken()获取令牌并将其与一组 HTTP 请求一起发送到我的服务器。因为用户可能在后台同步进行时与应用程序交互,GoogleAuthUtil.getToken()可能会同时在两个不同的线程中调用。因此,我想知道 getToken() 是否是线程安全的。

2.有没有办法可以获取令牌到期时间,以便我可以缓存令牌?我检查了文档(http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html)没有这样的方法。

3.是否应该刷新返回的token GoogleAuthUtil.getToken() ?如果是,有没有办法做到这一点?或者,GoogleAuthUtil.getToken()每次需要有效令牌时我都应该打电话吗?

4

1 回答 1

0
  1. 我不会担心线程安全性。我试图思考由于线程冲突而可能出现的问题,但没有想到任何事情。

2 & 3。找到令牌到期时间的唯一记录方法是点击 tokeninfo 端点,但我认为您不想为此添加 HTTP 往返。我认为聪明的事情就是继续调用 getToken() ,它会确保你得到的东西足够长,可以派上用场。它会根据需要刷新,因此您不必这样做。

于 2013-09-23T20:53:52.470 回答