#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.