เทคโนโลยีการแจ้งเตือนแบบพุชทำงานบน Android อย่างไร


218

Google นำคุณลักษณะการแจ้งเตือนแบบพุชมาใช้อย่างไร มันทำงานผ่านการสำรวจโดยบริการที่ทำงานในพื้นหลังหรือในวิธีที่แตกต่างกันอย่างไร


24
ฟังดูเหมือนคำถามจริงสำหรับฉัน ฉันสงสัยในคำตอบของมันแล้ว Google ก็พาฉันมาที่นี่ ปิดคำถามด้านคุณภาพอีกครั้ง
Tino Mclaren

1
ฉันต้องการทราบสิ่งนี้และวางแผนที่จะเขียนคำถาม แต่มีคำถามนี้อยู่แล้วดังนั้นจึงเป็นคำถามที่ดีอย่างแน่นอน
Igor Čordaš

คำตอบ:


170

จากสิ่งที่ฉันได้ยินในระหว่างการประชุมนักพัฒนา Android ในอิสราเอล:

มีเพียงซ็อกเก็ต TCP ที่รออยู่ในโหมดยอมรับบนเซิร์ฟเวอร์คลาวด์ของ Google การเชื่อมต่อ TCP เริ่มต้นโดยแอปพลิเคชัน Google Play นั่นเป็นสาเหตุที่ต้องติดตั้ง Google Play บนอุปกรณ์เพื่อทำให้Google Cloud Messaging (GCM) (เดิมชื่อ Android Cloud to Device Messaging Service - C2DM ) ทำงาน

เมื่อซ็อกเก็ตไคลเอนต์ TCP นี้ได้รับข้อความบางส่วนข้อความจะมีข้อมูลเช่นชื่อแพ็คเกจของแอปพลิเคชันที่ควรได้รับการจัดการและแน่นอน - ข้อมูลนั้นเอง ข้อมูลนี้ได้รับการแยกวิเคราะห์และบรรจุลงในเจตนาที่ออกอากาศและได้รับในที่สุดโดยแอปพลิเคชัน

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

ข้อมูลเพิ่มเติมที่http://developer.android.com/google/gcm/gcm.html


1
แต่ฉันคิดว่ามันใช้ได้กับโปรแกรมจำลองเช่นกัน สิ่งที่ฉันนึกถึงคืออุปกรณ์นั้นอัปเดตเซิร์ฟเวอร์ด้วยเส้นทางปัจจุบัน (IP) เมื่อเซิร์ฟเวอร์ google ต้องการส่งการแจ้งเตือนจะใช้เส้นทางปัจจุบันและส่งต่อข้อความไปยังเส้นทางนั้น ฉันถูกต้องบ้างไหม?
Khawar Raza

2
@Khawar Raza: เมื่อ IP ของอุปกรณ์เปลี่ยนจากเหตุผลบางอย่างอุปกรณ์จะตัดการเชื่อมต่อจากเซิร์ฟเวอร์ เมื่อมันเกิดขึ้น - การเชื่อมต่อใหม่ทำให้ตกใจแทนโดยอิงตาม IP ใหม่ของอุปกรณ์
Tal Kanel

1
@ Khawar Raza: โปรแกรมจำลองการทำงานแม้ไม่มี Google Play ผมคิดว่ามันเริ่มต้นซ็อกเก็ตนี้สร้างขึ้นในภายในแทนการเล่น Google
Tal Kanel

2
ฉันเห็น. นั่นน่าสนใจจริง ๆ แล้วฉันสงสัยว่ามันจริงหรือเปล่า
you786

2
ดังนั้นจึงยังคงมีการลงคะแนนเลือกตั้ง แต่สิ่งที่ดีคือการลงคะแนนแบบรวมศูนย์โดย Google Play
Accollativo

143

Android ใช้การเชื่อมต่อที่ใช้งานอยู่หนึ่งครั้งกับเซิร์ฟเวอร์ของ Google แต่ไม่ได้ใช้พลังงานหรือข้อมูลมากนักเนื่องจากไม่มีการรับส่งข้อมูลจนกว่าจะมีบางอย่างส่งข้อความ Google Cloud Messaging (GCM) ไปยังแอปในโทรศัพท์ของคุณ มีการเชื่อมต่อทางโทรศัพท์เพียงครั้งเดียวเท่านั้นที่ใช้โดยแอปทั้งหมด: การติดตั้งแอปใหม่ที่ใช้ GCM ไม่ได้เพิ่มภาระใด ๆ เพิ่มเติม

ขั้นตอนแรกใน GCM คือเซิร์ฟเวอร์บุคคลที่สาม (เช่นเซิร์ฟเวอร์อีเมล) ส่งคำขอไปยังเซิร์ฟเวอร์ GCM ของ Google เซิร์ฟเวอร์นี้จะส่งข้อความไปยังอุปกรณ์ของคุณผ่านการเชื่อมต่อที่เปิดอยู่ ระบบ Android จะตรวจสอบข้อความเพื่อตรวจสอบว่ามีแอปใดบ้างและเริ่มแอพนั้น แอปจะต้องลงทะเบียนกับ Android เพื่อใช้ GCM และต้องได้รับอนุญาตที่เกี่ยวข้อง เมื่อแอปเริ่มทำงานมันอาจสร้างการแจ้งเตือนทันทีด้วยข้อมูลจากข้อความ ข้อความ GCM มีขนาด จำกัด มากดังนั้นแอปอาจเปิดการเชื่อมต่อปกติกับเซิร์ฟเวอร์บุคคลที่สามเพื่อรับข้อมูลเพิ่มเติม (ตัวอย่างเช่นการดาวน์โหลดส่วนหัวของอีเมลใหม่)

