Anda dapat menyisipkan, memperbarui, membaca, dan menghapus kartu statis menggunakan REST API. Selain itu, Anda bisa memasang objek ke kartu statis, seperti sebagai lokasi atau media.
Cara kerjanya
Kartu statis berada di sebelah kanan jam Glass secara default dan menampilkan informasi relevan bagi pengguna pada saat pengiriman. Namun demikian, cara itu tidak memerlukan perhatian langsung seperti kartu live dan pengguna dapat memilih untuk membaca atau menindaklanjuti kartu di waktu luang.
Ketika Glassware menyisipkan kartu statis ke linimasa, Glass dapat memutar notifikasi suara untuk memperingatkan pengguna. Semua kartu statis sebelumnya juga bergeser ke kanan dan hilang dari linimasa setelah 7 hari atau jika 200 kartu baru.
Kapan menggunakannya
Kartu statis sangat cocok untuk mengirim
notifikasi berkala
kepada pengguna ketika
hal-hal penting terjadi.
Misalnya, layanan pengiriman berita yang
mengirimkan berita utama pada saat hal itu terjadi. Mencerminkan kartu statis API
juga dapat memulai kartu aktif atau
imersi
OPEN_URI
item menu. Hal ini memungkinkan Anda untuk membuat
interaksi hibrida yang memanfaatkan
kartu statis sebagai notifikasi dan kartu
langsung atau imersi selama
pengalaman yang lebih interaktif.
Untuk daftar lengkap operasi yang mungkin untuk item linimasa, lihat referensi dokumentasi tambahan.
Memasukkan kartu statis
Untuk menyisipkan kartu statis (item linimasa), POSTING Representasi JSON dari item linimasa untuk endpoint REST.
Sebagian besar kolom di item linimasa bersifat opsional. Dalam bentuk yang paling sederhana, item linimasa hanya berisi pesan teks singkat, seperti dalam contoh ini:
HTTP Mentah
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()
Jika berhasil, Anda akan menerima kode respons 201 Created
dengan
salinan lengkap dari item yang dibuat. Untuk contoh sebelumnya, respons yang berhasil
akan terlihat seperti ini:
HTTP Mentah
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"
}
Item yang disisipkan yang akan muncul di linimasa pengguna terlihat seperti ini:
Menyisipkan item linimasa dengan lampiran
Sebuah gambar bernilai ribuan kata, lebih banyak dari yang bisa Anda masukkan ke dalam item linimasa. Untuk tujuan ini, Anda juga dapat melampirkan gambar dan video ke item linimasa. Berikut adalah contoh cara menyisipkan item linimasa dengan lampiran foto:
HTTP Mentah
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()
Item linimasa dengan lampiran gambar akan terlihat seperti ini di Glass:
Melampirkan video
Jika Anda melampirkan file video ke item linimasa, sebaiknya melakukan streaming video, bukan mengunggah seluruh isi sekaligus. Google Mirror API mendukung streaming dengan live streaming HTTP, download progresif, dan protokol streaming real-time (RTSP). RTSP sering diblokir oleh {i>firewall<i}, jadi gunakan opsi lain saat sebaik mungkin.
Untuk melakukan streaming video, gunakan PLAY_VIDEO
item menu bawaan dan menentukan URL video sebagai
payload
. Lihat
Menambahkan item menu bawaan dan
format media yang didukung
untuk informasi selengkapnya.
Memberi nomor halaman
Anda dapat memberi nomor halaman pada item linimasa yang tidak sesuai di satu kartu linimasa,
tetapi yang sebenarnya harus
dikaitkan dengan kartu yang sama. Diberi halaman
semua item memiliki timeline.id
yang sama sehingga memiliki
set item menu yang sama. Saat pengguna mengetuk item linimasa yang diberi nomor halaman,
Item menu Baca selengkapnya akan muncul.
Glass secara otomatis memberi nomor halaman pada item linimasa yang ditampilkan
text
Memiliki Glass secara otomatis
beri nomor halaman html
, gunakan article
tag dengan properti class-nya yang disetel ke auto-paginate
seperti pada contoh berikut:
<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>
Untuk memberi nomor halaman secara manual, gunakan tag article
untuk konten
yang ingin ditampilkan
pada setiap kartu. Glass menampilkan isi masing-masing
article
di kartu sub-linimasa terpisah. Misalnya, Anda dapat membuat
item linimasa yang telah diberi nomor halaman dengan HTML berikut:
<article>
<section>
<p>First page</p>
</section>
</article>
<article>
<section>
<p>Second page</p>
</section>
</article>
<article>
<section>
<p>Third page</p>
</section>
</article>
Secara default, kartu pertama item linimasa yang diberi nomor halaman ditampilkan sebagai
kartu sampul dan ditampilkan kembali saat pengguna memilih tombol Baca selengkapnya
item menu. Untuk mencegah kartu pertama muncul lagi setelah diketuk
Baca selengkapnya, Anda dapat menentukan class CSS cover-only
untuk
Tag <article>
:
<article class="cover-only">
...
Class cover-only
juga mendukung item linimasa yang dipaginasi otomatis:
<article class="auto-paginate cover-only">
...
Pemaketan
Pemaketan memungkinkan Anda untuk mengelompokkan item yang berkaitan namun berbeda, misalnya untuk pesan individual dalam rangkaian pesan email. Paket memiliki kartu sampul utama yang pengguna mengetuk untuk menampilkan sub-linimasa yang berisi kartu lain dalam paket. Paket dibedakan dari kartu linimasa normal dengan lipatan sudut di bagian atas pojok kanan kartu sampul paket.
Untuk memaketkan item linimasa, buat item dengan nilai yang sama untuk
bundleId
Yang terakhir ditambahkan
adalah kartu sampul paket.
Gambar berikut menunjukkan paket kartu sampul dengan lipatan sudut di sudut kanan atas dan dua paket kartu di bawahnya.
Membaca item linimasa
Layanan Anda dapat mengakses semua item linimasa yang dibuatnya, dan semua linimasa item yang dibagikan dengannya. Berikut cara mencantumkan item linimasa yang terlihat oleh layanan Anda.
HTTP Mentah
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()
Anda dapat menggunakan operasi REST lainnya untuk mendapatkan, update dan hapus item linimasa.
Mengakses lampiran
Anda dapat mengakses lampiran ke item linimasa melalui
properti array bernama attachments
.
Anda kemudian bisa mendapatkan data biner lampiran melalui
contentUrl
properti lampiran atau dengan
endpoint lampiran.
HTTP Mentah
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();
Membuat item menu
Dengan item menu, pengguna dapat meminta tindakan yang terkait dengan kartu linimasa, dan tersedia dalam dua jenis: item menu bawaan dan item menu khusus.
Item menu bawaan menyediakan akses ke fungsi khusus yang disediakan oleh Kaca, seperti membacakan kartu linimasa, menavigasi ke lokasi, berbagi gambar, atau membalas pesan:
Item menu khusus memungkinkan aplikasi Anda mengekspos perilaku yang spesifik ke Glassware, dan Anda juga dapat menyediakan ikon item menu {i>branding.<i}
Menambahkan item menu bawaan
Anda dapat menambahkan item menu bawaan ke item linimasa dengan mengisi
menuItems array
saat Anda menyisipkannya.
Untuk menggunakan item menu bawaan, Anda hanya perlu mengisi
action
dari setiap menuItem
.
HTTP Mentah
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"
}
]
}
Menentukan item menu kustom
Jika item menu bawaan tidak berfungsi, Anda dapat membuat item menu khusus dengan tindakan Anda sendiri dengan melakukan hal berikut saat menyisipkan atau memperbarui item linimasa:
- Tentukan
CUSTOM
untukmenuItem.action
. - Tentukan
menuItem.id
. Saat pengguna mengetuk item menu kustom, Glassware Anda menerima notifikasi berisimenuItem.id
telah diisi. Hal ini memungkinkan Anda menentukan sumber notifikasi. - Tentukan
menuItem.values
untuk menambahkaniconUrl
dandisplayName
yang muncul di Glass. Arahkan kursor ke PNG berukuran 50 x 50 gambar berwarna putih dengan latar belakang transparan untukiconUrl
. Tentukan
displayTime
. Jika Anda tidak menentukandisplayTime
, item linimasa berpindah ke bagian depan linimasa setiap kali pengguna mengetuk item menu kustom.
HTTP Mentah
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"
}]
}
]
}
Mengizinkan pengguna menyematkan kartu linimasa Anda
Anda dapat membuat item menu yang memungkinkan pengguna menyematkan kartu linimasa, yang secara permanen menampilkan kartu linimasa di sebelah kiri elemen kartu clock. Pengguna juga dapat melepas sematan kartu, dengan menggunakan menu yang sama yang bermanfaat.
Item menu penyematan adalah item menu bawaan, sehingga Anda hanya perlu menyediakan TOGGLE_PINNED
action
untuk menuItem
.
HTTP Mentah
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"
}
...
]
}
Langganan
Mirror API memungkinkan Anda untuk berlangganan notifikasi yang dikirim saat pengguna melakukan tindakan tertentu pada Item Linimasa atau kapan lokasi pengguna telah diperbarui. Jika berlangganan notifikasi, Anda menyediakan URL callback yang memproses notifikasi.
Menerima notifikasi
Notifikasi dari Mirror API dikirim sebagai permintaan POST
ke
endpoint langganan yang berisi isi permintaan JSON
.
HTTP Mentah
{
"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)
Layanan Anda harus merespons API dengan status HTTP 200 OK
jika tidak terjadi error.
Jika layanan Anda merespons dengan kode error, Mirror API mungkin
coba kirim ulang notifikasi ke layanan Anda.
Jenis notifikasi
Mirror API mengirimkan payload notifikasi yang berbeda untuk berbagai peristiwa.
Balas
Pengguna telah membalas item linimasa Anda menggunakan REPLY
bawaan
item menu:
{
"collection": "timeline",
"itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
"operation": "INSERT",
"userToken": "harold_penguin",
"verifyToken": "random_hash_to_verify_referer",
"userActions": [
{
"type": "REPLY"
}
]
}
Atribut itemId
disetel ke ID
item yang berisi:
- Atribut
inReplyTo
disetel keID
item linimasa balas. - Atribut
text
disetel ke transkripsi teks. - Atribut
recipients
disetel kecreator
item linimasa yang adalah balasannya, jika ada.
Contoh:
{
"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"
]
}
]
}
Hapus
Pengguna telah menghapus item linimasa:
{
"collection": "timeline",
"itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
"operation": "DELETE",
"userToken": "harold_penguin",
"verifyToken": "random_hash_to_verify_referer",
"userActions": [
{
"type": "DELETE"
}
]
}
Atribut itemId
disetel ke ID yang dihapus
yang bermanfaat. Item tidak lagi berisi metadata selain ID-nya dan
isDeleted
.
Item menu kustom dipilih
Pengguna telah memilih item menu kustom yang disetel oleh layanan Anda:
{
"collection": "timeline",
"itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
"operation": "UPDATE",
"userToken": "harold_penguin",
"userActions": [
{
"type": "CUSTOM",
"payload": "PING"
}
]
}
Atribut itemId
disetel ke ID item menu yang
dipilih pengguna.
Array userActions
berisi daftar tindakan kustom
yang diambil pengguna
untuk item ini. Layanan Anda harus menangani hal tersebut
tindakan yang sesuai.
Pembaruan lokasi
Lokasi baru tersedia untuk pengguna saat ini:
{
"collection": "locations",
"itemId": "latest",
"operation": "UPDATE",
"userToken": "harold_penguin",
"verifyToken": "random_hash_to_verify_referer"
}
Saat Glassware menerima pembaruan lokasi, kirimkan permintaan ke glass.locations.get endpoint untuk mengambil lokasi terbaru yang diketahui. Peralatan Kaca Anda menerima pembaruan lokasi setiap sepuluh menit.
Perintah suara
Pengguna telah mengaktifkan perintah suara, misalnya: "Ok Glass, catat, Cat Stream, Ulang tahun Chipotle adalah besok". Notifikasi berikut dikirim ke Peralatan Pecah Belah:
{
"collection": "timeline",
"operation": "INSERT",
"userToken": "chipotle's_owner",
"verifyToken": "mew mew mew",
"itemId": "<ITEM_ID>",
"userActions": [
{“type”: "LAUNCH"}
]
}
Notifikasi ini dibedakan dari notifikasi lainnya berdasarkan nilai LAUNCH
di properti userActions
.
Anda kemudian dapat menggunakan nilai dalam itemId
untuk mengambil item linimasa:
{
"id": "<ITEM_ID>",
"text": "Chipotle's birthday is tomorrow",
"recipients": [
{"id": "CAT_STREAM"}
]
}
Properti recipients
berisi id
kontak yang mewakili
menggunakan perintah suara.