ข้อความ Push

เอกสารนี้จะอธิบายวิธีใช้ข้อความ Push ที่จะให้ข้อมูล เมื่อมีการเปลี่ยนแปลงทรัพยากร

ภาพรวม

Google Calendar API แสดงข้อความ Push ที่ให้คุณตรวจสอบได้ ความเปลี่ยนแปลงในทรัพยากร คุณสามารถใช้ฟีเจอร์นี้เพื่อปรับปรุงประสิทธิภาพของ แอปพลิเคชันของคุณ ซึ่งช่วยให้คุณกำจัดเครือข่ายและการประมวลผลเพิ่มเติม ค่าใช้จ่ายที่เกี่ยวข้องกับทรัพยากรที่ใช้ในการสำรวจเพื่อพิจารณาว่ามีการเปลี่ยนแปลงหรือไม่ เมื่อใดก็ตามที่ทรัพยากรที่ดูมีการเปลี่ยนแปลง Google Calendar API จะแจ้งเตือน แอปพลิเคชัน

หากต้องการใช้ข้อความ Push คุณต้องดำเนินการ 2 อย่างต่อไปนี้

  • ตั้งค่า URL การรับหรือ "เว็บฮุค" Callback Receiver

    ช่วงเวลานี้ เป็นเซิร์ฟเวอร์ HTTPS ที่จัดการข้อความแจ้งเตือน API ที่ ทริกเกอร์เมื่อทรัพยากรเปลี่ยนแปลง

  • ตั้งค่า (ช่องทางการแจ้งเตือน) สำหรับปลายทางของทรัพยากรแต่ละรายการที่ต้องการ ดู

    ช่องทางระบุข้อมูลการกำหนดเส้นทางสำหรับการแจ้งเตือน ข้อความ ในการตั้งค่าช่อง คุณต้องระบุ URL ที่เจาะจงซึ่ง ที่ต้องการรับการแจ้งเตือน เมื่อใดก็ตามที่ทรัพยากรของช่องมีการเปลี่ยนแปลง Google Calendar API จะส่งข้อความแจ้งเตือนเป็น POST ไปยัง URL นั้น

ในปัจจุบัน API ของ Google ปฏิทินรองรับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลง ทรัพยากร Acl, CalendarList, Events และ Settings

สร้างช่องทางการแจ้งเตือน

หากต้องการขอข้อความ Push คุณต้องตั้งค่าช่องทางการแจ้งเตือน สำหรับทรัพยากรแต่ละรายการที่ต้องการตรวจสอบ หลังจากตั้งค่าช่องทางการแจ้งเตือนแล้ว API ของ Google ปฏิทินจะแจ้งให้แอปพลิเคชันทราบเมื่อทรัพยากรที่มีการรับชม การเปลี่ยนแปลง

สร้างคำขอดูนาฬิกา

ทรัพยากร API ของ Google ปฏิทินที่ดูได้แต่ละรายการจะมีการเชื่อมโยง watch ที่ URI ในรูปแบบต่อไปนี้

https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch

วิธีตั้งค่าช่องทางการแจ้งเตือนสำหรับข้อความเกี่ยวกับการเปลี่ยนแปลง ให้ส่งคำขอ POST ไปยัง watch สำหรับทรัพยากร

ช่องทางการแจ้งเตือนแต่ละช่องทางจะเชื่อมโยงทั้งกับผู้ใช้รายหนึ่งๆ และ ทรัพยากรที่เฉพาะเจาะจง (หรือชุดของทรัพยากร) คำขอwatch จะไม่สำเร็จ เว้นแต่ผู้ใช้ปัจจุบัน เป็นเจ้าของหรือมีสิทธิ์เข้าถึงแหล่งข้อมูลนี้

ตัวอย่าง

เริ่มดูการเปลี่ยนแปลงคอลเล็กชันของกิจกรรมในปฏิทินที่ระบุ:

POST https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json

{
  "id": "01234567-89ab-cdef-0123456789ab", // Your channel ID.
  "type": "web_hook",
  "address": "https://mydomain.com/notifications", // Your receiving URL.
  ...
  "token": "target=myApp-myCalendarChannelDest", // (Optional) Your channel token.
  "expiration": 1426325213000 // (Optional) Your requested channel expiration time.
}

