คุณสามารถแทรก อัปเดต อ่าน และลบการ์ดภาพนิ่งได้โดยใช้ REST API นอกจากนี้ คุณสามารถแนบวัตถุเข้ากับการ์ดภาพนิ่ง เช่น เป็นตำแหน่งหรือสื่อ
วิธีการทำงาน
การ์ดภาพนิ่งอยู่ทางด้านขวาของนาฬิกา Glass โดยค่าเริ่มต้นและแสดงข้อมูล ที่เกี่ยวข้องกับผู้ใช้ ณ เวลาที่นำส่ง แต่ไม่ได้หมายความว่า ความสนใจได้ทันที เช่น การ์ดสด และผู้ใช้สามารถเลือกอ่านหรือดำเนินการกับบัตร ในยามว่าง
เมื่อ Glassware ใส่การ์ดแบบคงที่ลงในไทม์ไลน์ Glass อาจเล่นการแจ้งเตือน เพื่อแจ้งเตือนผู้ใช้ การ์ดภาพนิ่งทั้งหมดก่อนหน้าจะเลื่อนไปทางขวาด้วย และจะหายไปจากไทม์ไลน์หลังผ่านไป 7 วัน หรือเมื่อมีการ์ด 200 ใบที่ใหม่กว่า
ควรใช้ในกรณีใด
การ์ดภาพนิ่งเหมาะสำหรับการแสดงโฆษณา
การแจ้งเตือนตามกำหนดเวลา
แก่ผู้ใช้เมื่อสิ่งสำคัญเกิดขึ้น
ตัวอย่างเช่น บริการส่งข่าว
ส่งเรื่องราวข่าวเด่นทันทีที่เกิดข่าว การ์ดแบบคงที่ของ API มิเรอร์
สามารถเริ่มใช้การ์ดสด หรือ
ดื่มด่ำกับ
OPEN_URI
รายการในเมนู คุณจึงสร้างการโต้ตอบแบบผสมที่ใช้
การ์ดแบบคงที่เป็นการแจ้งเตือนและการ์ดแบบสดหรือการดื่มด่ำกับ
ประสบการณ์ที่มีการโต้ตอบมากขึ้น
สำหรับรายการการดำเนินการที่เป็นไปได้ทั้งหมดสำหรับไทม์ไลน์ โปรดดูที่ข้อมูลอ้างอิง เอกสารประกอบ
การแทรกการ์ดแบบคงที่
หากต้องการแทรกการ์ดแบบคงที่ (รายการไทม์ไลน์) ให้โพสต์ การแสดง JSON ของรายการไทม์ไลน์เพื่อ ปลายทาง REST
ช่องส่วนใหญ่ในรายการไทม์ไลน์จะเป็นช่องที่ไม่บังคับ ด้วยรูปแบบที่เรียบง่ายที่สุด รายการไทม์ไลน์จะมีเพียงข้อความสั้นๆ ตามตัวอย่างนี้
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 การดาวน์โหลดแบบโพรเกรสซีฟ และโปรโตคอลสตรีมมิงแบบเรียลไทม์ (RTSP) RTSP มักถูกบล็อกโดยไฟร์วอลล์ ดังนั้นโปรดใช้ตัวเลือกอื่นเมื่อ เท่าที่จะเป็นไปได้
หากต้องการสตรีมวิดีโอ ให้ใช้ PLAY_VIDEO
ไว้ในรายการเมนู และระบุ URL ของวิดีโอที่จะเป็นรายการเมนู
payload
โปรดดู
การเพิ่มรายการในเมนูในตัว และ
รูปแบบสื่อที่รองรับ
เพื่อดูข้อมูลเพิ่มเติม
การใส่เลขหน้า
คุณสามารถกำหนดเลขหน้าให้รายการ
ในไทม์ไลน์ที่ไม่พอดีกับการ์ดไทม์ไลน์หนึ่งๆ
แต่ควรเชื่อมโยงกับบัตรใบเดียวกัน แบ่งหน้าแล้ว
ทุกรายการใช้ 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
สําหรับเนื้อหา
ที่คุณต้องการแสดงในการ์ดแต่ละใบ Glass แสดงเนื้อหาของแต่ละชนิด
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>
โดยค่าเริ่มต้น การ์ดแรกของรายการไทม์ไลน์ที่มีเลขหน้าจะแสดงเป็น
และจะแสดงขึ้นอีกครั้งเมื่อผู้ใช้เลือกอ่านเพิ่มเติม
รายการในเมนู เพื่อป้องกันไม่ให้บัตรใบแรกปรากฏขึ้นอีกหลังจากแตะ
อ่านเพิ่มเติม คุณสามารถระบุคลาส CSS cover-only
สำหรับ
แท็ก <article>
:
<article class="cover-only">
...
คลาส cover-only
ยังรองรับรายการในไทม์ไลน์ที่ใส่เลขหน้าโดยอัตโนมัติอีกด้วย ดังนี้
<article class="auto-paginate cover-only">
...
การรวมกลุ่มอีเมล
การรวมกลุ่มอีเมลช่วยให้คุณสามารถจัดกลุ่มรายการที่เกี่ยวข้องกันแต่แตกต่างกันเข้าด้วยกัน เช่น แต่ละข้อความในชุดข้อความอีเมล แพ็กเกจมีการ์ดหน้าปกหลักที่ ผู้ใช้แตะเพื่อแสดงไทม์ไลน์ย่อยที่มีการ์ดอื่นๆ ในแพ็กเกจ กลุ่มจะแตกต่างจากการ์ดไทม์ไลน์ปกติโดยมีรอยพับมุมด้านบน มุมขวาของการ์ดหน้าปกของแพ็กเกจ
หากต้องการจัดกลุ่มรายการในไทม์ไลน์ ให้สร้างรายการดังกล่าวด้วยค่าเดียวกันสำหรับ
bundleId
เพิ่มล่าสุด
คือการ์ดหน้าปกของแพ็กเกจ
ภาพต่อไปนี้แสดงแพ็กเกจ การ์ดปกที่มีพับมุมที่มุมขวาบนและพ่วงสองใบ ที่อยู่ด้านล่าง
กำลังอ่านรายการในไทม์ไลน์
บริการของคุณสามารถเข้าถึงรายการไทม์ไลน์ทั้งหมดที่บริการนั้นสร้างขึ้น รวมถึงไทม์ไลน์ทั้งหมด รายการที่มีการใช้ร่วมกับรายการนี้ วิธีการมีดังนี้ ระบุรายการในไทม์ไลน์ที่ ซึ่งบริการของคุณจะเห็นได้
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 อื่นๆ เพื่อรับ อัปเดต และ ลบรายการในไทม์ไลน์
การเข้าถึงไฟล์แนบ
คุณสามารถเข้าถึงไฟล์แนบของรายการในไทม์ไลน์ได้ผ่านทาง
พร็อพเพอร์ตี้อาร์เรย์ชื่อ 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 ประเภท ได้แก่ รายการในเมนูในตัวและรายการในเมนูที่กำหนดเอง
รายการเมนูในตัวช่วยให้สามารถเข้าถึงฟังก์ชันการทำงานพิเศษที่ให้บริการโดย Glass เช่น การอ่านออกเสียงการ์ดไทม์ไลน์ การไปยัง ตำแหน่ง การแชร์รูปภาพ หรือการตอบกลับข้อความ ให้ทำดังนี้
รายการเมนูที่กำหนดเองช่วยให้แอปพลิเคชันแสดงลักษณะการทำงานที่เจาะจง กับเครื่องแก้ว และคุณยังสามารถแสดงไอคอนเมนูให้ตรงกับ การแสดงแบรนด์
กำลังเพิ่มรายการในเมนูในตัว
คุณสามารถเพิ่มรายการในเมนูในตัวไปยังรายการในไทม์ไลน์ได้โดยการป้อนข้อมูล
menuItems array
เมื่อแทรก
หากต้องการใช้รายการในเมนูแบบบิวท์อิน คุณเพียงแค่ต้องป้อนข้อมูล
action
ของ menuItem
แต่ละรายการ
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"
}
]
}
การกำหนดรายการในเมนูที่กำหนดเอง
หากรายการในเมนูในตัวไม่เหมาะกับคุณ คุณสามารถสร้างรายการเมนูที่กำหนดเองได้โดยใช้ ด้วยตนเองโดยทำสิ่งต่อไปนี้เมื่อแทรกหรืออัปเดตรายการในไทม์ไลน์
- ระบุ
CUSTOM
สำหรับmenuItem.action
- ระบุ
menuItem.id
เมื่อผู้ใช้แตะรายการเมนูที่กำหนดเอง Glassware ของคุณ ได้รับการแจ้งเตือนด้วย ป้อนmenuItem.id
แล้ว ซึ่งจะช่วยให้คุณระบุแหล่งที่มาของ การแจ้งเตือน - ระบุ
menuItem.values
เพื่อเพิ่มiconUrl
และdisplayName
ที่ปรากฏใน Glass ชี้ไปที่ PNG ขนาด 50 x 50 รูปภาพสีขาวพร้อมพื้นหลังโปร่งใสสำหรับ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
เท่านั้น
action
ในราคา menuItem
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 ด้วยสถานะ HTTP ของ 200 OK
หากไม่มีข้อผิดพลาดเกิดขึ้น
หากบริการของคุณตอบสนองด้วยรหัสข้อผิดพลาด 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
ของรายการที่มี:
- ตั้งค่าแอตทริบิวต์
inReplyTo
เป็นID
ของรายการในไทม์ไลน์ ตอบกลับ - ตั้งค่าแอตทริบิวต์
text
เป็นการถอดเสียงเป็นคำแล้ว - ตั้งค่าแอตทริบิวต์
recipients
เป็นcreator
ของรายการในไทม์ไลน์แล้ว คือการตอบกลับ (หากมี)
ตัวอย่าง
{
"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
เป็นรหัสของข้อมูลที่ถูกลบ
รายการ รายการไม่มีข้อมูลเมตาอื่นนอกเหนือจากรหัสและ
พร็อพเพอร์ตี้ isDeleted
เลือกรายการในเมนูที่กําหนดเองแล้ว
ผู้ใช้ได้เลือก รายการในเมนูที่กำหนดเอง ตั้งค่าโดยบริการของคุณ:
{
"collection": "timeline",
"itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
"operation": "UPDATE",
"userToken": "harold_penguin",
"userActions": [
{
"type": "CUSTOM",
"payload": "PING"
}
]
}
แอตทริบิวต์ itemId
ตั้งค่าเป็นรหัสของรายการในเมนูที่
ที่ผู้ใช้เลือก
อาร์เรย์ userActions
มีรายการของการดำเนินการที่กำหนดเอง
ที่ผู้ใช้ดำเนินการกับรายการนี้ บริการของคุณควรจัดการ
ดำเนินการตามความเหมาะสม
การอัปเดตตำแหน่ง
ตำแหน่งใหม่พร้อมใช้งานสำหรับผู้ใช้ปัจจุบัน:
{
"collection": "locations",
"itemId": "latest",
"operation": "UPDATE",
"userToken": "harold_penguin",
"verifyToken": "random_hash_to_verify_referer"
}
เมื่อ Glassware ของคุณได้รับการอัปเดตตำแหน่ง ให้ส่ง คำขอไปยัง glass.locations.get ปลายทางเพื่อเรียกข้อมูลตำแหน่งล่าสุดที่ทราบ เครื่องแก้วของคุณ รับการอัปเดตตำแหน่งทุก 10 นาที
คำสั่งเสียง
ผู้ใช้เปิดใช้งานคำสั่งเสียง เช่น "Ok Glass จดโน้ตนะ Cat Stream วันเกิดของ Chipotle นะ พรุ่งนี้" เราได้ส่งการแจ้งเตือนต่อไปนี้ไปยัง เครื่องแก้ว:
{
"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
ของรายชื่อติดต่อที่แสดงถึง
ใช้คำสั่งเสียง