我很生气。我正在尝试使用 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 客户端,并给我一些关于为什么这不再工作的线索。
我真的很想完成这项工作。我的替代方法是要求用户输入他们的凭据(这很笨拙,他们不应该这样做),或者为服务器使用另一种解决方案。
提前致谢。