2013-11-26 25 views
2

我使用鏡像api創建了自定義菜單。
菜單創建方法上MainServlet我如何獲取菜單單擊事件

public List<MenuItem> makeDealMenu(String appBaseUrl) { 
    String dealMenuIconUrl = appBaseUrl + "static/images/deal_50.png"; 

    MenuValue dealMenuValue = new MenuValue(); 
    dealMenuValue.setDisplayName("DEAL"); 
    dealMenuValue.setIconUrl(dealMenuIconUrl); 

    List<MenuValue> dealMenuValueList = new ArrayList<MenuValue>(); 
    dealMenuValueList.add(dealMenuValue); 

    MenuItem dealMenuItem = new MenuItem(); 
    dealMenuItem.setAction("CUSTOM"); 
    dealMenuItem.setId("dealMenu"); 
    dealMenuItem.setValues(dealMenuValueList); 

    List<MenuItem> customMenuItemList = new ArrayList<MenuItem>(); 
    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"); 
       } 
      } 

谷歌雲端控制檯我設置回調URL

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

我怎樣才能得到菜單的點擊事件或行動從我的Servlet?請有人幫忙....

回答

0

從鏡像api java sample app你可以看到NotifyServlet的實現。 (或者您從quickstart samples找到相關示例項目的服務器類型)。

首先你必須定義你的通知回調鏡像api。那麼你必須訂閱註冊的通知。在此之後,您的玻璃器皿的所有菜單選擇都將通過鏡像API傳遞給您的通知回調(用於通知的servlet)。

在您的通知回調如果你的servlet是在Java編寫試試這個:

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   
} 

編輯:定義您的通知回調網址HTTPS。從這個:

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; 
} 
+0

什麼ü由寄存器是什麼意思?有任何形式像語音命令註冊我的自定義菜單項來鏡像api或只需要在我的項目中定義我的鏡像客戶端 –

+0

我編輯了我的答案。 – Devrim

+0

我想我錯過了一點,現在日誌沒有錯誤,但雖然我沒有收到通知。我應該從哪裏調用MirrorClient.insertSubscription()方法。從我的doPost方法或我生成捆綁時間線項目? –

相關問題