स्टैटिक कार्ड

आसान तरीकों का इस्तेमाल करके, स्टैटिक कार्ड शामिल किए जा सकते हैं, अपडेट किए जा सकते हैं, पढ़ा जा सकता है, और मिटाया जा सकता है 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 शामिल होता है जो बोलकर दिए गए निर्देश का इस्तेमाल किया गया.