如何从python服务器端代码插入Google Glass Mirror凭据?

Mik*_*keN 6 python google-glass google-mirror-api google-gdk

我需要一些帮助来完成从我的Python服务器代码中插入Mirror Credentials API.我们正在使用Python Google API库在Mirror API中插入一个特殊的身份验证令牌,但是我从mirror.accounts()得到一个空白的结果.insert().execute()我应该至少得到一个错误或确认我们将API令牌凭据传递给Google的Mirror API.

这是我们的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()
Run Code Online (Sandbox Code Playgroud)

注意:$glassware_gallery_user_token当我们打开Glassware时,我们从Google App Gallery传入的令牌(我们已经设置了我们的玻璃器皿应用程序).

执行上面的代码,我们得到一个空值retValue,它是一个空字典:{}打印时.从文档中看起来应该是错误消息或确认.


回应评论:

下面是我们发送的请求的打印输出(通过将print语句插入到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'

我得到一个空白字典作为回应: {}

我可以看到这实际上是与Googles服务的对话有两个原因:

  1. 如果我将user_token更改为无效,则代码会抛出异常.
  2. 我可以在Google Developer Console中看到我们的API通话计数,将这些尝试计为对我们的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")与我在评论过程中提供的应用程序一起返回一个空数组.

Mik*_*keN 1

插入镜像 API 文档有点不正确。成功时,它会返回一个空响应,状态标头代码为 204 ( http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html )“无内容”。文档的某些部分让我相信它会回显响应中的凭据,但事实并非如此。

另外,我能够调试为什么我无法在我的 Glass 上加载凭据,方法是首先确保我可以在我的 Glass 设备上从https://google.com/myglass商店安装我的临时 Glassware。确保有连接。