ตอนแรกฉันคิดว่านี่น่าจะเป็นอินสแตนซ์ของการส่งข้อความไปยังอุปกรณ์ Android cloudแต่ไม่สามารถทำได้: WhatsApp ไม่ได้ประกาศการอนุญาตที่จำเป็นและใช้งานได้ใน Eclair (Android 2.1) ในขณะที่การส่งข้อความบนคลาวด์ และการแทนที่ Google Cloud Messaging) ต้องการ Froyo อย่างน้อย (Android 2.2)
อย่างไรก็ตามเป็นไปได้มากว่าบริการแจ้งเตือนแบบพุช เป็นไปไม่ได้ที่จะบอกว่าวิธีการใช้งานโดยไม่ต้องเข้าถึงซอร์สโค้ดของ WhatsApp
ส่วนที่เกี่ยวกับการรับข้อความเมื่อไม่ได้ใช้งานนั้นค่อนข้างอธิบายได้ง่าย แอพมีบริการที่ทำงานอยู่เบื้องหลังเพื่อเช็คอินกับเซิร์ฟเวอร์เป็นระยะ ๆ (หรือรับการพุชของเซิร์ฟเวอร์หรืออะไรก็ตามที่ทำ) เมื่อคุณได้รับข้อความบริการปรากฏขึ้นการแจ้งเตือน
สำหรับคำถามเกี่ยวกับวิธีที่เซิร์ฟเวอร์สามารถทำการพุชนี่เป็นไปได้ (อีกครั้งฉันไม่สามารถยืนยันได้หากไม่มีซอร์สโค้ด):
- WhatsApp เริ่มต้นและเปิดซ็อกเก็ตสองซ็อกเก็ตหนึ่งช่องเพื่อฟังและอีกหนึ่งช่องเพื่อส่งข้อความไปยังเซิร์ฟเวอร์
- WhatsApps เริ่มฟังจากซ็อกเก็ตแรก
- WhatsApp จะส่งข้อความที่มีหมายเลขโทรศัพท์ของคุณและพอร์ตของซ็อกเก็ตการฟังไปยังเซิร์ฟเวอร์และรอการตอบรับ
- เซิร์ฟเวอร์บันทึกหมายเลขโทรศัพท์และหมายเลขพอร์ตในข้อความและที่อยู่ IP ที่ข้อความมาจาก
- เซิร์ฟเวอร์ส่งการตอบรับไปยังแอป
- แอพได้รับการตอบรับและปิดซ็อกเก็ตข้อความ
- ข้อความที่มีหมายเลขโทรศัพท์ของคุณเป็นปลายทางมาถึงเซิร์ฟเวอร์
- เซิร์ฟเวอร์ใช้ที่อยู่ IP และหมายเลขพอร์ตที่เชื่อมโยงกับหมายเลขโทรศัพท์ของคุณและใช้ข้อมูลนั้นเพื่อส่งข้อความไปยังโทรศัพท์ของคุณ
เพื่อให้สามารถใช้งานได้แอปจะต้องตรวจสอบสถานะของการเชื่อมต่อเครือข่ายและรีเซ็ตซ็อกเก็ตการฟัง / ส่งข้อความการลงทะเบียนอีกครั้งเมื่อจำเป็น (ตัวอย่างเช่นหากที่อยู่ IP เปลี่ยนไป)