Тихие push-уведомления не запускают взаимодействие с пользователем. Когда полезная нагрузка молчаливого уведомления включает в себя ключи для взаимодействия с пользователем, что-то идет не так - iOS не может понять, намерено ли что-то представить пользователю или сохранить уведомление в безмолвном режиме и обработать его без взаимодействия с пользователем. Иногда тихое уведомление может работать, в других случаях оно может быть представлено как обычное уведомление с участием пользователя. Это может быть одно или другое, а не оба.
Если тихая нажимная клавиша content-available
присутствует в полезной нагрузке aps
, то ключей alert
, sound
или badge
не должно быть.
Вы можете использовать мой Инструмент проверки полезных данных push-уведомлений , чтобы проверить содержание вашего уведомления. У полезной нагрузки, которую вы разместили в своем вопросе, есть несколько проблем - ключ aps
должен содержать только ключи Apple, определенные в Генерация push-уведомлений . Все ваши пользовательские ключи и значения должны находиться вне объекта aps
.
application:didReceiveRemoteNotification:fetchCompletionHandler:
будет вызываться только для тихих push-уведомлений. Если полезная нагрузка уведомления содержит как content-available
, так и , то один или несколько из alert
, sound
или badge
iOS не будет знать, какой метод вызывать, и вы можете увидеть несогласованное поведение.
Если вы просто пытаетесь показать не молчаливое уведомление, вам не нужно вводить application:didReceiveRemoteNotification:fetchCompletionHandler:
. Вместо этого реализуйте application:didReceiveRemoteNotification:
для iOS 9 и userNotificationCenter:willPresentNotification:withCompletionHandler:
для iOS 10 и более поздних версий.
Что касается тихих уведомлений и неактивного состояния приложения, здесь делать нечего особенного. Тихие уведомления предназначены для того, чтобы «намекнуть» приложению, что оно должно обновить содержимое. При получении уведомления в режиме без вывода сообщений приложение должно обработать обновление содержимого в течение 30 секунд, а затем вызвать обработчик завершения выборки. Когда iOS выполняет обработчик завершения выборки, она делает новый снимок восстановления обновленного пользовательского интерфейса. Это происходит, даже когда приложение неактивно.