На цю тему існує багато ниток стаціонарних потоків, але я все ще не знайшов хорошого рішення.
Якщо додаток не в фоновому режимі, можна перевірити launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
в application:didFinishLaunchingWithOptions:
виклику , щоб побачити , якщо він відкритий з повідомленням.
Якщо програма знаходиться у фоновому режимі, усі публікації пропонують використовувати application:didReceiveRemoteNotification:
та перевірити стан програми. Але коли я експериментував (а також, як випливає з назви цього API), цей метод викликається при отриманні сповіщення замість натискання.
Отже, проблема полягає в тому, що якщо додаток запущено, а потім на фоновому режимі, і ви знаєте, що повідомлення отримано від application:didReceiveNotification
( application:didFinishLaunchWithOptions:
не спрацьовує в цьому пункті), як дізнатися, чи користувач відновив додаток, натиснувши сповіщення або просто натиснувши на значок програми? Оскільки, якщо користувач натиснув сповіщення, очікується відкрити сторінку, згадану в цьому сповіщенні. Інакше не повинно.
Я міг би використовувати handleActionWithIdentifier
для користувацьких сповіщень про дії, але це спрацьовує лише тоді, коли натискається спеціальна кнопка дії, а не тоді, коли користувач натискає на основну частину сповіщення.
Дякую.
Редагувати:
прочитавши одну відповідь нижче, я подумав, що таким чином я можу уточнити своє питання:
Як можна диференціювати ці два сценарії:
(A) 1.app переходить на другий план; 2. отримане повідомлення; 3. користувачі натискає на повідомлення; 4. додаток виходить на перший план
(B) 1.app переходить на другий план; 2. отримане повідомлення; 3. користувач ігнорує сповіщення та торкається піктограми програми пізніше; 4. додаток виходить на перший план
Оскільки application:didReceiveRemoteNotification:
в обох випадках спрацьовує на етапі 2.
Або його слід application:didReceiveRemoteNotification:
запускати лише на кроці 3 для (A), але я якось неправильно налаштував свою програму, тому я бачу це на кроці 2?