【问题标题】:Getting and using a google glass oauth2 access token from an android app从 android 应用程序获取和使用 google glass oauth2 访问令牌
【发布时间】:2013-07-19 01:57:30
【问题描述】:

我正在尝试从 Android 应用程序中获取 Glass 访问令牌以发布到 Glass 时间轴。用户可以选择一些信息并将其发送到他的眼镜设备。

String token = GoogleAuthUtil.getToken(activity, mEmail, activity.getString(R.string.glass_token_scope));

其中 mEmail 是 google glass 用户的 Google 帐户电子邮件,范围是:

oauth2:https://www.googleapis.com/auth/glass.timeline https://www.googleapis.com/auth/glass.location https://www.googleapis.com/auth/userinfo.profile

(oauth2: ...)

我正在使用 Google AuthUtil,它也确实返回了一个访问令牌。但是当我使用访问令牌时,API 以 401 Unauthorized 响应:

D/demo    (10804): Response Code: 401
D/demo    (10804): {
D/demo    (10804):  "error": {
D/demo    (10804):   "errors": [
D/demo    (10804):    {
D/demo    (10804):     "domain": "global",
D/demo    (10804):     "reason": "authError",
D/demo    (10804):     "message": "Invalid Credentials",
D/demo    (10804):     "locationType": "header",
D/demo    (10804):     "location": "Authorization"
D/demo    (10804):    }
D/demo    (10804):   ],
D/demo    (10804):   "code": 401,
D/demo    (10804):   "message": "Invalid Credentials"
D/demo    (10804):  }
D/demo    (10804): }

我还成功设置了服务器端 Oauth2 流程,并且使用生成的访问令牌,我可以从一个小的本地脚本成功创建时间线帖子。

从 Android Authutil 返回的访问令牌似乎不能与 Glass Mirror API 一起使用。我查看了 Google API 控制台,发现您可以创建一些特定于 Android 的客户端 ID。所以我为一个安卓应用程序创建了一个客户端 ID,并为 android 设置了简单的 API 访问。对于 SHA1 指纹,我使用了调试证书的 SHA1。

有没有人成功地在 Android 上获得了 Glass 令牌,并且已经成功地从带有该令牌的 android 手机发出请求?

对于我使用普通 HttpURLConnection 的实际请求 - 这可能是问题吗?

        HttpURLConnection con = (HttpURLConnection)new URL(URI_TIMELINE).openConnection();
        con.setRequestMethod("POST");
        con.setDoOutput(true);
        con.setRequestProperty("Authorization", "Bearer " + token);
        con.setRequestProperty("Content-Type", "application/json");
        con.getOutputStream().write(content.toString().getBytes("UTF-8"));

谢谢!

【问题讨论】:

    标签: google-mirror-api google-glass


    【解决方案1】:

    为了在 Android 上获得有效的 OAuth 2.0 令牌,您需要使用 Google Play 服务 API,尤其是 GoogleAuthUtil 类。

    您还需要在APIs Console 上注册您的证书;我建议查看描述这些步骤的Drive SDK Quickstart for Android

    【讨论】:

    • 您好 Alain,我正在使用 GoogleAuthUtil 类 - 您可以在我发布的代码片段中看到它。我还获得了一个访问令牌,到目前为止一切正常。但是当我使用这个使用正确的玻璃范围创建的访问令牌时,我从服务器得到一个 401 Not Authorized。
    • 我现在已经切换到服务器端 - 例如我在对私有代理服务器的调用中传递了一个标识符,代理服务器(应用程序引擎)对谷歌镜像 api 执行调用。它有效...
    • 我还创建了一个 oauth2 客户端 ID 并使用设置表单“已安装的应用程序” - 我还添加了包名称和 sha1 指纹。我想问题是我然后执行“手动”REST API 调用。例如,在这些电话中,我无处设置 SHA1 指纹。我假设 Google API 会自动执行此操作。有没有办法手动做到这一点?我想自己使用 REST api,我不想使用提供的 API 做很多事不受我控制。
    • 从 GoogleAuthUtil 获得令牌后,您应该设置为以您想要的方式使用它。您也可以尝试validate your token 以确保它是为您的 Android 应用而不是通用应用发布的。
    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 2015-07-27
    • 2015-02-11
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多