通讯录

联系人可让您的 Glassware 接收并非由其创建的时间表项。 用户必须通过点按卡片的 Share 菜单项来明确与联系人分享时间轴项。

运作方式

创建共享联系人后,共享时间轴卡片将按照以下常规流程操作:

  1. 创建联系人,并定义您的联系人支持的 MIME 类型。
  2. 将该联系人插入到用户的时间轴中。
  3. 用户收到包含 Share 菜单项的时间轴项。Glassware 必须明确允许用户与此菜单项共享其项目。
  4. 用户点按时间轴项,选择分享菜单项,然后选择您的联系人。
  5. Mirror API 会创建共享时间轴卡片的副本,向您的联系人授予对该副本的访问权限,并将该副本插入用户的时间轴。您的 Glassware 无法访问原始时间轴项。
  6. 如果您订阅了共享通知,则会收到一个包含时间轴卡标识信息的载荷。然后,您可以使用 Timeline.get 检索时间轴项。
  7. 您可以修改共享时间轴卡,并使用 Timeline.update 更新现有时间轴卡。

适用情形

默认情况下,Glassware 无法访问并非由其创建的时间轴项,因此联系人会允许 Glassware 在征得用户同意的情况下共享 Glassware 数据。

Glassware 主要通过以下两种方式使用联系人信息:

  • 允许用户与其他联系人分享您的时间轴项:将 SHARE 内置菜单项添加到时间轴卡片。当用户点按“共享”菜单项时,Glass 会显示可能与之共享的联系人列表。

  • 允许用户与您的 Glassware 共享时间轴项:创建代表您的 Glassware 的联系人。当用户想要分享时间轴卡片时 您的联系人会显示为选项您还可以声明可接受的 MIME 类型列表,以便系统仅针对您感兴趣的卡片显示您的联系人。若要接收有关用户何时与您的联系人分享时间轴卡片的通知,您可以订阅时间轴通知。

创建联系人

如需允许用户与您的 Glassware 共享时间轴项,请通过将联系人的 JSON 表示形式发布到插入 REST 端点来插入联系人。

所有联系人都必须指定 id,用于标识接收通知的 Glassware 联系人。您还必须指定 displayName 和至少一个 imageUrls,Glass 会使用它们向用户显示联系信息。

原始 HTTP

POST /mirror/v1/contacts HTTP/1.1
Authorization: Bearer {auth token}
Content-Type: application/json
Content-Length: {length}

{
  "id": "harold"
  "displayName": "Harold Penguin",
  "iconUrl": "https://developers.google.com/glass/images/harold.jpg"
  "priority": 7
}

订阅共享通知

借助 Mirror API,您可以订阅通知,这些通知会在用户对时间轴项执行特定操作或用户位置信息更新时发送。订阅通知时,您需要提供一个用于处理通知的回调网址。

Mirror API 通知以 POST 请求的形式发送到包含 JSON 请求正文的已订阅端点。

原始 HTTP

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

itemId 属性是共享时间轴内容的 ID,您可以将其与 Timeline.get 配合使用来获取时间轴内容。以下示例展示了带有照片附件的典型时间轴项:

{
  "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>"
          ]
      }
  ]
}

如果没有出现错误,您的服务必须使用 200 OK HTTP 状态代码响应该 API。如果您的服务返回错误代码,Mirror API 可能会尝试向您的服务重新发送通知。

正在接收语音转写内容

用户可以通过语音主菜单与您的联系人分享转写的语音。目前,您的联系人可以使用两种语音指令:

  • “添加记事”
  • “发布更新”

例如,用户可以使用“Ok Glass... 发布更新...” 来告诉我们 Chipotle 即将到来的生日猫咪信息流... Chipotle 的生日是明天!”

如需使用语音指令,请执行以下操作:

  1. 使用适当的 type 指定 acceptCommands 属性:

    {
      ...
    
      "displayName": "Cat Stream",
      "id": "CAT_STREAM",
      "acceptCommands": [
        {"type": "POST_AN_UPDATE"}
      ]
    }
    
  2. 订阅时间轴通知,以便在有转录的语音可用时收到通知。发生这种情况时,您的 Glassware 会收到通知:

    {
      "collection": "timeline",
      "operation": "UPDATE",
      "userToken": "<USER_TOKEN>",
      "verifyToken": "<VERIFY_TOKEN>",
      "itemId": "<ITEM_ID>",
      "userActions": [
        {"type": "LAUNCH"}
      ]
    }
    
  3. 使用 itemId 获取时间轴项:

    {
      "id": "<ITEM_ID>",
      "text": "Chipotle's birthday is tomorrow",
      "recipients": [
        {"id": "CAT_STREAM"}
      ]
    }
    
  4. 如果多个 Glassware 使用同一语音指令注册联系人,Glass 会显示第二级菜单,显示每个联系人的 displayName。然后,用户可以说出他们选择的联系人。如果联系人的 displayName 包含不发音的字符或没有发音,请使用 speakableName 属性声明共享联系人的预期发音。

分享照片的图片说明

用户能够与您的 Glassware 分享照片,并提供他们通过语音输入的随附说明。一般的用户流如下所示:

  1. 用户点按包含照片的时间轴项,选择分享菜单项,然后选择您的联系人。
  2. 用户在短时间内再次点按,为照片添加说明。
  3. 用户说出字幕。
  4. 如上文工作原理中所述,时间轴项会与您的 Glassware 共享。此外,时间轴项的 text 属性会使用用户的转录字幕进行设置。