我如何获得菜单点击事件

我使用mirror api创建了一个自定义菜单。
MainServlet上的menu创建方法

public List makeDealMenu(String appBaseUrl) { String dealMenuIconUrl = appBaseUrl + "static/images/deal_50.png"; MenuValue dealMenuValue = new MenuValue(); dealMenuValue.setDisplayName("DEAL"); dealMenuValue.setIconUrl(dealMenuIconUrl); List dealMenuValueList = new ArrayList(); dealMenuValueList.add(dealMenuValue); MenuItem dealMenuItem = new MenuItem(); dealMenuItem.setAction("CUSTOM"); dealMenuItem.setId("dealMenu"); dealMenuItem.setValues(dealMenuValueList); List customMenuItemList = new ArrayList(); customMenuItemList.add(dealMenuItem); return customMenuItemList; } 

doPost方法我调用MirrorClient

 MirrorClient.insertSubscription(credential, WebUtil.buildUrl(request, "/notify"), userId, "timeline"); 

MirrorClient中定义方法insertSubscription

 public static Subscription insertSubscription(Credential credential, String callbackUrl, String userId, String collection) throws IOException { LOG.info("Attempting to subscribe verify_token " + userId + " with callback " + callbackUrl); callbackUrl = callbackUrl.replace("appspot.com", "Appspot.com"); Subscription subscription = new Subscription(); subscription.setCollection(collection); subscription.setCallbackUrl(callbackUrl); subscription.setUserToken(userId); return getMirror(credential).subscriptions().insert(subscription) .execute(); 

}

然后在NotifyServlet中以这种方式接收事件..

  JsonFactory jsonFactory = new JacksonFactory(); Notification notification = jsonFactory.fromString(notificationString, Notification.class); if (notification.getUserActions().contains( new UserAction().setType("CUSTOM"))) { String selectedCustomMenuItemId = notification.getItemId(); if ("dealMenu".equals(selectedCustomMenuItemId)) { LOG.info("********** I am here in event"); } } 

Google Cloud Console中,我设置了回调url

 http://localhost:8080/oauth2callback https://mirrornotifications.appspot.com/forward?url=http://localhost:8080/notify http://localhost:8080 

如何从我的Servlet获取菜单的点击事件或操作? 请有人帮忙….

从mirror api java sample app可以看到NotifyServlet实现。 (或者您从快速启动示例中找到相关示例项目的类型服务器)。

首先,您必须定义镜像api的通知回调。 那你必须订阅 寄存器 用于通知。 在此之后,您的玻璃器皿的所有菜单选择将通过镜像api传递给您的通知回调(通知的servlet)。

如果您的servlet是用Java编写的,请在您的通知callBack中尝试:

 JsonFactory jsonFactory = new JacksonFactory(); // notificationString is parsed form httpRequest's inputstream which is send from Mirror API Notification notification = jsonFactory.fromString(notificationString, Notification.class); if (notification.getUserActions().contains(new UserAction().setType("CUSTOM").setPayload("dealMenu")) { // User selected CUSTOM menu item on your glassware } 

编辑:定义您的通知回调urlhttps。 由此:

 http://localhost:8080/notify 

对此:

 https://mirrornotifications.appspot.com/forward?url=http://localhost:8080/notify 

要在生产环境中订阅通知,您必须提供带有有效SSL证书的回调URL以处理通知。 出于开发目的,您可以使用Google提供的订阅代理服务器将通知转发到非SSL回调URL。 https://developers.google.com/glass/tools-downloads/subscription-proxy

Edit2我修改了一些示例java项目,使其适用于localhost上的通知。 您可能希望将以下代码放在MirrorClient类的insertSubscription方法中:

 // To work with notifications, modify the notify callback's url by adding subscription-proxy // callbackUrl = "https://mirrornotifications.appspot.com/forward?url=" + callbackUrl; if("http://localhost:8080/notify".equals(callbackUrl)) { callbackUrl = "https://mirrornotifications.appspot.com/forward?url=" + callbackUrl; }