В этой теме много потоков stackoverflow, но я до сих пор не нашел хорошего решения.
Если приложение не находится в фоновом режиме, я могу проверить launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
в application:didFinishLaunchingWithOptions:
вызов, чтобы узнать, открыт ли он из уведомления.
Если приложение находится в фоновом режиме, все сообщения предлагают использовать application:didReceiveRemoteNotification:
и проверить состояние приложения. Но когда я экспериментировал (а также, как указывает название этого API), этот метод вызывается, когда уведомление получено, а не постукивается.
Таким образом, проблема заключается в том, что приложение запускается, а затем заходит в фоновом режиме, и вы знаете, что уведомление получено из application:didReceiveNotification
(application:didFinishLaunchWithOptions:
не будет запускаться на данном этапе), откуда вы узнаете, возобновил ли пользователь приложение от нажатия на уведомление или просто нажав значок приложения? Поскольку, если пользователь прослушивает уведомление, ожидание заключается в том, чтобы открыть страницу, указанную в этом уведомлении. В противном случае это не должно быть.
Я могу использовать handleActionWithIdentifier
для уведомлений о специальных действиях, но это запускается только при нажатии на кнопку пользовательского действия, а не при нажатии пользователем основной части уведомления.
Спасибо.
EDIT:
после прочтения одного из ответов ниже, я подумал, что я могу уточнить свой вопрос:
Как мы можем различать эти 2 сценария:
(A) 1.app переходит к фону; 2. полученная информация; 3. пользовательский ответ на уведомление; 4. приложение переходит на передний план
(B) 1.app переходит на задний план; 2. полученная информация; 3. пользователь игнорирует уведомление и краны на значке приложения позже; 4. приложение переходит на передний план
Так как application:didReceiveRemoteNotification:
запускается в обоих случаях на шаге 2.
Или, если application:didReceiveRemoteNotification:
запускается только на шаге 3 для (A), но я как-то неправильно настроил свое приложение, поэтому я вижу его на шаге 2?