11
การแจ้งเตือนแบบพุช iOS: จะตรวจสอบได้อย่างไรว่าผู้ใช้แตะการแจ้งเตือนเมื่อแอปอยู่ในพื้นหลัง
มีเธรด 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 สำหรับ …