Получение и использование токена доступа oauth2 для очков Google из приложения для Android

Я пытаюсь получить токен доступа к стеклу для публикации на временной шкале стекла из приложения для Android. пользователь может выбрать некоторую информацию и отправить ее на свое стеклянное устройство.

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

где mEmail – адрес электронной почты пользователя Google Glass, а область действия:

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, нельзя использовать с API Glass Mirror. Я вернулся к консоли Google API и увидел, что вы можете создать некоторые идентификаторы клиентов для Android. Поэтому я создал идентификатор клиента для приложения Android, а также настроил простой доступ к API для Android. Для отпечатка SHA1 я использовал SHA1 сертификата отладки.

Кому-нибудь удалось получить токен Glass на Android и успешно выполнить запрос с телефона 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"));

Спасибо!


person Sven Haiges    schedule 18.07.2013    source источник


Ответы (1)


Чтобы получить действительный токен OAuth 2.0 на Android, вам потребуется использовать API сервисов Google Play, особенно GoogleAuthUtil.

Вам также потребуется зарегистрировать свой сертификат в консоли API; Я бы посоветовал ознакомиться с Быстрый старт Drive SDK для Android, в котором описаны эти шаги.

person Alain    schedule 18.07.2013
comment
Привет, Ален, я использую класс GoogleAuthUtil - вы можете видеть это в коде, который я опубликовал. Я также получаю токен доступа, пока все работает. но когда я использую этот токен доступа, который был создан с использованием правильных стеклянных областей, я получаю от сервера 401 Not Authorized. - person Sven Haiges; 22.07.2013
comment
Теперь я перешел на сторону сервера - например. Я передаю идентификатор при вызове частного прокси-сервера, и прокси-сервер (механизм приложения) выполняет вызов API-интерфейса Google Mirror. Оно работает... - person Sven Haiges; 22.07.2013
comment
Я также создал идентификатор клиента oauth2 и использовал настройки формы установленного приложения — я также добавил имя пакета и отпечаток пальца sha1. Я предполагаю, что проблема в том, что я затем выполняю ручные вызовы REST API. Например, в этих вызовах я нигде не устанавливаю отпечаток пальца SHA1. Я предполагаю, что API Google делают это автоматически. Есть ли способ сделать это вручную? Я хочу сам использовать API REST, я не хочу использовать предоставленный API, который делает много вещей без моего контроля. - person Sven Haiges; 22.07.2013
comment
Как только вы получите токен от GoogleAuthUtil, вы должны быть настроены на его использование так, как вы хотите. Вы также можете попытаться проверить свой токен, чтобы убедиться, что он был выпущен для вашего Приложение для Android, а не универсальное приложение. - person Alain; 22.07.2013