Уведомления iOS Push с пустым словарем aps

Выполнение исследований, чтобы попытаться выбрать направление для типов уведомлений. Я хотел бы иметь возможность уведомлять свое приложение о том, что новые данные будут обновлены, но не будут беспокоить пользователя всплывающим/уведомляющим сообщением. Идея состоит в том, что те же уведомления выходят, если приложение открыто или закрыто, и когда появляется это "специальное" сообщение, и приложение открыто, он знает, что он извлекает данные.

Моя идея состояла в том, чтобы отправить пустой словарь aps, например, пример 5 в нижней части этого яблочного документа.

Мой вопрос в том, что произойдет, когда этот тип сообщения будет получен? В нем говорится, что он очистит значок, но какое-то сообщение по умолчанию появится пользователю? Или это будет полностью безмолвным?

Последующий вопрос, есть ли какой-нибудь лучший способ сделать это, кроме проверки того, работает ли приложение и сообщает моему серверу о отправке "специальных" полезных нагрузок (я бы хотел обработать все через push)?

Ответ 1

Если в словаре нет значка, предупреждения и звука, указанного в словаре (для клавиши "aps" ), сообщение по умолчанию не будет отображаться, и оно будет полностью тихим.

Посмотрите еще раз на пример 5 в документе, на который вы ссылаетесь. aps может быть пустым, и вы можете указать любые пользовательские данные, которые вы хотели бы использовать с ключом "acme2". Данные "acme2" являются примером того, где ваша "специальная" полезная нагрузка вашего сервера может находиться в полезной нагрузке JSON.

Вам не нужно сообщать серверу, что ваше приложение запущено. Сервер может отправлять специальные полезные данные через APNS независимо от того, работает ли ваше приложение или нет, и вы получите эту специальную полезную нагрузку одним из двух способов (предполагая, конечно, что push действительно достигает устройства... что не гарантируется):

  • Если ваше приложение находится на переднем плане, iOS не будет перехватывать уведомление. Вы получите уведомление в приложении для делегирования приложения: метод didReceiveRemoteNotification: (при условии, что ваш делегат приложения переопределяет метод).
  • Если iOS перехватил ваш push, тогда, когда вы решите запустить приложение в ответ на уведомление, вам нужно будет получить "push-словарь" в приложении для делегирования приложения: doneFinishLaunchingWithOptions: метод, как в следующем примере:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [self application:application didReceiveRemoteNotification:[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]];
}