มีเธรด stackoverflow มากมายเกี่ยวกับหัวข้อนี้ แต่ฉันยังไม่พบวิธีแก้ปัญหาที่ดี
หากแอปไม่ได้อยู่ในพื้นหลังที่ฉันสามารถตรวจสอบlaunchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
ในapplication:didFinishLaunchingWithOptions:
การเรียกร้องให้ดูว่ามันเปิดจากการแจ้งเตือน
หากแอปอยู่เบื้องหลังโพสต์ทั้งหมดแนะนำให้ใช้application:didReceiveRemoteNotification:
และตรวจสอบสถานะแอปพลิเคชัน แต่จากที่ฉันทดลอง (และตามชื่อของ API นี้) วิธีนี้จะถูกเรียกเมื่อได้รับการแจ้งเตือนแทนที่จะแตะ
ดังนั้นปัญหาคือหากเปิดแอปแล้วจึงเป็นพื้นหลังและคุณรู้ว่าได้รับการแจ้งเตือนจากapplication:didReceiveNotification
( application:didFinishLaunchWithOptions:
จะไม่เรียกใช้ ณ จุดนี้) คุณจะรู้ได้อย่างไรว่าผู้ใช้กลับมาใช้งานแอปต่อโดยแตะที่การแจ้งเตือนหรือเพียงแค่แตะ ไอคอนแอพ? เนื่องจากหากผู้ใช้แตะการแจ้งเตือนความคาดหวังคือการเปิดหน้าที่กล่าวถึงในการแจ้งเตือนนั้น มิฉะนั้นก็ไม่ควร
ฉันสามารถใช้handleActionWithIdentifier
สำหรับการแจ้งเตือนการดำเนินการที่กำหนดเองได้ แต่สิ่งนี้จะถูกทริกเกอร์ก็ต่อเมื่อมีการแตะปุ่มการทำงานที่กำหนดเองไม่ใช่เมื่อผู้ใช้แตะที่เนื้อหาหลักของการแจ้งเตือน
ขอบคุณ
แก้ไข:
หลังจากอ่านคำตอบด้านล่างฉันคิดว่าด้วยวิธีนี้ฉันสามารถชี้แจงคำถามของฉันได้:
เราจะแยกแยะสถานการณ์ 2 สถานการณ์นี้ได้อย่างไร:
(A) 1. แอปไปที่พื้นหลัง 2. ได้รับการแจ้งเตือน; 3. ผู้ใช้แตะที่การแจ้งเตือน 4. แอพเข้าสู่เบื้องหน้า
(B) 1. แอปไปที่พื้นหลัง 2. ได้รับการแจ้งเตือน; 3. ผู้ใช้ละเว้นการแจ้งเตือนและแตะที่ไอคอนแอพในภายหลัง 4. แอพเข้าสู่เบื้องหน้า
เนื่องจากapplication:didReceiveRemoteNotification:
ถูกทริกเกอร์ในทั้งสองกรณีในขั้นตอนที่ 2
หรือควรapplication:didReceiveRemoteNotification:
จะถูกเรียกใช้ในขั้นตอนที่ 3 สำหรับ (A) เท่านั้น แต่ฉันกำหนดค่าแอปผิดอย่างใดฉันจึงเห็นในขั้นตอนที่ 2