2

我已经设置了一个带有 Google+ 的 Android 应用程序,我想知道是否可以使用此连接对 Google AppEngine 端点进行身份验证。

谷歌示例代码是:

   settings = getSharedPreferences(TAG, 0);
    credential = GoogleAccountCredential.usingAudience(this, ClientCredentials.AUDIENCE);
    setAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
    Tictactoe.Builder builder = new Tictactoe.Builder(
        AndroidHttp.newCompatibleTransport(), new GsonFactory(),
        credential);
    service = builder.build();

所以这很好,但我正在重新进行身份验证。我可以以任何方式利用 PlusClient 来避免创建更多凭据吗?

谢谢

4

1 回答 1

5

您可以执行以下步骤来利用您的 google plus 符号对 Google AppEngine 端点的用户进行身份验证:

1、使用google plus获取账号名,步骤中

String accountName = mPlusClient.getAccountName();

现在您不必使用示例代码中提供的帐户选择器,因为您可以通过 google plus 获取帐户名称

2,将上述步骤中的帐户名保存到 sharedpreferences 和 credential 中:

private void setAccountName(String accountName) {
SharedPreferences.Editor editor = settings.edit();
editor.putString(PREF_ACCOUNT_NAME, accountName);
editor.commit();
credential.setAccountName(accountName);
this.accountName = accountName;
}

3,为要用作受众的 Web 应用程序创建客户端 ID。我想这应该在 api 控制台中的同一个项目中,您已经为您的 android 应用程序创建了一个客户端 ID。将此 Web 应用程序客户端 ID 设置为 ClientCredentials.AUDIENCE 值。

4,在您的应用引擎项目中,带有云端点的@endpoints.api 装饰器或@endpoints.method 装饰器的allowed_client_ids 参数提供Android 客户端ID 和Web 客户端ID。您还必须将 @endpoints.api 装饰器的受众参数设置为 Web 客户端 ID。

5、在你的安卓应用中,使用账户名和受众详细信息创建一个谷歌凭证对象并将其传递给你的服务对象以调用所需的云端点

6、您还可以在您的应用引擎代码中添加用户检查,以确保有效用户正在访问

from google.appengine.ext import endpoints
current_user = endpoints.get_current_user()
    if raise_unauthorized and current_user is None:
        raise endpoints.UnauthorizedException('Invalid token.')

由于您有 google+,您还可以使用此处给出的 userinfo.email 范围查找电子邮件 ID 。另请查看以下 2 个帖子以获取有用信息:GCE with G+Oauth on GAE with google play services

于 2013-06-17T10:42:21.007 回答