1

我正在使用 Java 快速启动应用程序来了解镜像 api。我将它部署到 aws 并且能够成功地与之交互。我已经更新了 MirrorClient 以将 callbackURL 设置为通过代理 ( https://mirrornotifications.Appspot.com/forward?url=http:// {myurl}/notify) 进行路由,并且我确实收到了通知,但响应始终为空. 这是我正在尝试处理的自定义菜单项,所以我想知道在构建菜单项时是否缺少一些基本的东西。相关代码如下。

List<MenuValue> menuValues = new ArrayList<MenuValue>();
MenuValue defaultValue = new MenuValue();
defaultValue.setDisplayName("Find");
defaultValue.setState("DEFAULT");
menuValues.add(defaultValue); 

MenuItem nearMe = new MenuItem();
nearMe.setId("nearMe");
nearMe.setAction("CUSTOM");
nearMe.setValues(menuValues);
searchNearMeMenuList.add(nearMe);

TimelineItem timelineSearchNearMe = new TimelineItem();
timelineSearchNearMe.setText("Search near me");
timelineSearchNearMe.setIsBundleCover(false);
timelineSearchNearMe.setBundleId("mySearch");
timelineSearchNearMe.setSourceItemId("FIND_NEAR_ME");
timelineSearchNearMe.setMenuItems(searchNearMeMenuList);
timelineSearchNearMe.setNotification(new NotificationConfig().setLevel("DEFAULT"));

这是否与我部署在 aws 而不是应用引擎上的事实有关?提前感谢您的帮助。

更新了 GET 响应。

{
"kind": "mirror#timelineItem",
"id": "9944f290-89b5-46b0-aa7d-2a06623a5d07",
"sourceItemId": "FIND_NEAR_ME",
"bundleId": "mySearch",
"isBundleCover": false,
"selfLink": "https://www.googleapis.com/mirror/v1/timeline/9944f290-89b5-46b0-aa7d-2a06623a5d07",
"created": "2013-08-06T16:01:42.886Z",
"updated": "2013-08-06T16:01:42.886Z",
"etag": "\"ZECOuWdXUAqVdpmYErDm2-91GmY/01TB49uN8ZW2c8MYSuyXCySS-KE\"",
"text": "Search near me",
"speakableText": "This will find stores near you",
"menuItems": [
    {
        "id": "nearMe",
        "action": "CUSTOM",
        "values": [
            {
                "state": "DEFAULT",
                "displayName": "Find"
            }
        ]
    }
],
"notification": {
    "level": "DEFAULT"
}
}
4

2 回答 2

0

我也有空白通知的问题。我发现在读取请求之前关闭响应导致 request.inputStream 已经关闭的问题。移动这个

response.setContentType("text/html");
Writer writer = response.getWriter();
writer.append("OK");
writer.close();

在我将请求通知完全读入字符串后解决了这个问题。

于 2013-09-26T02:19:03.187 回答
0

“空白”通知可能是一个棘手的问题。以下是一些故障排除步骤:

  1. 仔细检查您的时间线项目的 JSON。确认它包含 中的值menuItems。(已经完成了)
  2. 仔细检查通知处理程序的代码,以确保它从请求中提取数据,而不是从响应中提取数据,在您定义它之前,响应将是空白的。
  3. 使用命令行之类的 ​​HTTP 工具curl来模拟通知,例如从docs复制的通知。

    {
      "collection": "timeline",
      "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
      "operation": "UPDATE",
      "userToken": "harold_penguin",
      "userActions": [
        {
          "type": "CUSTOM",
          "payload": "PING"
        }
      ]
    }
    

    使用这样的命令:

    $ curl -X POST -H "Content-type: application/json" -d@payload.json http://{myurl}/notify
    
于 2013-08-06T17:27:38.347 回答