ios - APNs : Change the app badge while the app is the foreground

标签 ios apple-push-notifications foreground

我有一个应用程序和一个服务器端推送发送器。当新通知到达时,服务器会发送一个空的推送消息,其中只包含角标(Badge)更新。

当应用程序在后台时,角标(Badge)更新成功。但是,当应用程序位于前台时,角标(Badge)根本不会更新 - 推送会传送到应用程序,而应用程序会丢弃它。

明显的解决方法是从应用程序中捕获推送并更新角标(Badge)。由于某些技术原因,这需要一些时间才能生效(开发时间、应用商店检查时间、不经常升级的用户等)

我想知道是否有办法绕过这个并使用服务器端 APNs 推送更新角标(Badge),而不管应用程序状态、前景或背景如何。

有没有办法在应用程序处于前台时使用推送消息更改 iOS 应用程序角标(Badge),而无需处理来自应用程序内部的推送通知?

最佳答案

这只能通过在您的 AppDelegate

中定义的应用程序委托(delegate)方法来实现

在 iOS 10 中已弃用

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

或者,

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

上面的委托(delegate)函数在应用程序处于前台时被调用,您可以解码您的推送有效负载并分配应用程序角标(Badge),如下所示

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

干杯。

关于ios - APNs : Change the app badge while the app is the foreground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41335547/

相关文章:

ios - UIButton 没有更新?

iOS 13 用户默认值 : app crash on start on some devices

ios - 为什么通过 Firebase FCM 从 Web API 定向到特定 iOS 设备的推送通知没有到达?

Android NFC前台调度问题

java - 使用字符串设置 JLabel 的颜色

ios - 在应用描述中添加应用内购买价目表

ios - Mac 10.14、10.14 vm 的 xcode 无法在 azure 托管代理上启动模拟器以进行 native 构建

iOS 推送通知证书

ios - 我的应用程序是否显示第二次通知 iOS 9

java - 如何在不创建新对象的情况下向 JLabel 添加多个字符串