iOS Push Notifications ทำงานอย่างไร


102

การแจ้งเตือน "พุช" ของ iOS จะส่งไปยังอุปกรณ์เฉพาะโดยที่อุปกรณ์นั้นไม่จำเป็นต้องสำรวจเซิร์ฟเวอร์ได้อย่างไร

ตัวอย่างเช่นสมมติว่าฉันได้รับข้อความใหม่บน Facebook Facebook แจ้ง Apple ว่าอุปกรณ์ของฉันควรได้รับการแจ้งเตือนเช่นนี้ แต่ Apple รู้ได้อย่างไรว่าจะส่งข้อความไปยังอุปกรณ์ / IP ใด


2
@ ฉันกำลังมองหาคำอธิบายโดยละเอียดในระดับเทคนิค บทความนั้นอยู่ในระดับสูงมาก ดังนั้นอุปกรณ์ของฉันจึงรักษาการเชื่อมต่อแบบเปิดกับเซิร์ฟเวอร์แบบพุชของ Apple ตลอดเวลา?
Andy Hin

ฉันคุ้นเคยกับ android push มากขึ้น แต่โดยทั่วไปเมื่อคุณติดตั้งแอพมันจะลงทะเบียนอุปกรณ์ด้วย ID เฉพาะกับ Apple จากนั้นเมื่อ facebook ส่งข้อความถึง apple Apple จะส่งต่อไปยัง ID เฉพาะของอุปกรณ์
Panama Jack

6
@Pjack ใช่ แต่อุปกรณ์ของฉันเปลี่ยนเสาสัญญาณต่าง ๆ อยู่ตลอดเวลาเครือข่าย wifi ที่แตกต่างกัน Apple รู้ IP สำหรับ ID เฉพาะของฉันได้อย่างไร
Andy Hin

@whydna ขอบคุณที่ถามคำถามนี้ ฉันต้องการที่จะเข้าใจสิ่งเดียวกันอย่างแม่นยำ ฉันเชื่อว่าสิ่งนี้ตอบคำถามของฉันได้ที่นี่: stackoverflow.com/questions/18859732/…
MightyMouse

@AndyHin อุปกรณ์ OS (iOS) รู้ว่าเซิร์ฟเวอร์ APN ใดถูกต้อง อุปกรณ์กำลังเชื่อมต่อกับเซิร์ฟเวอร์เหล่านี้และเปิดการเชื่อมต่อไว้ การเชื่อมต่อนี้น่าจะเกี่ยวข้องกับรหัสอุปกรณ์และข้อมูลเมตาอื่น ๆ (หมายเลขโทรศัพท์) เมื่อข้อความต้องการ "พุช" APN จะพบการเชื่อมต่อที่ถูกต้องและส่งลงไปที่การเชื่อมต่อที่เปิดอยู่แล้ว ดังนั้น APN จึงไม่พยายามสร้างการเชื่อมต่อกับอุปกรณ์ แต่เป็นอุปกรณ์ที่เปิดการเชื่อมต่อนั้นเสมอ หนึ่งการเชื่อมต่อต่ออุปกรณ์
Todd

คำตอบ:


49

มันมากเกินไปสำหรับฉันที่จะแสดงความคิดเห็น

จากเอกสารประกอบ.

บริการแจ้งเตือนแบบพุชของ Apple (APN) เผยแพร่การแจ้งเตือนแบบพุชไปยังอุปกรณ์ที่ลงทะเบียนแอปพลิเคชันเพื่อรับการแจ้งเตือนเหล่านั้น อุปกรณ์แต่ละเครื่องจะสร้างการเชื่อมต่อ IP ที่ได้รับการรับรองและเข้ารหัสกับบริการและรับการแจ้งเตือนผ่านการเชื่อมต่อแบบต่อเนื่องนี้ ผู้ให้บริการเชื่อมต่อกับ APN ผ่านช่องสัญญาณถาวรและปลอดภัยในขณะที่ตรวจสอบข้อมูลขาเข้าสำหรับแอปพลิเคชันไคลเอนต์ของตน เมื่อมีข้อมูลใหม่สำหรับแอปพลิเคชันผู้ให้บริการจะเตรียมและส่งการแจ้งเตือนผ่านช่องทางไปยัง APN ซึ่งจะส่งการแจ้งเตือนไปยังอุปกรณ์เป้าหมาย ..

