Android アプリケーション内から Glass タイムラインに投稿する 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 をいくつか作成できることがわかりました。そのため、androdi アプリケーション用のクライアント 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"));
どうも!