gpt4 book ai didi

android - Android客户端中AccountManager的AuthToken不再工作

转载 作者:IT老高 更新时间:2023-10-28 21:35:13 25 4
gpt4 key购买 nike

我很生气。我正在尝试使用 Java 中的 Google App Engine 作为服务器,为 Android 构建一个回合制多人在线游戏。

它们看起来非常合身。 Android 需要 Google 帐户,而 GAE 使用 Google 帐户进行身份验证,同时免费且可扩展。

因此,在假期之前,我能够使用 Android 2.0 中的新 AccountManager API 从我的 Android 客户端获得对我的 GAE 应用程序的身份验证。下面的代码可以让你访问用户谷歌账户的AuthToken,然后使用它进行身份验证,这样用户就不必手动输入他们的账户用户名和密码:

   AccountManager mgr = AccountManager.get(this); 
Account[] accts = mgr.getAccountsByType("com.google");
Account acct = accts[0];
AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(acct, "ah", null, this, null, null);
Bundle authTokenBundle = accountManagerFuture.getResult();
String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();

然后我能够将生成的 AuthToken 字符串附加到适当的 URL 并获得一个有效的 cookie,然后我可以将其用于所有进一步的请求。唯一的问题是,上周的某个时候它刚刚停止为我工作。现在,当我尝试使用上述代码中的 AuthToken 时,我没有返回 cookie,并且我的代码为丢失的 cookie 抛出 NullPointerException。

当我回到旧的方式时,当用户手动输入他们的谷歌用户名和密码并且我从“https://www.google.com/accounts/ClientLogin”获取 AuthToken 时,它工作得很好。

请告诉我有人使用用户手机上的 Google 帐户中的 AuthToken 为 Google App Engine 应用程序构建了一个 Android 客户端,并告诉我为什么这不再有效。

我真的很想完成这项工作。我的替代方法是要求用户输入他们的凭据(这很笨拙,他们不应该这样做),或者为服务器使用另一种解决方案。

提前致谢。

最佳答案

从 Google 工程师那里得到了帮助。原来我的 authToken 已过期。我最初是在 12 月初(准确地说是 9 日)开始实现。显然 AccountManager 所做的是缓存 authToken,所以自 12 月 9 日以来我一直在使用相同的 authToken。当我从假期回来时,它已经过期了。

为了解决这个问题,我现在调用 getAuthToken,然后对该 token 调用 invalidateAuthToken,然后再次调用 getAuthToken。这会生成一个有效的 authToken 并且可以正常工作,即使它有点笨拙,并且如果 AccountManager 每次都获得一个新的 authToken 或者检查缓存的 authToken 是否已过期,这将是不必要的。

请注意,您不能将 token 类型与帐户类型混淆:invalidateAuthToken 必须使用“com.google”而不是“ah”调用,否则它将静默失败。

关于android - Android客户端中AccountManager的AuthToken不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996686/

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