ฉันขอแนะนำให้อ่านเอกสารสำหรับข้อมูลเพิ่มเติมและวิธีใช้และกำหนดค่า ทุกอย่างอยู่ที่นั่น

ผลักดันการแจ้งเตือน


ขอบคุณสำหรับคำตอบ
MightyMouse

7
ดังนั้น Apple จึงรักษา IP แบบคงที่ให้กับอุปกรณ์ของคุณ?
CMCDragonkai

ฉันสงสัยเมื่อเข้าใจว่าเซิร์ฟเวอร์ของฉันต้องส่งการแจ้งเตือนไปยัง APNS สำหรับอุปกรณ์เป้าหมายแต่ละเครื่อง! :(
Vladimir

4
@CMCDragonkai อุปกรณ์สร้างการเชื่อมต่อไม่ใช่เซิร์ฟเวอร์
Hitechcomputergeek

7
ดังนั้นอุปกรณ์จึงรักษาการเชื่อมต่อแบบโพล / ซ็อกเก็ตแบบยาวกับบริการ APN เสมอ หากเป็นเช่นนั้นบริการ APN จะจัดการการเชื่อมต่อจำนวนมากได้อย่างไร - หากเซิร์ฟเวอร์สามารถรองรับการเชื่อมต่อ 50k และมีผู้ใช้ 500 ล้านคนตลอดเวลาบริการอย่างน้อยต้องมีเซิร์ฟเวอร์ 10,000 เครื่อง นี่เป็นสถานการณ์จริงหรือไม่?
AV94

91

อุปกรณ์แต่ละเครื่องสามารถอัปเดตข้อมูลได้โดยใช้โทเค็นอุปกรณ์เฉพาะของตนเอง ภาพนี้อธิบายทุกอย่าง .

ป้อนคำอธิบายภาพที่นี่


มีความคิดว่าการใช้โทเค็นอุปกรณ์คืออะไร? ใช้สำหรับเข้ารหัสการสื่อสารระหว่างเซิร์ฟเวอร์ APNS และ App หรือที่อื่น ๆ หรือไม่?
Mugen

1
@Mugen: APNS ใช้โทเค็นอุปกรณ์เพื่อระบุอุปกรณ์ที่ควรส่งต่อข้อมูลที่ส่งโดยผู้ให้บริการ!
D4ttatraya

@Karan - มีความแตกต่างระหว่างการแจ้งเตือนที่มีไว้สำหรับผู้ใช้ (เช่น "สวัสดีผู้ใช้คุณมีข้อความ!") และผู้ใช้ที่มีไว้เพื่อปลุกแอปและบอกให้ทำการประมวลผลเบื้องหลังอย่างเงียบ ๆ หรือไม่
Howiecamp

@Howiecamp หากคุณใช้การแจ้งเตือนแบบพุชคุณจะได้รับการแจ้งเตือนทุกครั้งที่ได้รับการแจ้งเตือนหากแอปกำลังทำงานอยู่ นอกจากนี้ยังสามารถเข้าถึงรายละเอียดการแจ้งเตือนที่ใช้งานได้เมื่อผู้ใช้แตะการแจ้งเตือนจากศูนย์การแจ้งเตือนและเปิดแอป ในช่วงเวลานี้คุณสามารถดำเนินการตามกระบวนการที่คุณต้องการจะทำ
Karan Alangat

@KaranAlangat จำนวนป้ายจัดการที่นี่อย่างไร เซิร์ฟเวอร์รู้ได้อย่างไร?
GvSharma

23

ภาพรวม APN

บริการ Apple Push Notification (APN) เป็นหัวใจสำคัญของคุณสมบัติการแจ้งเตือนระยะไกล เป็นบริการที่มีประสิทธิภาพปลอดภัยและมีประสิทธิภาพสูงสำหรับนักพัฒนาแอปในการเผยแพร่ข้อมูลไปยังอุปกรณ์ iOS (และทางอ้อม watchOS), tvOS และ macOS

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

อีกครึ่งหนึ่งของการเชื่อมต่อสำหรับการส่งการแจ้งเตือน - ช่องทางที่คงอยู่และปลอดภัยระหว่างเซิร์ฟเวอร์ผู้ให้บริการและ APN ต้องมีการกำหนดค่าในบัญชีนักพัฒนาออนไลน์ของคุณและการใช้ใบรับรองการเข้ารหัสที่ Apple จัดหา ผู้ให้บริการคือเซิร์ฟเวอร์ที่คุณปรับใช้และจัดการที่คุณกำหนดค่าให้ทำงานกับ APN รูป 1-1 แสดงเส้นทางการจัดส่งสำหรับการแจ้งเตือนระยะไกล

รูปที่ 1-1ส่งการแจ้งเตือนระยะไกลจากผู้ให้บริการไปยังแอพ

ภาพ: ../Art/remote_notif_simple.jpg

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

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

ความรับผิดชอบของผู้ให้บริการ

เซิร์ฟเวอร์ผู้ให้บริการของคุณมีหน้าที่รับผิดชอบต่อไปนี้ในการเข้าร่วมกับ APN:

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

สำหรับคำขอการแจ้งเตือนระยะไกลแต่ละรายการที่ผู้ให้บริการส่งจะต้อง:

  • สร้างพจนานุกรม JSON ที่มีเพย์โหลดของการแจ้งเตือนตามที่อธิบายไว้ในการสร้างเพย์โหลดการแจ้งเตือนระยะไกล
  • เพิ่มเพย์โหลดโทเค็นอุปกรณ์ที่ไม่ซ้ำกันทั่วโลกและข้อมูลการจัดส่งอื่น ๆ ไปยังคำขอ HTTP / 2 สำหรับข้อมูลเกี่ยวกับโทเค็นอุปกรณ์โปรดดูที่ APNs-to-Device Connection Trust และ Device Tokens สำหรับข้อมูลเกี่ยวกับรูปแบบคำขอ HTTP / 2 และการตอบกลับและข้อผิดพลาดที่เป็นไปได้จาก APN โปรดดูที่การสื่อสารกับ APN
  • ส่งคำขอ HTTP / 2 ไปยัง APN รวมถึงข้อมูลรับรองการเข้ารหัสในรูปแบบของโทเค็นหรือใบรับรองผ่านช่องทางที่ปลอดภัยแบบถาวร
  • การสร้างช่องสัญญาณที่ปลอดภัยนี้มีอธิบายไว้ใน Security Architecture

การใช้ผู้ให้บริการหลายราย

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

รูปที่ 1-2 การส่งการแจ้งเตือนระยะไกลจากผู้ให้บริการหลายรายไปยังอุปกรณ์หลายเครื่อง

ภาพ: ../Art/remote_notif_multiple.jpg

คุณภาพการบริการการแจ้งเตือนการจัดเก็บและการส่งต่อและการรวมกัน

บริการแจ้งเตือนแบบพุชของ Apple ประกอบด้วยองค์ประกอบคุณภาพการบริการ (QoS) ที่ทำหน้าที่จัดเก็บและส่งต่อ หาก APN พยายามส่งการแจ้งเตือนและอุปกรณ์ปลายทางออฟไลน์ APN จะจัดเก็บการแจ้งเตือนในช่วงเวลาที่ จำกัด และส่งมอบเมื่ออุปกรณ์พร้อมใช้งานอีกครั้ง ส่วนประกอบนี้เก็บเฉพาะการแจ้งเตือนล่าสุดต่ออุปกรณ์และต่อแอป หากอุปกรณ์ออฟไลน์การส่งคำขอการแจ้งเตือนที่กำหนดเป้าหมายอุปกรณ์นั้นจะทำให้คำขอก่อนหน้านี้ถูกยกเลิก หากอุปกรณ์ยังคงออฟไลน์เป็นเวลานานการแจ้งเตือนที่จัดเก็บไว้ทั้งหมดใน APN จะถูกละทิ้ง

ในการอนุญาตการรวมการแจ้งเตือนที่คล้ายกันคุณสามารถรวมตัวระบุการยุบไว้ในคำขอการแจ้งเตือน โดยปกติเมื่ออุปกรณ์ออนไลน์คำขอการแจ้งเตือนแต่ละรายการที่คุณส่งไปยัง APN จะส่งผลให้มีการแจ้งเตือนไปยังอุปกรณ์ อย่างไรก็ตามเมื่อมีคีย์ apns-collision-id อยู่ในส่วนหัวคำขอ HTTP / 2 ของคุณ APN จะรวมคำขอที่มีค่าของคีย์นั้นเหมือนกัน ตัวอย่างเช่นบริการข่าวที่ส่งพาดหัวเดียวกันสองครั้งสามารถใช้ค่าตัวระบุการยุบเดียวกันสำหรับทั้งสองคำขอ จากนั้น APN จะรวมคำขอทั้งสองเป็นการแจ้งเตือนเดียวเพื่อส่งไปยังอุปกรณ์ สำหรับรายละเอียดเกี่ยวกับคีย์ apns-collision-id

สถาปัตยกรรมความปลอดภัย

APN บังคับใช้การตรวจสอบความถูกต้องและการรับรองความถูกต้องแบบ end-to-end โดยใช้ความน่าเชื่อถือสองระดับ ได้แก่ ความน่าเชื่อถือในการเชื่อมต่อและความน่าเชื่อถือของโทเค็นอุปกรณ์

ความน่าเชื่อถือในการเชื่อมต่อทำงานระหว่างผู้ให้บริการและ APN และระหว่าง APN และอุปกรณ์

ความน่าเชื่อถือโทเค็นอุปกรณ์ทำงานแบบ end-to-end สำหรับการแจ้งเตือนระยะไกลแต่ละรายการ ช่วยให้มั่นใจได้ว่าการแจ้งเตือนจะถูกกำหนดเส้นทางระหว่างจุดเริ่มต้น (ผู้ให้บริการ) และจุดสิ้นสุด (อุปกรณ์) ที่ถูกต้องเท่านั้น

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

APN สามารถออกโทเค็นอุปกรณ์ใหม่ได้ด้วยเหตุผลหลายประการ:

  • ผู้ใช้ติดตั้งแอปของคุณบนอุปกรณ์ใหม่
  • ผู้ใช้กู้คืนอุปกรณ์จากข้อมูลสำรอง
  • ผู้ใช้ติดตั้งระบบปฏิบัติการใหม่
  • เหตุการณ์อื่น ๆ ที่ระบบกำหนด

ด้วยเหตุนี้แอปจะต้องขอโทเค็นอุปกรณ์ในเวลาเปิดตัวตามที่อธิบายไว้ใน APNs-to-Device Connection Trust และ Device Tokens สำหรับตัวอย่างโค้ดโปรดดูการลงทะเบียนเพื่อรับการแจ้งเตือนระยะไกล

ในการสร้างเซสชัน TLS ที่ใช้ HTTP / 2 ด้วย APN คุณต้องแน่ใจว่ามีการติดตั้งใบรับรองหลักของ GeoTrust Global CA บนผู้ให้บริการของคุณแต่ละราย หากผู้ให้บริการใช้งาน macOS ใบรับรองหลักนี้จะอยู่ในพวงกุญแจตามค่าเริ่มต้น ในระบบอื่นใบรับรองนี้อาจต้องมีการติดตั้งอย่างชัดเจน คุณสามารถดาวน์โหลดใบรับรองนี้ได้จากเว็บไซต์ GeoTrust Root Certificates นี่คือลิงก์โดยตรงไปยังใบรับรอง

รูปที่ 1-3 แสดงการใช้ API ผู้ให้บริการ APN ที่ใช้ HTTP / 2 เพื่อสร้างความน่าเชื่อถือและใช้โทเค็นการพิสูจน์ตัวตนของผู้ให้บริการ JWT เพื่อส่งการแจ้งเตือน

รูปที่ 1-3 การสร้างและใช้ความน่าเชื่อถือในการเชื่อมต่อผู้ให้บริการที่ใช้โทเค็น

ภาพ: ../Art/service_provider_ct.jpg

ดังแสดงในรูปที่ 1-3 ความน่าเชื่อถือของผู้ให้บริการที่ใช้โทเค็นทำงานดังนี้:

ผู้ให้บริการของคุณขอการเชื่อมต่อที่ปลอดภัยกับ APN โดยใช้ Transport Layer Security (TLS) ซึ่งแสดงเป็นลูกศรที่มีข้อความว่า“ TLS initiation” ในรูป

จากนั้น APN จะให้ใบรับรอง APN แก่ผู้ให้บริการของคุณซึ่งแสดงด้วยลูกศรถัดไปในรูป (ชื่อ“ ใบรับรอง APN”) ซึ่งผู้ให้บริการของคุณจะตรวจสอบความถูกต้อง

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

APN ตอบกลับการพุชแต่ละครั้งแสดงในรูปเป็นลูกศรที่มีข้อความว่า“ การตอบกลับ HTTP / 2”

สำหรับข้อมูลเฉพาะเกี่ยวกับการตอบกลับที่ผู้ให้บริการของคุณสามารถได้รับสำหรับขั้นตอนนี้โปรดดูการตอบกลับ HTTP / 2 จาก APN

รูปที่ 1-4 แสดงการใช้ใบรับรอง SSL ที่ Apple ออกให้เพื่อสร้างความไว้วางใจระหว่างผู้ให้บริการและ APN ไม่เหมือนกับรูปที่ 1-3 รูปนี้ไม่แสดงการพุชการแจ้งเตือนเอง แต่หยุดที่การสร้างการเชื่อมต่อ Transport Layer Security (TLS) ในแบบแผนความน่าเชื่อถือตามใบรับรองคำขอการแจ้งเตือนแบบพุชจะไม่ได้รับการรับรองความถูกต้อง แต่จะได้รับการตรวจสอบโดยใช้โทเค็นอุปกรณ์ที่มาพร้อม

รูปที่ 1-4 การสร้างความน่าเชื่อถือในการเชื่อมต่อผู้ให้บริการตามใบรับรอง

ภาพ: ../Art/service_provider_ct_certificate_2x.png

ดังแสดงในรูปที่ 1-4 ความน่าเชื่อถือของผู้ให้บริการกับ APN ที่ใช้ใบรับรองทำงานดังนี้:

ผู้ให้บริการของคุณขอการเชื่อมต่อที่ปลอดภัยกับ APN โดยใช้ Transport Layer Security (TLS) ซึ่งแสดงเป็นลูกศรที่มีข้อความว่า“ TLS initiation” ในรูป

จากนั้น APN จะให้ใบรับรอง APN แก่ผู้ให้บริการของคุณซึ่งแสดงด้วยลูกศรถัดไปในรูป (ชื่อ“ ใบรับรอง APN”) ซึ่งผู้ให้บริการของคุณจะตรวจสอบความถูกต้อง

จากนั้นผู้ให้บริการของคุณจะต้องส่งใบรับรองผู้ให้บริการที่จัดหาโดย Apple (ซึ่งก่อนหน้านี้คุณได้รับจากบัญชีนักพัฒนาออนไลน์ของคุณตามที่อธิบายไว้ใน“ สร้างใบรับรอง SSL ของไคลเอ็นต์ APN สากล” ในวิธีใช้ Xcode) กลับไปที่ APN ซึ่งแสดงเป็นลูกศรที่มีข้อความว่า“ ผู้ให้บริการ ใบรับรอง”

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

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

APNs-to-Device Connection Trust และ Device Token

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

อุปกรณ์แต่ละเครื่องมีใบรับรองการเข้ารหัสและคีย์การเข้ารหัสส่วนตัวที่ระบบปฏิบัติการจัดหาให้เมื่อเปิดใช้งานอุปกรณ์ครั้งแรกและเก็บไว้ในพวงกุญแจของอุปกรณ์ ระหว่างการเปิดใช้งาน APN จะตรวจสอบความถูกต้องและตรวจสอบการเชื่อมต่อกับอุปกรณ์ตามใบรับรองและคีย์ดังแสดงในรูปที่ 6-5

รูปที่ 1-5 การสร้างความน่าเชื่อถือในการเชื่อมต่อระหว่างอุปกรณ์และ APN

ภาพ: ../Art/service_device_ct.jpg

ดังแสดงในรูปที่ 1-5 APNs-to-device trust ทำงานดังนี้:

  • การเจรจาความน่าเชื่อถือเริ่มต้นเมื่ออุปกรณ์เริ่มต้นการเชื่อมต่อ TLS กับ APN ดังที่แสดงในลูกศรบนสุดในรูป
  • APN ส่งคืนใบรับรอง APN ไปยังอุปกรณ์
  • ระบบปฏิบัติการจะตรวจสอบใบรับรองนี้จากนั้นดังที่แสดงในลูกศร“ ใบรับรองอุปกรณ์” จะส่งใบรับรองอุปกรณ์ไปยัง APN
  • สุดท้ายตามที่ลูกศรชี้ล่างในภาพ APN จะตรวจสอบใบรับรองอุปกรณ์เพื่อสร้างความน่าเชื่อถือ
  • ด้วยการเชื่อมต่อ TLS ที่สร้างขึ้นระหว่าง APN และอุปกรณ์แอปบนอุปกรณ์สามารถลงทะเบียนกับ APN เพื่อรับโทเค็นอุปกรณ์เฉพาะแอปสำหรับการแจ้งเตือนระยะไกล สำหรับรายละเอียดและตัวอย่างรหัสโปรดดูการลงทะเบียนเพื่อรับการแจ้งเตือนระยะไกลในการกำหนดค่าการสนับสนุนการแจ้งเตือนระยะไกล

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

ไม่ว่าผู้ใช้จะเปิดใช้งานอุปกรณ์เป็นครั้งแรกหรือว่า APN ได้ออกโทเค็นอุปกรณ์ใหม่กระบวนการจะคล้ายกันและแสดงในรูปที่ 6-6

รูปที่ 1-6 การจัดการโทเค็นอุปกรณ์

ภาพ: ../Art/token_generation.jpg

การรับและจัดการโทเค็นอุปกรณ์เฉพาะแอปทำงานดังนี้:

แอปของคุณลงทะเบียนกับ APN สำหรับการแจ้งเตือนระยะไกลดังที่แสดงในลูกศรด้านบน หากลงทะเบียนแอปแล้วและไม่มีการเปลี่ยนแปลงโทเค็นอุปกรณ์เฉพาะแอประบบจะส่งคืนโทเค็นที่มีอยู่ไปยังแอปอย่างรวดเร็วและกระบวนการนี้จะข้ามไปยังขั้นตอนที่ 4

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

ระบบส่งโทเค็นอุปกรณ์กลับไปยังแอปของคุณโดยเรียกแอปพลิเคชันของคุณ: didRegisterForRemoteNotificationsWithDeviceToken: delegate method

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

สิ่งสำคัญ

โทเค็นอุปกรณ์ APN มีความยาวผันแปรได้ อย่าฮาร์ดโค้ดขนาดของมัน

เมื่อผู้ให้บริการของคุณส่งคำขอการแจ้งเตือนแบบพุชไปยัง APN จะมีโทเค็นอุปกรณ์ที่ระบุชุดอุปกรณ์แอปและอุปกรณ์ที่ไม่ซ้ำกัน ขั้นตอนนี้จะแสดงในลูกศร“ Token, Payload” ระหว่างผู้ให้บริการและ APN ในรูปที่ 6-7 APN จะถอดรหัสโทเค็นเพื่อรับรองความถูกต้องของคำขอและเพื่อกำหนดอุปกรณ์เป้าหมาย หาก APN ระบุว่าผู้ส่งและผู้รับถูกต้องตามกฎหมายระบบจะส่งการแจ้งเตือนไปยังอุปกรณ์ที่ระบุ

รูปที่ 1-7เส้นทางการแจ้งเตือนระยะไกลจากผู้ให้บริการไปยังอุปกรณ์

ภาพ: ../Art/token_trust.jpg

หลังจากอุปกรณ์ได้รับการแจ้งเตือน (และหลังจากขั้นตอนสุดท้ายที่แสดงในรูปที่ 1-7) ระบบจะส่งต่อการแจ้งเตือนระยะไกลไปยังแอพของคุณ

อ้างถึงบริการแจ้งเตือนแบบพุชของ Apple

ตอนนี้ดูที่นี่เพื่อทำความเข้าใจขั้นตอนทางเทคนิค: วิธีใช้ Apple Push Notification Service บนแอปพลิเคชัน iOS


8
ฮ่า ๆ คุณเพิ่งวางรายการ Apple Docs ทั้งหมดลงใน SO!
Matt Mc

@MattMc - ใช่ฉันเป็นมือใหม่สำหรับ SO เมื่อฉันโพสต์คำตอบนี้และในเวลานั้นฉันโพสต์ลิงก์ไปยัง APNS แต่ลิงก์ไม่ถือว่าเป็นคำตอบของ SO ฉันจึงทำสิ่งนี้ .... :)
Krunal

