9

更新:

刚才我使用我也用于 Google App Engine 的 Google 帐户注册了 Google API,现在错误已更改为com.google.android.gms.auth.GoogleAuthException: Unknown


Google 刚刚发布了一种通过 Google 帐户注册应用程序的新方法,并且在他们的博文中也给出了一些解释。

我正在编写一个您必须注册才能创建用户帐户的 Android 应用程序,并且我正在使用 Google App Engine 作为后端。使用播放服务,我想让用户的电子邮件与他们的 Android 设备和令牌相关联。我已经可以收到电子邮件,但是,获取令牌只会引发错误,并且由于文档非常稀疏,我不知道如何解决这些问题。这就是我收到电子邮件的方式:

private String[] getAccountNames() {
    mAccountManager = AccountManager.get(this);
    Account[] accounts = mAccountManager.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
    names = new String[accounts.length];
    for (int i = 0; i < names.length; i++) {
        names[i] = accounts[i].name;
    }

    return names;
}

但是,当我打电话时token = GoogleAuthUtil.getToken(context, email, "scope",它给了我这些错误: GooglePlayServices not available due to error 1com.google.android.gms.auth.GooglePlayServicesAvailabilityException: GooglePlayServicesNotAvailable

现在我的问题是,我是否必须设置任何权限或包含任何库来解决这个问题?什么是范围参数?他们的博客文章中给出了如何获取令牌以及为范围添加内容的示例,以将范围变量设置为,"https://www.googleapis.com/auth/userinfo.profile"但不幸的是我仍然遇到相同的错误。

我还为 Google API 控制台注册了我的应用程序并启用了 G+ API,我还需要在那里配置其他东西吗?

4

3 回答 3

20

我在使用 Google Drive 的 Google Client Library 时遇到了同样的问题。解决方案非常简单。只需将“oauth2:”添加到您的 scopeUrl。

错误的:

GoogleAuthUtil.getToken(this, account.name, DriveScopes.DRIVE);

正确的:

GoogleAuthUtil.getToken(this, account.name, "oauth2:" + DriveScopes.DRIVE);
于 2012-10-24T02:22:43.380 回答
3

您首先需要传递格式正确的范围,如下所示:

  private final static String G_PLUS_SCOPE = 
      "oauth2:https://www.googleapis.com/auth/plus.me";
  private final static String USERINFO_SCOPE =   
      "https://www.googleapis.com/auth/userinfo.profile";
  private final static String SCOPES = G_PLUS_SCOPE + " " + USERINFO_SCOPE;

您还需要从此处https://play.google.com/store/apps/details?id=com.google.android.gms安装 Google Play 服务。Google Play 服务已开始向所有安装了 Google Play (Froyo+) 的设备推出。

这里提供了更多信息:http ://android-developers.blogspot.com/2012/09/google-play-services-and-oauth-identity.html

于 2012-10-06T16:47:39.613 回答
2

您只能获取支持 OAuth2 的 Google 服务的令牌。如果您正在编写自己的 Web 服务,则应使用其本机身份验证机制(用户名和密码?)对其进行身份验证。“范围”显然是一个无效的范围,但似乎您没有安装 Google Play 服务,这就是您的错误的原因。您可以从 Play 商店安装它,但它并不适合您,因为您没有使用 Google 服务。

于 2012-10-03T02:36:56.950 回答