【问题标题】:How to correctly subscribe to a custom menu action?如何正确订阅自定义菜单操作?
【发布时间】:2013-06-16 01:34:52
【问题描述】:

这是我到目前为止的代码,其中 get_url 是一个帮助函数,它用订阅代理 url 包装 url,将通知转发到我讨厌设置的一些虚拟服务器。

card = {
    'text': 'click ok',
    'menuItems': [{
                      'action': 'CUSTOM',
                      'id': 'ready',
                      'values': [{
                                     'displayName': 'o',
                                     'iconUrl': 'img.jpg'
                                 }]
                  }],
}
self.mirror_service.timeline().insert(body=card).execute()
callback_url = get_url(self, '/start')
body = { # self.userid is initialized in util.auth_required.
    'collection': self.request.get('collection', 'timeline'),
    'userToken': self.userid,
    'callbackUrl': callback_url
}

我确认订阅已创建(使用list 调用),但是当我单击玻璃操场中的菜单项时,我的代理服务器没有看到任何通知请求。有小费吗?

【问题讨论】:

    标签: python google-mirror-api google-glass


    【解决方案1】:

    看起来您的 callback_url 可能想要 /notify 而不是 /start,但如果无法访问您的所有项目,我无法确定这一点。

    特别是关于订阅代理,在documentation 找到的 json 示例似乎不完整。

    首先,确保将用户令牌更改为有效的用户令牌,这将是一系列数字。接下来,添加一个 itemId 和一个 userActions 对象。这是对我有用的 JSON:

    {
    "callbackUrl": "https://mirrornotifications.appspot.com/forward?url=http://example.com/path/to/test.php",
    "collection": "timeline",
    "itemId": "your-item-id-here",
    "operation": "UPDATE",
    "userToken": "your-userToken-here",
    "userActions": [
        {
            "type": "PIN"
        }
    ]
    

    }

    确保也替换 itemId。在我的设置中,我通过查看应用引擎日志获得了 userToken 和 itemId。

    以下是处理回调的一些一般建议:

    我可以确认,当 Glass 上的用户执行操作时,正确设置的自定义订阅会收到回调。如果您在自定义代码中没有看到回调,您可以备份并尝试starter project

    我使用 Java 和 App Engine 入门项目,这里有一些对我进行设置有帮助的东西。使用日志语句,将您的应用程序部署到应用程序引擎,然后在应用程序引擎管理控制台中查看这些日志语句很有用。

    如果您可以看到正在执行的日志语句(在我的例子中是 NotifyServlet.java 中的代码),那么一切顺利。

    此时,您可以使用命令行 Curl 直接调用通知操作,模拟回调请求,无需部署到应用引擎或点击玻璃硬件,即可在本地微调。

    这样做的另一个好处是,如果您通过 WireShark、Fiddler 或 Charles 等数据包嗅探器代理您的 curl 命令,您可以轻松查看 http 事务并调试正在发生的事情。

    祝你好运!

    【讨论】:

    • 谢谢马克,看来这就是问题所在。部署的应用程序确实触发了 /notify。我知道我需要使用 curl 来模拟请求,但我认为我至少能够通过记录来自代理的 http 请求来查看生成了什么样的请求。你有没有让代理工作?
    • 我不确定你所说的“他们的代理”是什么意思,你能帮我解释一下吗?
    • 是的,我让它工作了。文档不够清晰,我将更新我的答案以包含一些有关您应该发送的 JSON 的信息以使其正常工作。
    猜你喜欢
    • 2020-10-04
    • 2015-03-20
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多