Có rất nhiều chủ đề stackoverflow liên quan đến chủ đề này, nhưng tôi vẫn không tìm thấy giải pháp tốt.
Nếu ứng dụng không có trong nền, tôi có thể kiểm tra launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
trong application:didFinishLaunchingWithOptions:
cuộc gọi để xem nếu nó mở từ một thông báo.
Nếu ứng dụng đang ở chế độ nền, tất cả các bài đăng đề xuất sử dụng application:didReceiveRemoteNotification:
và kiểm tra trạng thái ứng dụng. Nhưng như tôi đã thử nghiệm (và cũng như tên của API này gợi ý), phương thức này được gọi khi nhận được thông báo, thay vì được nhấn.
Vì vậy, vấn đề là, nếu ứng dụng được khởi chạy và sau đó ở chế độ nền và bạn biết thông báo được nhận từ application:didReceiveNotification
( application:didFinishLaunchWithOptions:
sẽ không kích hoạt tại thời điểm này), làm cách nào để bạn biết liệu người dùng đã tiếp tục ứng dụng từ biểu tượng ứng dụng? Bởi vì nếu người dùng nhấn vào thông báo, kỳ vọng là sẽ mở trang được đề cập trong thông báo đó. Nếu không thì không nên.
Tôi có thể sử dụng handleActionWithIdentifier
cho thông báo hành động tùy chỉnh, nhưng điều này chỉ được kích hoạt khi nhấn vào nút tác vụ tùy chỉnh, không phải khi người dùng nhấn vào nội dung chính của thông báo.
Cảm ơn.
BIÊN TẬP:
sau khi đọc một câu trả lời dưới đây, tôi nghĩ theo cách này tôi có thể làm rõ câu hỏi của mình:
Làm thế nào chúng ta có thể phân biệt 2 tình huống này:
(A) 1. ứng dụng chuyển sang nền; 2. thông báo nhận được; 3. người dùng chạm vào thông báo; 4. ứng dụng đi vào nền trước
(B) 1. ứng dụng chuyển sang nền; 2. thông báo nhận được; 3. người dùng bỏ qua thông báo và chạm vào biểu tượng ứng dụng sau đó; 4. ứng dụng đi vào nền trước
Kể từ application:didReceiveRemoteNotification:
được kích hoạt trong cả hai trường hợp ở bước 2.
Hoặc, chỉ nên application:didReceiveRemoteNotification:
được kích hoạt ở bước 3 cho (A), nhưng bằng cách nào đó tôi đã định cấu hình ứng dụng của mình sai nên tôi thấy nó ở bước 2?