私はかなり憤慨しています。JavaのGoogleAppEngineをサーバーとして使用して、Android向けのターンベースのマルチプレイヤーオンラインゲームを構築しようとしています。
彼らは完璧にフィットしているようです。AndroidにはGoogleアカウントが必要であり、GAEは認証にGoogleアカウントを使用しますが、無料でスケーラブルです。
そのため、休暇の前に、Android2.0の新しいAccountManagerAPIを使用して、AndroidクライアントからGAEアプリへの認証を取得することができました。次のコードを使用すると、ユーザーのGoogleアカウントの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を使用してGoogleAppEngineアプリ用のAndroidクライアントを構築したことを教えてください。また、これが機能しなくなった理由を教えてください。
本当にこの作品を作りたいです。私の代替案は、ユーザーに自分の資格情報を入力するように要求することです(これは不格好で、行う必要はありません)、またはサーバー用の別のソリューションを使用します。
前もって感謝します。