シンプルなコードを使って静的カードを挿入、更新、読み取り、削除 REST API。また、静的なカード( 場所またはメディアを選択します
仕組み
静的カードは、デフォルトで Glass の時計の右側に表示され、情報が表示されます ユーザーとの関連性が高いと判断できます。ただし、 ライブカードのように即座に注意を引く ユーザーはカードを読み取ったり できます。
Glassware によって静的カードがタイムラインに挿入されると、通知が再生されることがあります。 音でユーザーに知らせることができます。以前の静的カードもすべて右に移動します 7 日後に、またはカードが 200 枚新しい時点でタイムラインに表示されなくなります。
アフィリエイト住所表示オプションの目的
静的なカードは
定期的な通知
重要なイベントが発生したときに
ユーザーに通知できます
たとえばニュース配信サービスでは
トップニュースがリアルタイムで
送信されますMirror API の静的カード
ライブカードや
没入感を
OPEN_URI
選択します。これにより、Google Chat と Gmail を利用した
通知として使用する静的カードと、ライブカードまたは
よりインタラクティブな体験を提供できます
タイムライン アイテムに対して実行可能な操作の一覧については、リファレンス ドキュメントをご覧ください。
静的カードの挿入
静的カード(タイムライン アイテム)を挿入するには、 タイムライン アイテムの JSON 表現 アクセスすることもできます。
タイムライン アイテムのほとんどのフィールドはオプションです。最も単純な形式では タイムライン アイテムには、次の例に示すように短いテキスト メッセージのみが含まれます。
未加工の HTTP
POST /mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}
Content-Type: application/json
Content-Length: 26
{ "text": "Hello world" }
Java
TimelineItem timelineItem = new TimelineItem();
timelineItem.setText("Hello world");
service.timeline().insert(timelineItem).execute();
Python
timeline_item = {'text': 'Hello world'}
service.timeline().insert(body=timeline_item).execute()
成功すると、次の内容を含む 201 Created
レスポンス コードが返されます。
作成されたアイテムの完全なコピー。前の例で成功を示すレスポンスは、
次のようになります。
未加工の HTTP
HTTP/1.1 201 Created
Date: Tue, 25 Sep 2012 23:30:11 GMT
Content-Type: application/json
Content-Length: 303
{
"kind": "glass#timelineItem",
"id": "1234567890",
"selfLink": "https://www.googleapis.com/mirror/v1/timeline/1234567890",
"created": "2012-09-25T23:28:43.192Z",
"updated": "2012-09-25T23:28:43.192Z",
"etag": "\"G5BI0RWvj-0jWdBrdWrPZV7xPKw/t25selcGS3uDEVT6FB09hAG-QQ\"",
"text": "Hello world"
}
挿入されたアイテムは、ユーザーのタイムラインに次のように表示されます。
添付ファイルを含むタイムライン アイテムを挿入する
百聞は一見にしかずと言うので、 タイムラインのアイテム。そのために、画像と動画を添付することもできます。 追加することもできますタイムライン アイテムを挿入する方法の例を次に示します。 写真添付:
未加工の HTTP
POST /upload/mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}
Content-Type: multipart/related; boundary="mymultipartboundary"
Content-Length: {length}
--mymultipartboundary
Content-Type: application/json; charset=UTF-8
{ "text": "A solar eclipse of Saturn. Earth is also in this photo. Can you find it?" }
--mymultipartboundary
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
[binary image data]
--mymultipartboundary--
Java
TimelineItem timelineItem = new TimelineItem();
timelineItem.setText("Hello world");
InputStreamContent mediaContent = new InputStreamContent(contentType, attachment);
service.timeline().insert(timelineItem, mediaContent).execute();
Python
timeline_item = {'text': 'Hello world'}
media_body = MediaIoBaseUpload(
io.BytesIO(attachment), mimetype=content_type, resumable=True)
service.timeline().insert(body=timeline_item, media_body=media_body).execute()
画像が添付されたタイムライン アイテムは、Glass では次のように表示されます。
動画を添付しています
タイムライン アイテムに動画ファイルを追加する場合は、 ペイロード全体を一度にアップロードするのではなく、 Google Mirror API は、HTTP Live Streaming を使用したストリーミングをサポートしています。 プログレッシブ ダウンロード、リアルタイム ストリーミング プロトコル(RTSP)の 3 つがあります。 RTSP はファイアウォールによって頻繁にブロックされるため、必要に応じて他のオプションを使用してください。 考えています
動画をストリーミングするには、PLAY_VIDEO
を使用します。
動画の URL をメニュー項目の動画の URL として
payload
。詳しくは、
組み込みメニュー アイテムの追加
サポートされているメディア形式
をご覧ください。
ページ分割
1 つのタイムライン カードに収まらないタイムライン アイテムは、ページ分割が可能です。
それ以外は同じカードに関連付けられている必要があります。ページ分けあり
すべての商品アイテムが同じ timeline.id
を共有するため、
同じメニュー項目のセットを削除します。ページ分けされたタイムライン アイテムをユーザーがタップすると、
[もっと見る] メニュー項目が表示されます。
Glass では、表示されるタイムライン アイテムが自動的にページ分けされます
text
。Glass を自動的に使用するには
ページ分け: html
、article
この例のように、クラス プロパティを auto-paginate
に設定しています。
<article class="auto-paginate">
<h3>Very long list</h3>
<ul>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
<li>Fourth item</li>
<li>Fifth item</li>
<li>Sixth item</li>
<li>...</li>
</ul>
<article>
手動でページ分けするには、コンテンツに article
タグを使用します。
各カードに表示する情報を選択できます各デバイスの中身が
別のサブタイムライン カードに article
タグを配置します。たとえば、
次の HTML を含む、ページ分けされたタイムライン アイテム:
<article>
<section>
<p>First page</p>
</section>
</article>
<article>
<section>
<p>Second page</p>
</section>
</article>
<article>
<section>
<p>Third page</p>
</section>
</article>
デフォルトでは、ページ分けされたタイムライン アイテムの最初のカードは、
カバーカードが表示され、ユーザーが [もっと見る] を選択すると再び表示されます。
選択します。タップして最初のカードが再表示されないようにするため
詳細: 最初のオブジェクトには cover-only
CSS クラスを指定できます。
<article>
タグ:
<article class="cover-only">
...
cover-only
クラスは、自動的にページ分けされるタイムライン アイテムもサポートしています。
<article class="auto-paginate cover-only">
...
分類
分類を使用すると、関連性はあるが個別の項目をグループ化できます。たとえば、 メールスレッドの 1 件のメッセージに集中できます。バンドルのメイン表紙カードには、 ユーザーがタップすると、バンドル内の他のカードを含むサブタイムラインが表示されます。 バンドルは、上部の角を折りたたんだことで通常のタイムライン カードと区別されます。 バンドルのカバーカードの右端にクリックします。
タイムライン アイテムをバンドルするには、
bundleId
。最近追加された
セットのカバーカードです。
次の画像は 1 つのバンドルを示しています 右上の角の折り目と 2 つのバンドルが入った表紙カード その下にカードが表示されます。
タイムライン アイテムの読み取り
サービスは、作成したすべてのタイムライン アイテムと、すべてのタイムラインにアクセスできます。 共有されたアイテムが表示されます。以下の手順を踏みます。 タイムライン アイテムを一覧表示する アクセスできます。
未加工の HTTP
GET /mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}
Java
TimelineItem timelineItem = new TimelineItem();
service.timeline().list().execute();
Python
service.timeline().list().execute()
他の REST オペレーションを使用して、get、 update と タイムライン アイテムを削除する。
添付ファイルへのアクセス
タイムライン アイテムの添付ファイルには、
attachments
という名前の配列プロパティ。
添付ファイルのバイナリデータは、
contentUrl
プロパティを関連付けたり、
添付ファイル エンドポイントです。
未加工の HTTP
GET /mirror/v1/timeline/{itemId}/attachments/{attachmentId} HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}
Java
TimelineItem item = service.timeline().get(itemId).execute();
String attachmentId = item.getAttachments().get(0).getId();
service.attachments().get(itemId, attachmentId).executeAsInputStream();
メニュー項目の作成
メニュー項目を使用すると、タイムライン カードに関連するアクションをリクエストできます。 組み込みメニュー項目とカスタムメニュー項目の 2 種類があります
組み込みのメニュー項目から、Google Cloud の タイムライン カードの読み上げ、 画像の共有、メッセージへの返信。
カスタム メニュー アイテムを使用すると、アプリケーションで特定の動作を公開できます。 また、メニュー アイテム アイコンを指定することで、 ブランディング。
組み込みメニュー項目の追加
タイムライン アイテムに組み込みのメニュー項目を追加するには、
menuItems array
。
組み込みのメニュー項目を使用するには、
各 menuItem
の action
。
未加工の HTTP
HTTP/1.1 201 Created
Date: Tue, 25 Sep 2012 23:30:11 GMT
Content-Type: application/json
Content-Length: 303
{
"text": "Hello world",
"menuItems": [
{
"action": "REPLY"
}
]
}
カスタム メニュー項目の定義
組み込みのメニュー項目が適さない場合は、 タイムライン アイテムを挿入または更新するときに、次の操作を行うことができます。
menuItem.action
にはCUSTOM
を指定します。menuItem.id
を指定します。ユーザーがカスタムメニュー項目をタップすると、 通知を受け取るmenuItem.id
にデータが入力されました。これにより、広告が配信されている 通知を受け取ります。iconUrl
を追加するには、menuItem.values
を指定します。 Glass に表示されるdisplayName
。50 x 50 の PNG にカーソルを合わせます。iconUrl
の透明な背景を持つ白色の画像。displayTime
を指定します。displayTime
を指定しない場合、タイムライン アイテムは ユーザーがカスタム メニュー項目をタップすると、タイムラインの前に移動します。
未加工の HTTP
HTTP/1.1 201 Created
Date: Tue, 25 Sep 2012 23:30:11 GMT
Content-Type: application/json
Content-Length: 303
{
"text": "Hello world",
"displayTime": "2013-08-08T22:47:31-07:00",
"menuItems": [
{
"action": "CUSTOM",
"id": "complete"
"values": [{
"displayName": "Complete",
"iconUrl": "http://example.com/icons/complete.png"
}]
}
]
}
ユーザーがタイムライン カードを固定できるようにする
ユーザーがタイムライン カードを固定できるメニュー項目を作成できます。 メインの画面の左側にタイムライン カードが常に表示されます。 時計のカードです。同じメニューを使用して、カードの固定を解除することもできます。 表示されます。
固定メニュー項目は組み込みのメニュー項目であるため、必要な作業は TOGGLE_PINNED
を指定することだけです。
menuItem
の action
。
未加工の HTTP
HTTP/1.1 201 Created
Date: Tue, 25 Sep 2012 23:30:11 GMT
Content-Type: application/json
Content-Length: 303
{
"text": "You can pin or unpin this card.",
"menuItems": [
{
"action": "TOGGLE_PINNED"
}
...
]
}
定期購入
Mirror API を使用すると 通知を受け取る スペースでユーザーが特定の操作を行ったときに送信される タイムライン項目またはユーザーの位置情報が が更新されました。通知に登録すると、 通知を処理するコールバック URL を提供します。
通知の受信
Mirror API からの通知は、POST
リクエストとして
JSON
リクエスト本文を含むサブスクライブされたエンドポイント。
未加工の 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)
サービスが API に 200 OK
HTTP ステータスを返す
コードを返します。
サービスからエラーコードが返された場合、Mirror API が
サービスに通知を再送信してみてください。
通知の種類
Mirror API は、イベントごとに異なる通知ペイロードを送信します。
返信
ユーザーが組み込みの REPLY
を使用してタイムライン アイテムに返信した
メニュー項目:
{
"collection": "timeline",
"itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
"operation": "INSERT",
"userToken": "harold_penguin",
"verifyToken": "random_hash_to_verify_referer",
"userActions": [
{
"type": "REPLY"
}
]
}
itemId
属性は、以下を含むアイテムの ID
に設定されます。
- タイムライン アイテムの
ID
に設定されたinReplyTo
属性 クリックします。 - テキストの音声文字変換に設定された
text
属性。 - タイムライン アイテムの
creator
に設定されたrecipients
属性 返信です(存在する場合)。
例:
{
"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"
]
}
]
}
削除
ユーザーがタイムライン アイテムを削除しました。
{
"collection": "timeline",
"itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
"operation": "DELETE",
"userToken": "harold_penguin",
"verifyToken": "random_hash_to_verify_referer",
"userActions": [
{
"type": "DELETE"
}
]
}
itemId
属性は、削除されたサービスの ID に設定されます。
表示されます。アイテムには、ID と
isDeleted
プロパティ。
カスタム メニュー項目が選択されました
ユーザーが選択したのは カスタム メニュー項目 サービスによって設定されます。
{
"collection": "timeline",
"itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
"operation": "UPDATE",
"userToken": "harold_penguin",
"userActions": [
{
"type": "CUSTOM",
"payload": "PING"
}
]
}
itemId
属性は、次のメニュー項目の ID に設定されます。
表示されます。
userActions
配列には、カスタム アクションのリストが含まれます。
ユーザーがこのアイテムで取得したアイテムです。サービスでこれらの処理を
それに応じてアクションを実行できます
位置情報の更新
現在のユーザーは新しい場所を利用できます。
{
"collection": "locations",
"itemId": "latest",
"operation": "UPDATE",
"userToken": "harold_penguin",
"verifyToken": "random_hash_to_verify_referer"
}
Glassware が位置情報の更新を受信したら、 glass.locations.get へのリクエスト 最新の既知の位置情報を取得できます。自分の Glassware は 10 分ごとに位置情報の更新を受信します。
音声コマンド
ユーザーが次のような音声コマンドを起動しました。 「OK Glass、メモして、猫ストリーム、チポトレの誕生日は tomorrow」と指定します。次の通知が Glassware:
{
"collection": "timeline",
"operation": "INSERT",
"userToken": "chipotle's_owner",
"verifyToken": "mew mew mew",
"itemId": "<ITEM_ID>",
"userActions": [
{“type”: "LAUNCH"}
]
}
この通知は、LAUNCH
値によって他の通知と区別されます。
userActions
プロパティ。
次に、itemId
の値を使用してタイムライン アイテムを取得できます。
{
"id": "<ITEM_ID>",
"text": "Chipotle's birthday is tomorrow",
"recipients": [
{"id": "CAT_STREAM"}
]
}
recipients
プロパティには、id
を表す連絡先の
使用した音声コマンド。