ข้อดีของการใช้การแจ้งเตือนแบบพุชคือแอพไม่ต้องทำงานเป็นระยะเพื่อตรวจสอบข้อมูลใหม่ประหยัดทั้งพลังงานและข้อมูล ข้อดีของการมีกลไกแบบรวมศูนย์เช่น GCM คืออุปกรณ์ต้องการการเชื่อมต่อเครือข่ายแบบเปิดเพียงอย่างเดียวและระบบ Android GCM เป็นสิ่งเดียวที่ต้องทำงานต่อไปแทนที่จะเป็นแต่ละแอปที่ต้องทำงานในพื้นหลังเพื่อรักษาเครือข่ายของตัวเอง เชื่อมต่อกับเซิร์ฟเวอร์ของตัวเอง

รับสิ่งนี้จาก: แหล่งที่มา ดูที่นี่ด้วย


1
เพียงความคิดเห็นเกี่ยวกับการเชื่อมต่อ GCM การเชื่อมต่อครั้งเดียวนั้นเป็นการเชื่อมต่อแบบสำรวจ
wmac

1
ส่วนที่สำคัญสำหรับฉันคือเซิร์ฟเวอร์บุคคลที่สามเช่นเซิร์ฟเวอร์อีเมลส่งข้อความแจ้งเตือนไปยังเซิร์ฟเวอร์ Google GCM จริงๆ เป็นบริการที่ Google ให้บริการฟรีและบุคคลที่สามดังกล่าวต้องใช้ช่องทางการสื่อสารกับเซิร์ฟเวอร์ของ Google โดยใช้โปรโตคอล GCN อย่างไรก็ตามโพรโทคอลนั้นเป็นเพียงแค่การตอบสนอง HTTP ที่จัดรูปแบบ JSON ดูdevelopers.google.com/cloud-messagingเพื่อดูข้อมูลโดยละเอียด
Kyselejsyreček

10

คุณสามารถใช้การแจ้งเตือนแบบพุชบน android ด้วยตัวคุณเองด้วยการเชื่อมต่อ tcp แบบสำรวจนาน แต่นั่นจะเกี่ยวข้องกับการบำรุงรักษาซ็อกเก็ตพิเศษ => ท่อระบายน้ำแบตเตอรี่ หรือคุณสามารถเปิดการเชื่อมต่อเป็นระยะโดยใช้ Alarm Manager

Google อาจเปิดซ็อกเก็ตเดียวสำหรับการแจ้งเตือนแบบผลักดัน C2DM ทั้งหมดดังนั้นจึงมีประสิทธิภาพของแบตเตอรี่มากกว่า


ดังนั้นลูกค้าของมันจึงยืนยันว่ามีการโพลตามการเชื่อมต่อ tcp ใช่ไหม? คุณรู้หรือไม่ว่ามันสำรวจความคิดเห็นข้อมูลบ่อยแค่ไหน? เช่นนั้นทุก ๆ 5 วินาที หรือมันเร็วเหมือนการเต้นของหัวใจ?
j2emanue

3

ตั้งแต่วันที่ 10 เมษายน 2018 Google ได้คัดค้าน GCM API เซิร์ฟเวอร์ GCM และไคลเอ็นต์เลิกใช้แล้วและจะถูกลบออกทันทีที่ 11 เมษายน 2019 ย้ายแอป GCM ไปยัง Firebase Cloud Messaging (FCM) ซึ่งสืบทอดโครงสร้างพื้นฐาน GCM ที่เชื่อถือได้และปรับขนาดได้พร้อมคุณสมบัติใหม่มากมาย

https://firebase.google.com/docs/cloud-messaging/


1

ใช่คุณพูดถูก. Google มีบริการ (บริการ GTalk) และบริการนี้ถามเซิร์ฟเวอร์ของ Google ในบางช่วงเวลา


ฉันไม่รู้. ฉันเพิ่งอ่านว่า C2DM ทำงานอย่างไร ตอนนี้บางสิ่งบางอย่างสามารถเปลี่ยนแปลงได้
Yury

-3

บนอุปกรณ์ Android เมื่อคุณได้รับการแจ้งเตือนแบบพุชภาพแอปพลิเคชันของผู้ส่งและข้อความจะปรากฏในแถบสถานะ เมื่อลูกค้าเคาะการแจ้งเตือนเขา / เธอตกลงบนใบสมัคร


มันเชื่อมต่อ TCP ระยะยาวบนพื้นหลังนี้ไม่ได้อธิบายในคำตอบของโปรดติดกับสิ่งที่คำถามที่ถาม :)
Nishchal Gautam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.