2014-09-13 2 views
6

Мне нужна помощь, связанная с вставкой API Mirror Credentials из моего кода сервера Python. Мы используем библиотеку API Google Python для вставки специального токена аутентификации в API Mirror, но я получаю пустой результат от mirror.accounts(). Insert(). Execute(), где мне нужно получить хотя бы ошибку или подтверждение того, что учетные данные маркера API, которые мы передаем в Google Mirror API.Как вы вставляете учетные данные Google Glass Mirror из кода на стороне сервера python?

Вот наш код сервера Python с некоторой редакцией нашей секретной информации, секретные секретные секретные ключи и client_id находятся в секретном файле .json, который мы надежно сохраняем на нашем сервере.

with open(os.path.join(os.path.dirname(__file__), 'mirror-credentials.json')) as f: 
    credentials_json = json.load(f) 
    credentials = SignedJwtAssertionCredentials(
     service_account_name=credentials_json['client_email'], 
     private_key=credentials_json['private_key'], 
     scope='https://www.googleapis.com/auth/glass.thirdpartyauth', 
    ) 

http = credentials.authorize(httplib2.Http()) 
mirror = apiclient.discovery.build('mirror', 'v1', http=http) 

glass_request = mirror.accounts().insert(
    userToken=$glassware_gallery_user_token, 
    accountType='com.mycompany', 
    accountName="testAccountName", 
    body={ 
     'features': ["a", "b", "c"], 
     'password': $myapp_glass_auth_token, 
     'userData': [{"key": "realName", "value": "Rusty Shackleford"}], 
     'authTokens': [ 
     {"type": "drchrono_glass_token", "authToken": $myapp_glass_auth_token} 
     ], 
    }, 
) 
retValue = glass_request.execute() 

Примечание: $glassware_gallery_user_token знамение мы получаем передаемся из Google App Gallery, когда мы Обратим стеклянную посуду на (мы уже настроили нашу стеклотару приложение).

Выполнение вышеуказанного кода, мы получаем пустое значение для retValue, это пустой словарь: {} при печати. Из документации похоже, что это должно быть сообщение об ошибке или подтверждение.


В ответ на комментарий:

Вот распечатка, что запрос мы посылаем как выглядят (есть, вставив операторы печати в httplib2 исходного кода):

 
body='{"userData": [{"value": "Rusty Shackleford", "key": "realName"}], "authTokens": [{"authToken": "$omitted_auth_token", "type": "$myapp_glass_token"}], "password": "$omitted_auth_token", "features": ["a", "b", "c"]}', 

headers='{'content-length': '305', 'accept-encoding': 'gzip, deflate', 'accept': 'application/json', 'user-agent': 'google-api-python-client/1.2 (gzip)', 'content-type': 'application/json', 'authorization': 'Bearer ya29.hACi3eQf2L2awk3rrLgf1uZQHen2ZANgT_ObBqTNpqrwC6wa_DwjuO9q'}', 

request_uri='/mirror/v1/accounts/$my_google_serviceid/$com.myappname/rustyshack?alt=json' 

I получить пустой словарь в качестве ответа: {}

Я вижу, что на самом деле это говорит о службах Googles по двум причинам:

  1. Если я изменяю user_token как недопустимый, код генерирует исключение.
  2. Я вижу счетчик вызовов API в консоли разработчика Google, считая эти попытки как призывы к нашей квоте API.

Фактические данные в ответ от сервера Google, (распечатаны в httplib2 имеет код статуса 204:

 
''/'{'fp': , 'status': 204, 'will_close': False, 'chunk_left': 'UNKNOWN', 'length': 0, 'strict': 0, 'reason': 'No Content', 'version': 11, 'debuglevel': 0, 'msg': , 'chunked': 0, '_method': 'POST'}' 

@TonyAllevato Я пытаюсь извлечь все учетные записи на устройстве с AccountManager. getAccounts(), и я получаю только одну учетную запись типа «com.google». getAccountsByType («com.xxxxxx») с моим приложением, указанным во время процесса проверки, возвращает пустой массив.

+1

Ничто не сразу подскакивает мне, как ошибаться. Есть ли способ, которым вы можете предоставить исходный дамп запроса и ответа от сервера, прежде чем клиентская библиотека выполнит преобразование типа данных Python? –

+1

@TonyAllevato Я печатаю запрос, который мы строим из объекта PIRON Mirror API. Я не знаю, как углубиться в фактический код API. Есть ли примеры Python для проверки подлинности GDK, на которые я могу смотреть и следовать? – MikeN

+1

Я лично предлагаю дополнительную подарочную карту Outback steakhouse за $ 250 для тех, кто может помочь мне исправить эту проблему. – MikeN

ответ

1

Вставить зеркало Документация API немного неверна. Она возвращает пустой ответ с кодом заголовка состояния от 204 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) «Нет содержимого», когда он будет успешным. Некоторые части документации заставили меня поверить в то, что он повторит учетные данные в ответе, но это было не так.

Отдельная заметка: я смог отладить, почему я не смог загрузить учетные данные на моем стекле, сначала убедившись, что я смогу установить свою стеклянную посуду из магазина https://google.com/myglass на моем стеклянном устройстве, что гарантирует, что есть подключение.