ภาพรวม APN
บริการ Apple Push Notification (APN) เป็นหัวใจสำคัญของคุณสมบัติการแจ้งเตือนระยะไกล เป็นบริการที่มีประสิทธิภาพปลอดภัยและมีประสิทธิภาพสูงสำหรับนักพัฒนาแอปในการเผยแพร่ข้อมูลไปยังอุปกรณ์ iOS (และทางอ้อม watchOS), tvOS และ macOS
ในการเปิดตัวแอปของคุณครั้งแรกบนอุปกรณ์ของผู้ใช้ระบบจะสร้างการเชื่อมต่อ IP ที่ได้รับการรับรองเข้ารหัสและต่อเนื่องระหว่างแอปและ APN ของคุณโดยอัตโนมัติ การเชื่อมต่อนี้ช่วยให้แอปของคุณทำการตั้งค่าเพื่อเปิดใช้งานเพื่อรับการแจ้งเตือนตามที่อธิบายไว้ในการกำหนดค่าการสนับสนุนการแจ้งเตือนระยะไกล
อีกครึ่งหนึ่งของการเชื่อมต่อสำหรับการส่งการแจ้งเตือน - ช่องทางที่คงอยู่และปลอดภัยระหว่างเซิร์ฟเวอร์ผู้ให้บริการและ APN ต้องมีการกำหนดค่าในบัญชีนักพัฒนาออนไลน์ของคุณและการใช้ใบรับรองการเข้ารหัสที่ Apple จัดหา ผู้ให้บริการคือเซิร์ฟเวอร์ที่คุณปรับใช้และจัดการที่คุณกำหนดค่าให้ทำงานกับ APN รูป 1-1 แสดงเส้นทางการจัดส่งสำหรับการแจ้งเตือนระยะไกล
รูปที่ 1-1ส่งการแจ้งเตือนระยะไกลจากผู้ให้บริการไปยังแอพ
ด้วยการตั้งค่าการแจ้งเตือนแบบพุชบนผู้ให้บริการของคุณและในแอปของคุณผู้ให้บริการของคุณจะสามารถส่งคำขอการแจ้งเตือนไปยัง 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 การส่งการแจ้งเตือนระยะไกลจากผู้ให้บริการหลายรายไปยังอุปกรณ์หลายเครื่อง
คุณภาพการบริการการแจ้งเตือนการจัดเก็บและการส่งต่อและการรวมกัน
บริการแจ้งเตือนแบบพุชของ 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 การสร้างและใช้ความน่าเชื่อถือในการเชื่อมต่อผู้ให้บริการที่ใช้โทเค็น
ดังแสดงในรูปที่ 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 การสร้างความน่าเชื่อถือในการเชื่อมต่อผู้ให้บริการตามใบรับรอง
ดังแสดงในรูปที่ 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
ดังแสดงในรูปที่ 1-5 APNs-to-device trust ทำงานดังนี้:
- การเจรจาความน่าเชื่อถือเริ่มต้นเมื่ออุปกรณ์เริ่มต้นการเชื่อมต่อ TLS กับ APN ดังที่แสดงในลูกศรบนสุดในรูป
- APN ส่งคืนใบรับรอง APN ไปยังอุปกรณ์
- ระบบปฏิบัติการจะตรวจสอบใบรับรองนี้จากนั้นดังที่แสดงในลูกศร“ ใบรับรองอุปกรณ์” จะส่งใบรับรองอุปกรณ์ไปยัง APN
- สุดท้ายตามที่ลูกศรชี้ล่างในภาพ APN จะตรวจสอบใบรับรองอุปกรณ์เพื่อสร้างความน่าเชื่อถือ
- ด้วยการเชื่อมต่อ TLS ที่สร้างขึ้นระหว่าง APN และอุปกรณ์แอปบนอุปกรณ์สามารถลงทะเบียนกับ APN เพื่อรับโทเค็นอุปกรณ์เฉพาะแอปสำหรับการแจ้งเตือนระยะไกล สำหรับรายละเอียดและตัวอย่างรหัสโปรดดูการลงทะเบียนเพื่อรับการแจ้งเตือนระยะไกลในการกำหนดค่าการสนับสนุนการแจ้งเตือนระยะไกล
หลังจากได้รับโทเค็นอุปกรณ์แอปจะต้องเชื่อมต่อกับผู้ให้บริการที่เกี่ยวข้องของแอปและส่งต่อโทเค็นไปยังแอปนั้น ขั้นตอนนี้จำเป็นเนื่องจากผู้ให้บริการต้องรวมโทเค็นอุปกรณ์ในภายหลังเมื่อส่งคำขอการแจ้งเตือนไปยัง APN โดยกำหนดเป้าหมายอุปกรณ์ รหัสที่คุณเขียนเพื่อส่งต่อโทเค็นยังแสดงในการลงทะเบียนเพื่อรับการแจ้งเตือนระยะไกล
ไม่ว่าผู้ใช้จะเปิดใช้งานอุปกรณ์เป็นครั้งแรกหรือว่า APN ได้ออกโทเค็นอุปกรณ์ใหม่กระบวนการจะคล้ายกันและแสดงในรูปที่ 6-6
รูปที่ 1-6 การจัดการโทเค็นอุปกรณ์
การรับและจัดการโทเค็นอุปกรณ์เฉพาะแอปทำงานดังนี้:
แอปของคุณลงทะเบียนกับ APN สำหรับการแจ้งเตือนระยะไกลดังที่แสดงในลูกศรด้านบน หากลงทะเบียนแอปแล้วและไม่มีการเปลี่ยนแปลงโทเค็นอุปกรณ์เฉพาะแอประบบจะส่งคืนโทเค็นที่มีอยู่ไปยังแอปอย่างรวดเร็วและกระบวนการนี้จะข้ามไปยังขั้นตอนที่ 4
เมื่อต้องการโทเค็นอุปกรณ์ใหม่ APN จะสร้างขึ้นโดยใช้ข้อมูลที่มีอยู่ในใบรับรองของอุปกรณ์ มันเข้ารหัสโทเค็นโดยใช้โทเค็นคีย์และส่งกลับไปยังอุปกรณ์ดังที่แสดงไว้ตรงกลางลูกศรชี้ไปทางขวา
ระบบส่งโทเค็นอุปกรณ์กลับไปยังแอปของคุณโดยเรียกแอปพลิเคชันของคุณ: didRegisterForRemoteNotificationsWithDeviceToken: delegate method
เมื่อได้รับโทเค็นแล้วแอปของคุณ (ภายในวิธีการมอบสิทธิ์) จะต้องส่งต่อไปยังผู้ให้บริการของคุณในรูปแบบไบนารีหรือเลขฐานสิบหก ผู้ให้บริการของคุณไม่สามารถส่งการแจ้งเตือนไปยังอุปกรณ์โดยไม่มีโทเค็นนี้ สำหรับรายละเอียดโปรดดูการลงทะเบียนเพื่อรับการแจ้งเตือนระยะไกลในการกำหนดค่าการสนับสนุนการแจ้งเตือนระยะไกล
สิ่งสำคัญ
โทเค็นอุปกรณ์ APN มีความยาวผันแปรได้ อย่าฮาร์ดโค้ดขนาดของมัน
เมื่อผู้ให้บริการของคุณส่งคำขอการแจ้งเตือนแบบพุชไปยัง APN จะมีโทเค็นอุปกรณ์ที่ระบุชุดอุปกรณ์แอปและอุปกรณ์ที่ไม่ซ้ำกัน ขั้นตอนนี้จะแสดงในลูกศร“ Token, Payload” ระหว่างผู้ให้บริการและ APN ในรูปที่ 6-7 APN จะถอดรหัสโทเค็นเพื่อรับรองความถูกต้องของคำขอและเพื่อกำหนดอุปกรณ์เป้าหมาย หาก APN ระบุว่าผู้ส่งและผู้รับถูกต้องตามกฎหมายระบบจะส่งการแจ้งเตือนไปยังอุปกรณ์ที่ระบุ
รูปที่ 1-7เส้นทางการแจ้งเตือนระยะไกลจากผู้ให้บริการไปยังอุปกรณ์
หลังจากอุปกรณ์ได้รับการแจ้งเตือน (และหลังจากขั้นตอนสุดท้ายที่แสดงในรูปที่ 1-7) ระบบจะส่งต่อการแจ้งเตือนระยะไกลไปยังแอพของคุณ
อ้างถึงบริการแจ้งเตือนแบบพุชของ Apple
ตอนนี้ดูที่นี่เพื่อทำความเข้าใจขั้นตอนทางเทคนิค: วิธีใช้ Apple Push Notification Service บนแอปพลิเคชัน iOS