เมื่อสร้างแล้วโทเค็นอุปกรณ์แจ้งเตือนแบบพุชจะเปลี่ยนไปหรือไม่?
ตัวอย่างเมื่อมีการอัปเดตแอป? หรือในกรณีอื่น ๆ สามารถเปลี่ยนแปลงได้ ??
เมื่อสร้างแล้วโทเค็นอุปกรณ์แจ้งเตือนแบบพุชจะเปลี่ยนไปหรือไม่?
ตัวอย่างเมื่อมีการอัปเดตแอป? หรือในกรณีอื่น ๆ สามารถเปลี่ยนแปลงได้ ??
คำตอบ:
จาก[เอกสาร Apple ApplePushService] 2
รูปแบบของความเชื่อถือโทเค็นขั้นตอนนี้ทำให้มั่นใจได้ว่ามีเพียง APN เท่านั้นที่สร้างโทเค็นซึ่งจะให้เกียรติในภายหลังและสามารถรับรองได้ว่าโทเค็นที่อุปกรณ์ส่งมอบให้นั้นเป็นโทเค็นเดียวกับที่ได้จัดเตรียมไว้ก่อนหน้านี้สำหรับอุปกรณ์นั้น ๆ - และเท่านั้น สำหรับอุปกรณ์นั้น
หากผู้ใช้กู้คืนข้อมูลสำรองไปยังอุปกรณ์ใหม่หรือติดตั้งระบบปฏิบัติการใหม่โทเค็นอุปกรณ์จะเปลี่ยนไป
เอกสารอย่างเป็นทางการของ Apple ยังไม่ชัดเจนในประเด็นนี้ สิ่งที่ฉันสังเกตเห็นคือโทเค็นไม่แปรผันสำหรับอุปกรณ์แอปพลิเคชันและโดเมนที่กำหนด (การผลิตเทียบกับแซนด์บ็อกซ์) ฉันเชื่อว่าสิ่งนี้จะต้องเป็นจริงเพื่อให้ระบบทำงานได้อย่างน่าเชื่อถือ พิจารณาสถานการณ์ที่การอัปเดตแอปพลิเคชันทริกเกอร์โทเค็น APN ใหม่ ถ้าฉันใช้แอพคล้าย Twitter ใหม่ที่ยิ่งใหญ่ที่สุดโดยเปิดใช้งานการแจ้งเตือนจะเกิดอะไรขึ้นเมื่อฉันอัปเดตแอปจาก iTunes ฉันควรคาดหวังหรือไม่ว่าจะยังคงได้รับการแจ้งเตือนแม้ว่าฉันจะไม่ได้เรียกใช้แอปพลิเคชันตั้งแต่ฉัน "ซิงค์" อัปเดตกับอุปกรณ์ของฉัน การเปลี่ยนแปลงแอปพลิเคชันไม่สามารถส่งผลกระทบต่อระบบ APN เนื่องจากระบบปฏิบัติการสามารถรับการแจ้งเตือนในนามของคุณแม้ว่าคุณจะไม่ได้เรียกใช้แอปที่อัปเดตก็ตาม
เพื่อความชัดเจนApple ระบุว่า "แอปพลิเคชันควรลงทะเบียน [กับเซิร์ฟเวอร์ APN] ทุกครั้งที่เปิดตัวและให้โทเค็นปัจจุบันแก่ผู้ให้บริการ" ฉันเห็นด้วยสุดใจ; การทำเช่นนี้จะปกป้องแอปพลิเคชันของคุณจากสมมติฐานที่ไม่ดีหรือสถานการณ์ที่ผิดปกติ
หนึ่งในคำตอบของโทเค็นการแจ้งเตือนแบบพุชไม่ซ้ำกันในทุกแอพสำหรับอุปกรณ์เครื่องเดียว บ่งชี้ว่าโทเค็นอุปกรณ์ไม่ซ้ำกันสำหรับ "การติดตั้งระบบปฏิบัติการ"; และการกู้คืนจากการสำรองข้อมูลไปยังอุปกรณ์จะรักษาโทเค็น แต่การล้างข้อมูลอุปกรณ์จะทำให้ได้รับโทเค็นใหม่ สิ่งนี้จะสอดคล้องกับความตั้งใจของ Apple ในการใช้งานและความเป็นส่วนตัวอย่างราบรื่น: การล้างข้อมูลอุปกรณ์นั้นรุนแรงพอที่จะรับประกันการเชื่อมโยงใหม่ แต่ผู้ใช้ที่กู้คืนรูปภาพหลังจากการอัปเดตระบบปฏิบัติการต้องการเก็บการแจ้งเตือนที่มีอยู่ หากฉันจำการอัปเดต iOS5 ล่าสุดบน iPad ของฉันฉันจะกู้คืนข้อมูลสำรองล่าสุดหลังจากอัปเกรดดังนั้นสิ่งนี้จะรักษาความสอดคล้องของโทเค็นการแจ้งเตือนของฉัน [แก้ไข: การเรียกคืนการสำรองข้อมูลไปยังที่แตกต่างกัน อุปกรณ์จะไม่ทำซ้ำโทเค็น]
ข้อแม้: ฉันไม่มีความรู้ที่ชัดเจนในเรื่องนี้มีเพียงประสบการณ์ที่สมเหตุสมผลในการทำงานกับ APN (ในฐานะนักพัฒนาบุคคลที่สาม) เช่นเคยวิธีที่ดีที่สุดคือการตรวจสอบสมมติฐานของคุณ
เมื่อเร็ว ๆ นี้ฉันได้มีโอกาส> พูดคุยกับวิศวกรของ Apple และ b> ทำการทดสอบในโลกแห่งความเป็นจริงและฉันต้องการนำเสนอผลลัพธ์:
เพื่อให้สมบูรณ์เมื่อฉันพูดถึงการส่งคืนโทเค็น APN ฉันสมมติว่าบริบทของตัวระบุ / แอปพลิเคชันบันเดิลชุดเดียว
ประการแรกวิศวกรของ Apple กล่าวว่าไม่ควรเป็นไปได้ที่อุปกรณ์สองเครื่องจะส่งคืน APN เดียวกัน แม้ว่าจะมีความคิดเห็นด้านล่างฉันยังไม่สามารถระบุสถานการณ์ที่ทำให้เกิดความล้มเหลวได้
ประการที่สองนี่คือลำดับและผลลัพธ์ของการทดสอบการอัพเกรด:
เริ่มต้นด้วย iOS4 ที่ติดตั้งบน iPhone4; อุปกรณ์สำรองข้อมูลใน iTunes
อัปเกรดเป็น iOS5
จากการทดสอบก่อนหน้านี้ฉันรู้ว่าโทเค็น APN แตกต่างไปจากเดิม
คืนค่าข้อมูลสำรองไปยังอุปกรณ์
โทเค็น APN จะเหมือนกับขั้นตอนที่ 1
รีเซ็ต iOS (ล้างอุปกรณ์)
โทเค็น APN จะเปลี่ยนไป
สำรองข้อมูลโทรศัพท์เครื่องอื่นไปยัง iTunes และกู้คืนข้อมูลสำรองนั้นไปยังอุปกรณ์ทดสอบ โดยพื้นฐานแล้วฉันกำลังกู้คืนข้อมูลสำรอง "ผิด" ราวกับว่าฉันกำลังเปลี่ยนโทรศัพท์
โทเค็น APN เปลี่ยนแปลงอีกครั้ง นอกจากนี้ยังมีความแตกต่างและไม่ตรงกับโทเค็นทั้งโทเค็นดั้งเดิมหรือโทเค็น "โคลน"
กู้คืนข้อมูลสำรองที่ "ถูกต้อง" ไปยังอุปกรณ์
ตอนนี้โทเค็น APN เหมือนกับขั้นตอนที่ 1
สุดท้ายฉันอัปเกรดโทรศัพท์เป็น iOS6 (beta2) กู้คืนข้อมูลสำรองและทดสอบอีกครั้ง ตามที่คาดไว้โทเค็นยังคงจับคู่โทเค็นในขั้นตอนที่ 1
ณ จุดนี้ฉันค่อนข้างมั่นใจว่าโทเค็น APN ไม่สามารถทำซ้ำระหว่างอุปกรณ์ต่างๆได้ บางทีสิ่งนี้อาจเกิดขึ้นเนื่องจากข้อผิดพลาดใน iOS เวอร์ชันก่อนหน้า แต่ฉันมั่นใจว่า iOS5 (และน่าจะเป็น iOS6) จัดการโทเค็น APN ได้อย่างถูกต้อง
ฉันเพิ่งรู้ว่าฉันไม่ได้เพิ่มสิ่งนี้โทเค็นอุปกรณ์จะเปลี่ยนไป นักพัฒนาของ Apple คนหนึ่งแชร์กับฉันว่าโทเค็นหมดอายุจริง (ฉันคิดว่าหลังจาก 2 ปี) สำหรับวัตถุประสงค์หลายประการนี่เป็นเวลานานพอที่จะคิดได้ว่าไม่แปรผัน
[ฉันไม่กังวลถ้าฉันต้องอัปเดตสคริปต์ทดสอบด้วยโทเค็นใหม่ทุกๆสองปีโดยเฉพาะอย่างยิ่งเมื่อฉันเปลี่ยนโทรศัพท์ทุกปี]
ฉันเพิ่งทดสอบกับ iOS9 และ APN Push token จะเปลี่ยนแปลงหากฉันติดตั้งแอพใหม่
ใช่โทเค็นอุปกรณ์สามารถเปลี่ยนแปลงได้
ทุกครั้งที่แอปของคุณได้รับโทเค็นควรจัดเก็บโทเค็นไว้ จากนั้นเมื่อใดก็ตามที่ได้รับโทเค็นใหม่ (ซึ่งจะเกิดขึ้นในที่สุด) ให้เปรียบเทียบโทเค็นใหม่กับโทเค็นที่เก็บไว้และหากแตกต่างกัน:
nil
)ตามความเป็นจริงแล้วขั้นตอนสุดท้ายนั้นน่าจะไม่ใช่เรื่องเล็กน้อย ตัวอย่างเช่นหากคุณมีบริการที่ส่งการแจ้งเตือนสภาพอากาศไปยังโทเค็นของอุปกรณ์ตามรหัสไปรษณีย์ที่อุปกรณ์นั้นสมัครใช้งานคุณจะต้องส่งผ่านold_token
และnew_token
บริการดังกล่าวเพื่อให้สามารถอัปเดตการจัดส่งได้
Ergo โดยทั่วไปแล้ว 100% ของ API ที่ยอมรับ "โทเค็นอุปกรณ์" จะต้องมีUPDATE
สิ่งอำนวยความสะดวกบางอย่างสำหรับโทเค็นนั้นด้วย การไม่สร้างสิ่งนี้คือการสร้างสำหรับการแจ้งเตือนที่ส่งผิดและไม่ได้ส่ง
โทเค็นอุปกรณ์เปลี่ยนจาก iOS 8 ขึ้นไป
โปรดดูข้อความด้านล่างจากเว็บไซต์ Apple การลงทะเบียนกำหนดเวลาและจัดการการแจ้งเตือนของผู้ใช้
โทเค็นอุปกรณ์เป็นกุญแจสำคัญในการส่งข้อความ Push ไปยังแอปของคุณบนอุปกรณ์บางเครื่อง โทเค็นอุปกรณ์สามารถเปลี่ยนแปลงได้ดังนั้นแอปของคุณจำเป็นต้องลงทะเบียนใหม่ทุกครั้งที่เปิดตัวและส่งโทเค็นที่ได้รับกลับไปยังเซิร์ฟเวอร์ของคุณ หากคุณไม่สามารถอัปเดตโทเค็นของอุปกรณ์การแจ้งเตือนระยะไกลอาจไม่ส่งไปยังอุปกรณ์ของผู้ใช้ โทเค็นอุปกรณ์จะเปลี่ยนแปลงเสมอเมื่อผู้ใช้กู้คืนข้อมูลสำรองไปยังอุปกรณ์หรือคอมพิวเตอร์เครื่องใหม่หรือติดตั้งระบบปฏิบัติการใหม่ เมื่อย้ายข้อมูลไปยังอุปกรณ์หรือคอมพิวเตอร์เครื่องใหม่ผู้ใช้ต้องเปิดแอปของคุณหนึ่งครั้งก่อนที่จะส่งการแจ้งเตือนระยะไกลไปยังอุปกรณ์นั้นได้
ฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึงเนื่องจากไม่มีใครทำเช่นนั้นโทเค็นจะเปลี่ยนไปหลังจากที่คุณโทรunregisterForRemoteNotifications
ไปแล้ว เมื่อคุณโทรregisterForRemoteNotifications
ครั้งต่อไปโทเค็นจะแตกต่างกัน ฉันไม่พบการยืนยันใด ๆ ในเอกสารของ Apple แต่ฉันเห็นพฤติกรรมดังกล่าวด้วยตัวเอง โปรดระลึกไว้เสมอ
ไม่ควรเปลี่ยนแปลงเว้นแต่ว่าแอปของคุณจะถูกกู้คืนไปยังอุปกรณ์เครื่องใหม่ (ณ จุดนี้ระบบจะไม่ขอให้ยอมรับการแจ้งเตือนแบบพุชอีกครั้งและจะส่งสายที่ลงทะเบียนให้คุณ ณ จุดที่คุณควรยอมรับโทเค็นใหม่)
แต่ Apple ไม่รับประกันว่าจะไม่มีวันเปลี่ยนแปลง (ด้วยเหตุนี้เอกสารจึงไม่เคยกล่าวถึง) คุณดีกว่าโปรแกรมที่แย่ที่สุดและคิดว่าวันหนึ่งอาจมีการเปลี่ยนแปลง นอกจากนี้การส่งโทเค็นไปยังเซิร์ฟเวอร์ของคุณเป็นประจำยังช่วยให้คุณสามารถลบโทเค็นที่ไม่ได้ลงทะเบียนมาสักระยะหนึ่งและอาจจะถอนการติดตั้งแอปของคุณหรือหมดความสนใจไปสักพักแล้ว (และเอกสารประกอบก็ระบุว่าสิ่งนี้เป็นพฤติกรรมที่ต้องการ!)
จาก - Apple Docs
APN สามารถออกโทเค็นอุปกรณ์ใหม่ได้ด้วยเหตุผลหลายประการ:
ผู้ใช้ติดตั้งแอปของคุณบนอุปกรณ์ใหม่
ผู้ใช้กู้คืนอุปกรณ์จากข้อมูลสำรอง
ผู้ใช้ติดตั้งระบบปฏิบัติการใหม่
เหตุการณ์อื่น ๆ ที่ระบบกำหนด
ด้วยเหตุนี้แอปจึงต้องขอโทเค็นอุปกรณ์ในเวลาเปิดตัว
นอกจากนี้:
สำคัญ
โทเค็นอุปกรณ์ APN มีความยาวผันแปรได้ อย่าฮาร์ดโค้ดขนาดของมัน
ลิงค์ล้าสมัยอย่างรวดเร็วด้วย apple! ดังนั้นฉันกำลังอ้างถึงสิ่งที่ดูเหมือนจะชัดเจนในตอนนี้:
อย่าแคชโทเค็นอุปกรณ์ในแอปของคุณ ให้รับจากระบบเมื่อคุณต้องการแทน APN จะออกโทเค็นอุปกรณ์ใหม่ให้กับแอปของคุณเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น โทเค็นอุปกรณ์รับประกันว่าจะแตกต่างกันตัวอย่างเช่นเมื่อผู้ใช้กู้คืนอุปกรณ์จากข้อมูลสำรองเมื่อผู้ใช้ติดตั้งแอปของคุณบนอุปกรณ์เครื่องใหม่และเมื่อผู้ใช้ติดตั้งระบบปฏิบัติการใหม่ การดึงโทเค็นแทนที่จะใช้แคชช่วยให้มั่นใจได้ว่าคุณมีโทเค็นอุปกรณ์ปัจจุบันที่จำเป็นสำหรับผู้ให้บริการของคุณในการสื่อสารกับ APN เมื่อคุณพยายามดึงโทเค็นอุปกรณ์ แต่ไม่มีการเปลี่ยนแปลงวิธีการดึงข้อมูลจะส่งคืนอย่างรวดเร็ว
อ้างอิงถึง เนื้อหาการแจ้งเตือนแบบพุชของ Apple
โทเค็นอุปกรณ์เป็นกุญแจสำคัญในการส่งข้อความ Push ไปยังแอปของคุณบนอุปกรณ์บางเครื่อง โทเค็นอุปกรณ์สามารถเปลี่ยนแปลงได้ดังนั้นแอปของคุณจำเป็นต้องลงทะเบียนใหม่ทุกครั้งที่เปิดตัวและส่งโทเค็นที่ได้รับกลับไปยังเซิร์ฟเวอร์ของคุณ หากคุณไม่สามารถอัปเดตโทเค็นของอุปกรณ์การแจ้งเตือนระยะไกลอาจไม่ส่งไปยังอุปกรณ์ของผู้ใช้ โทเค็นอุปกรณ์จะเปลี่ยนแปลงเสมอเมื่อผู้ใช้กู้คืนข้อมูลสำรองไปยังอุปกรณ์หรือคอมพิวเตอร์เครื่องใหม่หรือติดตั้งระบบปฏิบัติการใหม่ เมื่อย้ายข้อมูลไปยังอุปกรณ์หรือคอมพิวเตอร์เครื่องใหม่ผู้ใช้ต้องเปิดแอปของคุณหนึ่งครั้งก่อนที่จะส่งการแจ้งเตือนระยะไกลไปยังอุปกรณ์นั้นได้
อย่าแคชโทเค็นอุปกรณ์ รับโทเค็นจากระบบทุกครั้งที่คุณต้องการ หากแอปของคุณลงทะเบียนสำหรับการแจ้งเตือนระยะไกลก่อนหน้านี้การเรียกใช้เมธอด registerForRemoteNotifications อีกครั้งจะไม่ต้องเสียค่าใช้จ่ายเพิ่มเติมใด ๆ และ iOS จะส่งคืนโทเค็นอุปกรณ์ที่มีอยู่ไปยังผู้แทนแอปของคุณทันที นอกจากนี้ iOS จะเรียกใช้วิธีการมอบสิทธิ์ของคุณทุกครั้งที่โทเค็นอุปกรณ์เปลี่ยนแปลงไม่ใช่เพียงเพื่อตอบสนองต่อการลงทะเบียนแอปของคุณหรือลงทะเบียนใหม่
ตามลิงค์นี้โทเค็นอุปกรณ์
โทเค็นอุปกรณ์ที่รวมอยู่ในคำขอแต่ละรายการแสดงถึงข้อมูลประจำตัวของอุปกรณ์ที่รับการแจ้งเตือน APN ใช้โทเค็นของอุปกรณ์เพื่อระบุการรวมกันของแอพและอุปกรณ์ที่ไม่ซ้ำกัน นอกจากนี้ยังใช้เพื่อตรวจสอบการกำหนดเส้นทางของการแจ้งเตือนระยะไกลที่ส่งไปยังอุปกรณ์ ทุกครั้งที่แอปของคุณทำงานบนอุปกรณ์แอปจะดึงโทเค็นนี้จาก APN และส่งต่อไปยังผู้ให้บริการของคุณ ผู้ให้บริการของคุณจัดเก็บโทเค็นและใช้เมื่อส่งการแจ้งเตือนไปยังแอพและอุปกรณ์นั้น ๆ โทเค็นเองจะทึบแสงและคงอยู่โดยจะเปลี่ยนแปลงเฉพาะเมื่อข้อมูลและการตั้งค่าของอุปกรณ์ถูกลบ APN เท่านั้นที่สามารถถอดรหัสและอ่านโทเค็นอุปกรณ์ได้
ใช่มันสามารถเปลี่ยนแปลงได้ ตามหลักการแล้วเมื่อเราได้รับโทเค็นผ่านวิธีการโทรกลับ
- (เป็นโมฆะ) แอปพลิเคชัน: (UIApplication *) แอปพลิเคชั่น didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken
แอปควรลงทะเบียน / รีเฟรชโทเค็นบนเซิร์ฟเวอร์ระยะไกล เพื่อให้แน่ใจว่าโทเค็นบน APNS และเซิร์ฟเวอร์ของคุณยังคงซิงค์กันอยู่
ตามเอกสารที่แอปเปิ้ล ,
การรับและจัดการโทเค็นอุปกรณ์เฉพาะแอปทำงานดังนี้:
แอปของคุณลงทะเบียนด้วย APN สำหรับการแจ้งเตือนระยะไกลเมื่อจำเป็นต้องใช้โทเค็นอุปกรณ์ใหม่ APN จะสร้างขึ้นโดยใช้ข้อมูลที่มีอยู่ในใบรับรองของอุปกรณ์ เข้ารหัสโทเค็นโดยใช้โทเค็นคีย์และส่งคืนไปยังอุปกรณ์ดังที่แสดงไว้ตรงกลางลูกศรชี้ไปทางขวา ระบบส่งโทเค็นอุปกรณ์กลับไปที่แอปของคุณโดยเรียกแอปพลิเคชันของคุณ: didRegisterForRemoteNotificationsWithDeviceToken: delegate method เมื่อได้รับโทเค็นแอปของคุณ (ภายในวิธีการมอบสิทธิ์) จะต้องส่งต่อไปยังผู้ให้บริการของคุณในรูปแบบไบนารีหรือเลขฐานสิบหก ผู้ให้บริการของคุณไม่สามารถส่งการแจ้งเตือนไปยังอุปกรณ์โดยไม่มีโทเค็นนี้ สำหรับรายละเอียดโปรดดูการลงทะเบียนเพื่อรับการแจ้งเตือนระยะไกลในการกำหนดค่าการสนับสนุนการแจ้งเตือนระยะไกล
รีเลย์โทเค็นอุปกรณ์ในการติดตั้งแอป
ก็หมายความว่าถ้าคุณติดตั้งโปรแกรมที่จะเปลี่ยน ; มันไม่ได้ผลถ้าคุณทำจากข้อมูลสำรอง ecc อัพเกรด iOS ..
วิธีที่ถูกต้องในการใช้เพื่อหลีกเลี่ยงปัญหาใด ๆ คือรับสิ่งที่ระบุไว้ในการNSPAppDelegate
เปิดตัวแอปพลิเคชันแต่ละครั้งในวิธีการdidRegisterForRemoteNotificationsWithDeviceToken