iOS 7 — тихие push-уведомления

#ios #xcode #push-notification #xcode5

#iOS #xcode #push-уведомление #xcode5

Вопрос:

Я настроил тихое push-уведомление, и все работает нормально, когда приложение находится на переднем плане или в фоновом режиме.

Проблема заключается в том, что приложение не активно / отключено (если я правильно понял, любое приложение автоматически отключается через 30 секунд, когда оно находится в фоновом режиме).

Моя полезная нагрузка выглядит следующим образом

 {"aps":{"alert":"test","sound":"bingbong.aiff","badge":33,"content-available":1}}
  

Все работает нормально, но когда я получаю это уведомление, значок значка не обновляется (рядом со значком приложения не отображается 33). Это первая проблема.

Вторая проблема заключается в том, что я не знаю, как получить уведомление, когда приложение отключено.

Моя идея состояла в том, чтобы вызвать службу, если значок значка был больше 1, таким образом, я знаю, что есть какие-то уведомления для загрузки, и я могу связаться с сервером, чтобы получить их.

Комментарии:

1. Согласно Apple , «система автоматически не запускает ваше приложение, если пользователь принудительно завершает его».

Ответ №1:

Для беззвучного push-уведомления не требуется указывать ни оповещение, ни звук, поскольку оно не отображается пользователю.

Тихое уведомление, которое вы получите через приложение:didReceiveRemoteNotification:fetchCompletionHandler::

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
     //load the new available content and call the completionhandler.
}
  

Значок должен отображаться, если у приложения правильные разрешения. Вы можете зарегистрировать свое приложение, чтобы значок отображался следующим образом:

 [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge];
  

В любом случае вам не нужно проверять номер бейджа, чтобы загрузить новый контент. Вы можете просто прикрепить к уведомлению свои собственные пары ключ-значение:

 {
    "aps": {
         "badge": 33,
         "content-available":1
    },
    "load-data": 1,
    "load-data-id": 12
}
  

Когда вы получите уведомление в приложении, просто проверьте свой параметр в словаре userInfo:

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    int loadData = [[userInfo objectForKey:@"load-data"] intValue];
    int loadDataId = [[userInfo objectForKey:@"load-data-id"] intValue];
}
  

Все это описано в Руководстве по программированию локальных и Push-уведомлений в документации iOS.