พร็อพเพอร์ตี้ที่จำเป็น

ในคำขอ watch แต่ละรายการ คุณจะต้องกรอกข้อมูลในช่องต่อไปนี้

  • สตริงพร็อพเพอร์ตี้ id ที่ระบุค่านี้โดยไม่ซ้ำกัน ช่องทางการแจ้งเตือนใหม่ภายในโปรเจ็กต์ของคุณ เราขอแนะนำให้ใช้ ตัวระบุที่ไม่ซ้ำกันทั่วโลก (UUID) หรือรายการอื่นๆ ที่คล้ายกัน สตริงที่ไม่ซ้ำกัน ความยาวสูงสุด: 64 อักขระ

    ค่ารหัสที่คุณตั้งค่าไว้จะถูกสะท้อนกลับใน ส่วนหัว HTTP X-Goog-Channel-Id ของการแจ้งเตือนทั้งหมด ข้อความที่คุณได้รับจากช่องนี้

  • ตั้งค่าสตริงพร็อพเพอร์ตี้ type เป็นค่าแล้ว web_hook

  • ตั้งค่าสตริงพร็อพเพอร์ตี้ address เป็น URL ที่ฟังอยู่ และตอบกลับการแจ้งเตือนสำหรับช่องทางการแจ้งเตือนนี้ นี่คือ URL เรียกกลับของเว็บฮุคและต้องใช้ HTTPS

    โปรดทราบว่า Google Calendar API สามารถส่งการแจ้งเตือนไปยัง ที่อยู่ HTTPS นี้ต่อเมื่อมีการติดตั้งใบรับรอง SSL ที่ถูกต้องไว้เท่านั้น ในเว็บเซิร์ฟเวอร์ของคุณ ใบรับรองที่ไม่ถูกต้อง ได้แก่

    • ใบรับรองแบบ Self-signed
    • ใบรับรองที่ลงนามโดยแหล่งที่มาที่ไม่น่าเชื่อถือ
    • ใบรับรองที่เพิกถอนไปแล้ว
    • ใบรับรองที่มีเรื่องที่ไม่ตรงกับเป้าหมาย ชื่อโฮสต์

พร็อพเพอร์ตี้ที่ไม่บังคับ

นอกจากนี้ คุณยังระบุช่องที่ไม่บังคับเหล่านี้ได้โดยใช้ คำขอwatch:

  • พร็อพเพอร์ตี้ token ที่ระบุสตริงที่กําหนดเอง ค่าเพื่อใช้เป็นโทเค็นของแชแนล คุณสามารถใช้ช่องทางการแจ้งเตือน โทเค็นเพื่อวัตถุประสงค์ต่างๆ ตัวอย่างเช่น คุณสามารถใช้ เพื่อยืนยันว่าข้อความขาเข้าทั้งหมดมาจากช่องทางที่ สร้างแอปพลิเคชันแล้ว เพื่อให้มั่นใจว่า ปลอมแปลง หรือเพื่อกำหนดเส้นทางข้อความไปยังปลายทางที่ถูกต้องภายใน ใบสมัครของคุณตามวัตถุประสงค์ของช่องทางนี้ ความยาวสูงสุด: 256 อักขระ

    โทเค็นจะรวมอยู่ใน ส่วนหัว HTTP X-Goog-Channel-Token ในทุกการแจ้งเตือน ที่แอปพลิเคชันของคุณได้รับสำหรับช่องทางนี้

    หากใช้โทเค็นช่องทางการแจ้งเตือน เราขอแนะนำให้ทำดังนี้

    • ใช้รูปแบบการเข้ารหัสที่ขยายได้ เช่น การค้นหา URL พารามิเตอร์ เช่น forwardTo=hr&createdBy=mobile

    • อย่าใส่ข้อมูลที่ละเอียดอ่อน เช่น โทเค็น OAuth

  • ตั้งค่าสตริงพร็อพเพอร์ตี้ expiration เป็น การประทับเวลา Unix (เป็นมิลลิวินาที) ของวันที่และเวลาที่คุณต้องการให้ Google Calendar API ดำเนินการ หยุดส่งข้อความสำหรับช่องทางการแจ้งเตือนนี้

    หากแชแนลมีเวลาหมดอายุ ระบบจะนับเป็นค่า ของส่วนหัว HTTP X-Goog-Channel-Expiration (ในเวอร์ชันที่มนุษย์อ่านได้) ) ในข้อความแจ้งเตือนทุกรายการ ที่แอปพลิเคชันได้รับสำหรับช่องนี้

