आसान तरीकों का इस्तेमाल करके, स्टैटिक कार्ड शामिल किए जा सकते हैं, अपडेट किए जा सकते हैं, पढ़ा जा सकता है, और मिटाया जा सकता है REST API. इसके अलावा, किसी स्टैटिक कार्ड में ऑब्जेक्ट अटैच किया जा सकता है, जैसे को चालू करें.
इनके काम करने का तरीका
स्टैटिक कार्ड डिफ़ॉल्ट रूप से Glass घड़ी के दाईं ओर होते हैं और जानकारी दिखाते हैं जो डिलीवरी के समय उपयोगकर्ता के लिए काम के हों. हालांकि, इन शर्तों को पूरा करने के लिए लाइव कार्ड जैसे तुरंत ध्यान खींचना और उपयोगकर्ता, कार्ड को पढ़ना या उस पर कोई कार्रवाई करना चुन सकते हैं अपने फ़ुर्सत के पलों में.
जब Glassware समयावधि में स्टेटिक कार्ड डालता है, तो Glass कोई सूचना चला सकता है साउंड का इस्तेमाल किया जा सकता है. पिछले सभी स्टैटिक कार्ड भी दाईं ओर शिफ़्ट हो जाएंगे और 7 दिन के बाद या 200 कार्ड नए होने पर टाइमलाइन से गायब हो जाते हैं.
इनका इस्तेमाल कब करना चाहिए
स्टैटिक कार्ड, डिलीवरी के लिए बेहतरीन होते हैं
समय-समय पर मिलने वाली सूचनाएं
के बारे में कम जानते हैं.
उदाहरण के लिए, समाचार डिलीवर करने वाली कोई ऐसी सेवा
जैसे ही मुख्य खबरें भेजी जाती हैं. मिरर एपीआई स्टैटिक कार्ड
लाइव कार्ड भी शुरू किया जा सकता है या
इमर्सन
OPEN_URI
मेन्यू आइटम. इसकी मदद से, ऐसे हाइब्रिड इंटरैक्शन बनाए जा सकते हैं जिनमें
सूचनाओं के लिए स्टैटिक कार्ड और लाइव कार्ड या इमर्शन के लिए
और इंटरैक्टिव अनुभव मिलेगा.
टाइमलाइन आइटम के लिए संभावित कार्रवाइयों की पूरी सूची के लिए, रेफ़रंस दस्तावेज़ में दिया गया है.
स्टैटिक कार्ड शामिल किए जा रहे हैं
स्टैटिक कार्ड (टाइमलाइन आइटम) डालने के लिए, टाइमलाइन आइटम को JSON फ़ॉर्मैट में दिखाना REST एंडपॉइंट.
टाइमलाइन आइटम के ज़्यादातर फ़ील्ड ज़रूरी नहीं हैं. अपने सबसे आसान रूप में, टाइमलाइन आइटम में सिर्फ़ एक छोटा मैसेज है, जैसा कि इस उदाहरण में दिखाया गया है:
रॉ एचटीटीपी
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/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"
}
डाला गया आइटम जो उपयोगकर्ता की टाइमलाइन में दिखेगा, ऐसा दिखेगा:
अटैचमेंट के साथ टाइमलाइन आइटम को शामिल किया जा रहा है
एक तस्वीर हज़ारों शब्दों के बराबर होती है, जो कि एक तस्वीर में फ़िट हो जाने से बहुत ज़्यादा होती है टाइमलाइन आइटम. आखिर में, इमेज और वीडियो भी अटैच किए जा सकते हैं टाइमलाइन आइटम में बदलना है. यहां टाइमलाइन आइटम को इंसर्ट करने के तरीके का उदाहरण दिया गया है. फ़ोटो अटैचमेंट:
रॉ एचटीटीपी
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, एचटीटीपी लाइव स्ट्रीमिंग के साथ स्ट्रीमिंग की सुविधा देता है. और रीयल टाइम स्ट्रीमिंग प्रोटोकॉल (RTSP) पर अपग्रेड करने की ज़रूरत होती है. फ़ायरवॉल, आरटीएसपी को अक्सर ब्लॉक कर देता है. इसलिए, दूसरे विकल्पों का इस्तेमाल तब करें, जब किया जा सकता है.
वीडियो स्ट्रीम करने के लिए, PLAY_VIDEO
का इस्तेमाल करें
मेन्यू आइटम पहले से मौजूद होता है और वीडियो के यूआरएल को मेन्यू आइटम के
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
टैग को किसी अलग सब-टाइमलाइन कार्ड में जोड़ें. उदाहरण के लिए, आप
पेज पर डाला गया टाइमलाइन आइटम, जिसमें यह एचटीएमएल है:
<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
सीएसएस क्लास की जानकारी देने का विकल्प है
<article>
टैग:
<article class="cover-only">
...
cover-only
क्लास में, अपने-आप पेज होने वाले टाइमलाइन आइटम भी काम करते हैं:
<article class="auto-paginate cover-only">
...
बंडलिंग
बंडल करने से आप संबंधित, लेकिन अलग-अलग आइटम को एक साथ ग्रुप कर सकते हैं, जैसे किसी ईमेल थ्रेड में अलग-अलग मैसेज भेज सकते हैं. बंडल में एक मुख्य कवर कार्ड होता है, जो उपयोगकर्ता, सब-टाइमलाइन देखने के लिए टैप करता है. इसमें बंडल में मौजूद अन्य कार्ड भी होते हैं. बंडल, सामान्य टाइमलाइन कार्ड से अलग होते हैं. कार्ड के ऊपरी हिस्से में कोने वाला फ़ोल्ड मौजूद होता है बंडल के कवर कार्ड के दाएं कोने में.
टाइमलाइन आइटम को बंडल करने के लिए, उन्हें
bundleId
. सबसे हाल ही में जोड़ा गया
आइटम, बंडल का कवर कार्ड है.
इन इमेज में बंडल दिखाया गया है कवर कार्ड, जिसमें सबसे ऊपर दाएं कोने में कॉर्नर फ़ोल्ड मौजूद है और जिसमें दो बंडल किए गए हैं कार्ड शामिल हैं.
टाइमलाइन में मौजूद आइटम पढ़े जा रहे हैं
आपकी सेवा, अपने बनाए गए सभी टाइमलाइन आइटम और सभी टाइमलाइन ऐक्सेस कर सकती है इसके साथ शेयर किए गए आइटम. यहां तरीका देखें सूची में वे टाइमलाइन आइटम आपकी सेवा को दिखाई देते हैं.
रॉ एचटीटीपी
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
प्रॉपर्टी या
अटैचमेंट एंडपॉइंट.
रॉ एचटीटीपी
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();
मेन्यू आइटम बनाना
मेन्यू आइटम की मदद से उपयोगकर्ता, टाइमलाइन कार्ड से जुड़ी कार्रवाइयों का अनुरोध कर सकते हैं, और दो तरह के होते हैं: बिल्ट-इन मेन्यू आइटम और कस्टम मेन्यू आइटम.
ऐप्लिकेशन में पहले से मौजूद मेन्यू आइटम, इन ऐप्लिकेशन की खास सुविधाओं का ऐक्सेस देते हैं ग्लास, जैसे कि टाइमलाइन कार्ड को ज़ोर से पढ़कर, जगह की जानकारी देखने, इमेज शेयर करने या किसी मैसेज का जवाब देने के लिए:
कस्टम मेन्यू आइटम की मदद से, आपका ऐप्लिकेशन खास तरह का व्यवहार दिखाता है से जोड़ा जा सकता है. साथ ही, एक मेन्यू आइटम आइकॉन भी दिया जा सकता है, ब्रैंडिंग.
पहले से मौजूद मेन्यू आइटम जोड़ना
टाइमलाइन आइटम में बिल्ट-इन मेन्यू आइटम जोड़ने के लिए,
menuItems array
को शामिल किया जाएगा.
बिल्ट-इन मेन्यू आइटम का इस्तेमाल करने के लिए, आपको सिर्फ़
हर menuItem
में से action
.
रॉ एचटीटीपी
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
तय करें औरdisplayName
जो Glass पर दिखता है. 50 x 50 PNG की तरफ़ पॉइंट करें सफ़ेद रंग की इमेज औरiconUrl
के लिए पारदर्शी बैकग्राउंड.displayTime
तय करें. अगर आपनेdisplayTime
की जानकारी नहीं दी है, तो टाइमलाइन आइटम उपयोगकर्ता जब भी कस्टम मेन्यू आइटम पर टैप करते हैं, तो यह टाइमलाइन के सामने ले जाता है.
रॉ एचटीटीपी
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/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"
}
...
]
}
सदस्यताएं
मिरर एपीआई की मदद से, ये काम किए जा सकते हैं सूचनाएं पाने की सदस्यता लें ये तब भेजे जाते हैं, जब उपयोगकर्ता किसी टाइमलाइन आइटम या जब उपयोगकर्ता की जगह की जानकारी को अपडेट कर दिया गया है. किसी सूचना की सदस्यता लेने पर, कॉलबैक यूआरएल दें, जो सूचना को प्रोसेस करता हो.
सूचनाएं मिल रही हैं
मिरर एपीआई से एक सूचना, POST
अनुरोध के तौर पर
सदस्यता वाला एंडपॉइंट जिसमें JSON
के अनुरोध का मुख्य हिस्सा है.
रॉ एचटीटीपी
{
"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)
आपकी सेवा को 200 OK
एचटीटीपी स्टेटस के साथ एपीआई का जवाब देना चाहिए
कोड डालें.
अगर आपकी सेवा के जवाब में गड़बड़ी का कोई कोड दिखता है, तो 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 पर अनुरोध भेजें अंतिम ज्ञात स्थान को पुनर्प्राप्त करने के लिए एंडपॉइंट का उपयोग करें. आपका ग्लासवेयर को हर दस मिनट में जगह की जानकारी के अपडेट मिलते हैं.
बोला गया निर्देश
आपके उपयोगकर्ता ने बोलकर निर्देश देने की सुविधा चालू की है, उदाहरण के लिए: "Ok Glass, नोट लिखो, कैट स्ट्रीम, चिपोटल का जन्मदिन है कल". निम्न सूचना आपके कांच के बर्तन:
{
"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
शामिल होता है जो
बोलकर दिए गए निर्देश का इस्तेमाल किया गया.