谷歌眼镜Mirror API开发指南之Subscriptions

原文地址:http://bbs.seacat.cn/thread-883-1-2.html



订阅

 

Mirrror API允许当用户需要具体的Timeline Item和当用户的位置发送改变时发送订阅通知(subscribe to notifications), 当你订阅通知,你需要提供一个回调URL来处理通知。

接收通知


来自MirrorAPI的通知会发送一个POST请求给订阅的段节点,这里面包含一段JSON数据。


Raw HTTP


{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "UPDATE",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer",
  "userActions": [
    {
      "type": "<TYPE>",
      "payload": "<PAYLOAD>"
    }
  ]
}



Java代码


import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.mirror.model.Notification;
 
import java.io.IOException;
import java.io.InputStream;
// ...
 
public class MyClass {
  // ...
 
  /**
    * Parse a request body into a Notification object.
    *
    * @param requestBody The notification payload sent by the Mirror API.
    * @return Parsed notification payload if successful, {@code null} otherwise.
    */
  static Notification parseNotification(InputStream requestBody) {
    try {
      JsonFactory jsonFactory = new JacksonFactory();
 
      return jsonFactory.fromInputStream(requetBody, Notification.class);
    } catch (IOException e) {
      System.out.println("An error occurred: " + e);
      return null;
    }
  }
 
  // ...
}



Python


import json
 
def parse_notification(request_body):
  """Parse a request body into a notification dict.
 
  Params:
    request_body: The notification payload sent by the Mirror API as a string.
  Returns:
    Dict representing the notification payload.
  """
  return json.load(request_body)




你的服务如果没有错误发生必须对HTTP状态码等于200时做出响应  。如果你的服务响应一个错误代码,Mirror API可能会重发通知给你的服务。
注意: 10秒无响应连接将超时。如果你的请求时间过长,你需要新开一个线程。

通知类型


Mirror API为不同事件会发送不同的通知载体。


共享timeline item

用户通过你的Glassware来共享Timeline item


{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "INSERT",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer",
  "userActions": [
    {
      "type": "SHARE"
    }
  ]
}



temId属性共享Timelineitem的id,你可以通过使用 Timeline.get来获得timeline item。下面一个典型的示例展示了timelineitem带照片做为附件。


{
  "id": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "attachments": [
      {
          "contentType": "image/jpeg",
          "id": "<ATTACHMENT_ID>"
      }
  ],
  "recipients": [
      {
          "kind": "glass#contact",
          "source": "api:<SERVICE_ID>",
          "id": "<CONTACT_ID>",
          "displayName": "<CONTACT_DISPLAY_NAME>",
          "imageUrls": [
              "<CONTACT_ICON_URL>"
          ]
      }
  ]
}



注意:有关更多信息,请参见 联系人(Contacts)与联系人分享内容。


回复


用户使用内置的答复回复你timeline item

{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "INSERT",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer",
  "userActions": [
    {
      "type": "REPLY"
    }
  ]
}



itemId属性设置为项目包含的ID
inReplyTo属性设置为timelineitemID项回复
text属性设置为文本转录
收件人属性设置为timeline item的创造者的回复,如果它存在的话

例子:

{
  "kind": "glass#timelineItem",
  "id": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "inReplyTo": "3236e5b0-b282-4e00-9d7b-6b80e2f47f3d",
  "text": "This is a text reply",
  "recipients": [
    {
      "id": "CREATOR_ID",
      "displayName": "CREATOR_DISPLAY_NAME",
      "imageUrls": [
        "CREATOR_IMAGE_URL"
      ]
    }
  ]
}



删除

用户删除一个timeline item


{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "DELETE",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer",
  "userActions": [
    {
      "type": "DELETE"
    }
  ]
}



temId属性设置为删除项的ID。项目不再包含元数据除了它的IDisDeleted属性
注意:如果用户删除一个timeline item,建议您从您的系统删除这些内容

自定义菜单项选择

用户选择了您服务设置的一个自定义菜单项(custom menu item)


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



temId属性设置为用户选择菜单项的ID
userActions数组包含用户点击这个项目自定义操作的列表,。你的服务应该相应地处理这些行为。
位置更新
一个新的位置对当前用户可用

{
  "collection": "locations",
  "itemId": "latest",
  "operation": "UPDATE",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer"
}



当你的Glassware接收位置更新、发送一个请求给glass.locations.get让端点知道最新的位置。你的Glassware每十分钟接收一次位置更新

注意:获取位置信息需要在https://www.googleapis.com/auth/glass.location范围之内

语音命令

 

你的用户激活语音命令,例如:“Ok Glass, take anote, Cat Stream, 明天是Chipotle是的生日。以下通知发送到你的Glassware


{
  "collection": "timeline",
  "operation": "INSERT",
  "userToken": "chipotle's_owner",
  "verifyToken": "mew mew mew",
  "itemId": "<ITEM_ID>",
  "userActions": [
    {“type”: "LAUNCH"}
  ]
}



这个通知是有别于其他启动userActions的通知。
您可以使用itemId获取timeline item的值

{
  "id": "<ITEM_ID>",
  "text": "Chipotle's birthday is tomorrow",
  "recipients": [
    {"id": "CAT_STREAM"}
  ]
}



收件人属性包含联系人id所使用的语音命令。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值