2016-12-26 9 views
1

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

Когда приложение находится в фоновом режиме, значок успешно обновляется. Однако, когда приложение находится на переднем плане, значок не обновляется вообще - нажатие доставляется в приложение, которое отбрасывает его.

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

Интересно, есть ли способ обойти это и обновить значок с помощью APN на стороне сервера, независимо от состояния приложения, переднего плана или фона.

Есть ли способ изменить значок приложения iOS с помощью push-сообщения, когда приложение находится на переднем плане, без обработки push-уведомления из приложения?

+1

Только через приложение '- (void): (UIApplication *) приложение didReceiveRemoteNotification: (NSDictionary *) функция userInfo' в' AppDelegate', функция будет вызвана, когда получит уведомление в Foreground, прочитает значение из полезной нагрузки и присвойте '[UIApplication sharedApplication] .applicationIconBadgeNumber = BADGEVALUE;' – iphonic

+0

@iphonic Итак, нет способа сделать это без изменения кода на стороне клиента? Благодарю. Вы хотите написать свой комментарий в качестве полного ответа? –

ответ

2

Это может быть достигнуто только с помощью методов приложения делегата, определенных в AppDelegate

Запрещены в ИО 10

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo; 

или

- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; 

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

[UIApplication sharedApplication].applicationIconBadgeNumber=[[userInfo objectForKey:@"aps"] valueForKey:@"badge"]; 

Cheers.