1
เป็นเรื่องจริงดีกว่าคำตอบแบบลิงค์เพียงอย่างเดียว)
Matt Mc

22

ฉันสร้างอินโฟกราฟิกเพื่ออธิบายขั้นตอนการทำงานของการแจ้งเตือนแบบพุช หวังว่านี่จะเป็นประโยชน์

ป้อนคำอธิบายภาพที่นี่


14

อุปกรณ์ไม่ทำการสำรวจเซิร์ฟเวอร์สำหรับการแจ้งเตือนแบบพุช

เพื่อให้ง่ายให้พิจารณาว่า iPhone เชื่อมต่อกับอินเทอร์เน็ต เมื่อเชื่อมต่อกับอินเทอร์เน็ต iPhone จะสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ Apple Push Notifications การเชื่อมต่อนี้เป็นการเชื่อมต่อแบบเปิดซึ่งหมายความว่าข้อมูลสามารถส่งไปยัง iPhone จากเซิร์ฟเวอร์ได้ทันทีที่ข้อมูลมาถึงเซิร์ฟเวอร์

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

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push


พวกเขาใช้อะไรถ้าไม่ใช่ http
Howiecamp

2

มีการแจ้งเตือนแบบพุชที่ดีมากในบทความนี้บทความนี้

ใน iOS แอปไม่สามารถทำงานเบื้องหลังได้มากนัก แอปได้รับอนุญาตให้ทำกิจกรรมที่ จำกัด เท่านั้นดังนั้นจึงประหยัดแบตเตอรี่

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

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