ดูรายละเอียดเพิ่มเติมเกี่ยวกับคำขอได้ที่เมธอด watch สำหรับทรัพยากร Acl, CalendarList, Events และ Settings ในการอ้างอิง API

ดูการตอบกลับ

หากคำขอ watch สร้างการแจ้งเตือนสำเร็จ แชแนลจะแสดงรหัสสถานะ HTTP 200 OK

เนื้อหาข้อความของการตอบกลับนาฬิกาจะให้ข้อมูลเกี่ยวกับ ช่องทางการแจ้งเตือนที่คุณเพิ่งสร้างขึ้น ดังที่แสดงในตัวอย่างด้านล่าง

{
  "kind": "api#channel",
  "id": "01234567-89ab-cdef-0123456789ab"", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events", // Version-specific ID of the watched resource.
  "token": "target=myApp-myCalendarChannelDest", // Present only if one was provided.
  "expiration": 1426325213000, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

นอกจากพร็อพเพอร์ตี้ที่คุณส่งมาเป็นส่วนหนึ่งของคำขอแล้ว ข้อมูลที่ส่งคืนยังรวมถึง resourceId และ resourceUri เพื่อระบุแหล่งข้อมูลที่รับชมอยู่สำหรับวิดีโอนี้ ช่องทางการแจ้งเตือน

คุณสามารถส่งต่อข้อมูลที่ส่งคืนไปยังช่องทางการแจ้งเตือนอื่นๆ ได้ เช่น เมื่อคุณต้องการหยุดรับ การแจ้งเตือน

ดูรายละเอียดเพิ่มเติมเกี่ยวกับการตอบกลับได้ที่watch สำหรับทรัพยากร Acl, CalendarList, Events และ Settings ในการอ้างอิง API

ซิงค์ข้อความ

หลังจากสร้างช่องทางการแจ้งเตือนเพื่อดูแหล่งข้อมูลแล้ว Google Calendar API จะส่งข้อความ sync เพื่อระบุว่า การแจ้งเตือนต่างๆ เริ่มขึ้น HTTP ของ X-Goog-Resource-State ค่าส่วนหัวสำหรับข้อความเหล่านี้คือ sync เนื่องจากเครือข่าย เกิดปัญหาเกี่ยวกับเวลา คุณอาจได้รับข้อความ sync ก่อนที่คุณจะได้รับการตอบกลับเมธอด watch

คุณจึงไม่ต้องสนใจการแจ้งเตือนของ sync แต่ ก็ใช้ได้ด้วย เช่น หากคุณตัดสินใจว่าไม่ต้องการเก็บ ช่องนั้น คุณจะสามารถใช้ X-Goog-Channel-ID และ X-Goog-Resource-ID ค่าในการเรียกไปยัง หยุดรับการแจ้งเตือน คุณยังสามารถใช้ การแจ้งเตือน sync ให้เริ่มดำเนินการเพื่อเตรียมพร้อม กิจกรรมหลังจากนี้

รูปแบบของข้อความ sync ที่ Google ปฏิทิน API ส่งไปถึง URL ผู้รับของคุณแสดงไว้ด้านล่างนี้

POST https://mydomain.com/notifications // Your receiving URL.
X-Goog-Channel-ID: channel-ID-value
X-Goog-Channel-Token: channel-token-value
X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires.
X-Goog-Resource-ID: identifier-for-the-watched-resource
X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource
X-Goog-Resource-State: sync
X-Goog-Message-Number: 1

ข้อความที่ซิงค์จะมี X-Goog-Message-Number HTTP เสมอ ค่าส่วนหัว 1 การแจ้งเตือนที่ตามมาแต่ละรายการสำหรับช่องนี้ หมายเลขข้อความที่มากกว่าหมายเลขก่อนหน้านี้ แม้ว่าข้อความ จะไม่เรียงตามลำดับ

ต่ออายุช่องทางการแจ้งเตือน

ช่องทางการแจ้งเตือนอาจมีเวลาหมดอายุโดยมีค่า ซึ่งพิจารณาจากคำขอของคุณหรือขีดจำกัดภายในของ Google Calendar API หรือค่าเริ่มต้น (จะใช้ค่าที่มีการจำกัดมากกว่า) วันหมดอายุของช่อง เวลา หากมี จะรวมเป็นการประทับเวลา Unix (หน่วยเป็นมิลลิวินาที) ในข้อมูลที่แสดงผลโดยเมธอด watch นอกจากนี้ มีการระบุวันที่และเวลาหมดอายุ (ในรูปแบบที่มนุษย์อ่านได้) ในทุก ข้อความแจ้งเตือนที่แอปพลิเคชันได้รับสำหรับช่องนี้ใน ส่วนหัว HTTP ของ X-Goog-Channel-Expiration

ปัจจุบันยังไม่มีวิธีต่ออายุช่องทางการแจ้งเตือนโดยอัตโนมัติ วันและเวลา ช่องทางใกล้หมดอายุ คุณต้องแทนที่ด้วยช่องใหม่โดยการเรียกใช้ เมธอด watch และเช่นเคย คุณต้องใช้ค่าที่ไม่ซ้ำกันสำหรับ พร็อพเพอร์ตี้ id ของช่องใหม่ โปรดทราบว่าอาจมี เป็น "ทับซ้อน" ระยะเวลาที่ช่องทางการแจ้งเตือน 2 ช่องทางสำหรับ มีการใช้งานทรัพยากรเดียวกัน

รับการแจ้งเตือน

เมื่อใดก็ตามที่ทรัพยากรที่ดูมีการเปลี่ยนแปลง แอปพลิเคชันของคุณจะได้รับ ที่อธิบายการเปลี่ยนแปลงดังกล่าว โดย Google ปฏิทิน API จะส่งข้อมูลเหล่านี้ ข้อความเป็นคำขอ HTTPS POST ไปยัง URL ที่คุณระบุเป็น พร็อพเพอร์ตี้ address สำหรับการแจ้งเตือนนี้

ตีความรูปแบบข้อความแจ้งเตือน

ข้อความแจ้งเตือนทั้งหมดจะรวมชุดส่วนหัว HTTP ที่มี คำนำหน้า X-Goog- การแจ้งเตือนบางประเภทอาจมี เนื้อความ

ส่วนหัว

ข้อความแจ้งเตือนที่ Google Calendar API โพสต์ไปยังผู้รับ URL มีส่วนหัว HTTP ต่อไปนี้

ส่วนหัว คำอธิบาย
แสดงเสมอ
X-Goog-Channel-ID UUID หรือสตริงที่ไม่ซ้ำกันอื่นๆ ที่คุณระบุไว้เพื่อระบุข้อมูลนี้ ช่องทางการแจ้งเตือน
X-Goog-Message-Number จำนวนเต็มที่ระบุข้อความนี้สำหรับการแจ้งเตือนนี้ ค่าจะเป็น 1 เสมอสำหรับ sync ข้อความ ข้อความ จำนวนที่เพิ่มขึ้นสำหรับแต่ละข้อความที่ตามมาบนช่อง ไม่เรียงตามลำดับ
X-Goog-Resource-ID ค่าทึบที่ระบุทรัพยากรที่ดู รหัสนี้คือ เสถียรในทุกเวอร์ชัน API
X-Goog-Resource-State สถานะทรัพยากรใหม่ที่เรียกใช้การแจ้งเตือน ค่าที่เป็นไปได้มีดังนี้ sync, exists หรือ not_exists
X-Goog-Resource-URI ตัวระบุเฉพาะเวอร์ชัน API สำหรับทรัพยากรที่ดู
บางครั้งอาจมี
X-Goog-Channel-Expiration วันที่และเวลาที่ช่องทางการแจ้งเตือนหมดอายุ ซึ่งแสดงเป็น ที่มนุษย์อ่านได้ แสดงเมื่อกำหนดไว้เท่านั้น
X-Goog-Channel-Token โทเค็นช่องทางการแจ้งเตือนที่แอปพลิเคชันตั้งค่า และ ซึ่งใช้ยืนยันแหล่งที่มาของการแจ้งเตือนได้ นำเสนอเฉพาะเมื่อ กำหนดไว้

ข้อความแจ้งเตือนที่ Google Calendar API โพสต์ไปยัง URL ผู้รับของคุณไม่มีเนื้อหาของข้อความ ข้อความเหล่านี้ไม่มีข้อมูลเฉพาะเกี่ยวกับทรัพยากรที่อัปเดต คุณจะต้องเรียก API อีกครั้งเพื่อดูรายละเอียดการเปลี่ยนแปลงทั้งหมด

ตัวอย่าง

เปลี่ยนข้อความแจ้งเตือนสำหรับคอลเล็กชันที่มีการแก้ไขเหตุการณ์:

POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events
X-Goog-Resource-State:  exists
X-Goog-Message-Number: 10

ตอบสนองต่อการแจ้งเตือนต่างๆ

เพื่อแสดงถึงความสำเร็จ คุณสามารถส่งรหัสสถานะต่อไปนี้ 200, 201, 202, 204 หรือ 102

หากบริการของคุณใช้ไลบรารีไคลเอ็นต์ API ของ Google และแสดงผล 500,502, 503 หรือ 504, Google Calendar API ลองอีกครั้งโดยใช้ Exponential Backoff รหัสสถานะการคืนสินค้าอื่นๆ ทั้งหมดจะถือว่าเป็นข้อความล้มเหลว

ทำความเข้าใจกิจกรรมการแจ้งเตือนของ Google Calendar API

ส่วนนี้จะให้รายละเอียดเกี่ยวกับข้อความการแจ้งเตือนที่คุณสามารถ ได้รับเมื่อใช้ข้อความ Push กับ API ของ Google ปฏิทิน

X-Goog-Resource-State ใช้กับ นำส่งเมื่อ
sync ACL, รายการปฏิทิน, กิจกรรม, การตั้งค่า สร้างช่องใหม่เรียบร้อยแล้ว คุณจะเริ่มได้รับการแจ้งเตือนเกี่ยวกับการโทร
exists ACL, รายการปฏิทิน, กิจกรรม, การตั้งค่า มีการเปลี่ยนแปลงทรัพยากร การเปลี่ยนแปลงที่เป็นไปได้รวมถึงการสร้างทรัพยากรใหม่ หรือการแก้ไขหรือลบทรัพยากรที่มีอยู่

ปิดการแจ้งเตือน

พร็อพเพอร์ตี้ expiration จะควบคุมเมื่อการแจ้งเตือนหยุดโดยอัตโนมัติ คุณสามารถ เลือกหยุดรับการแจ้งเตือนสำหรับช่องใดช่องหนึ่งก่อนถึงวันนั้น หมดอายุด้วยการเรียกเมธอด stop ที่ URI ต่อไปนี้

https://www.googleapis.com/calendar/v3/channels/stop

วิธีนี้กำหนดให้คุณต้องระบุข้อมูลโค้ดของช่อง id และพร็อพเพอร์ตี้ resourceId ดังที่แสดงใน ตัวอย่างด้านล่าง ถ้า Google ปฏิทิน API มีหลายประเภท ทรัพยากรที่มี watch เมธอด มีได้เพียง 1 วิธีเท่านั้น stop วิธี

เฉพาะผู้ใช้ที่มีสิทธิ์ที่ถูกต้องเท่านั้นที่จะหยุดช่องได้ โดยเฉพาะอย่างยิ่งฟีเจอร์ต่อไปนี้

  • หากช่องสร้างขึ้นโดยบัญชีผู้ใช้ปกติ จะใช้ ผู้ใช้จากไคลเอ็นต์เดียวกัน (ระบุโดยรหัสไคลเอ็นต์ OAuth 2.0 จาก โทเค็นการตรวจสอบสิทธิ์) ผู้ที่สร้างช่องจะหยุดช่องได้
  • หากช่องสร้างขึ้นโดยบัญชีบริการ ผู้ใช้จาก สามารถหยุดช่องได้

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีหยุดรับการแจ้งเตือน

POST https://www.googleapis.com/calendar/v3/channels/stop
  
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json

{
  "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
  "resourceId": "ret08u3rv24htgh289g"
}