【发布时间】:2010-01-03 23:01:22
【问题描述】:
我很生气。我正在尝试使用 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。
当我回到旧的方式时,当用户手动输入他们的 Google 用户名和密码并且我从“https://www.google.com/accounts/ClientLogin”获取 AuthToken 时,它工作得很好。
请告诉我有人使用用户手机上的 Google 帐户中的 AuthToken 为 Google App Engine 应用程序构建了一个 Android 客户端,并告诉我为什么这不再有效。
我真的很想完成这项工作。我的替代方法是要求用户输入他们的凭据(这很笨拙,他们不应该这样做),或者为服务器使用另一种解决方案。
提前致谢。
【问题讨论】:
-
我们可以在运行 Google API 的模拟器上进行测试吗?
-
对于那些想知道“适当的 URL”是什么,以及如何“获取有效的 cookie”的人,this blog post 巧妙地介绍了它,其中还介绍了使 authToken 无效
标签: android google-app-engine authentication accountmanager