【问题标题】:APNs: Change the app badge while the app is the foregroundAPNs:在应用程序处于前台时更改应用程序徽章
【发布时间】:2017-05-11 04:08:18
【问题描述】:

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

当应用在后台时,徽章更新成功。但是,当应用程序处于前台时,徽章根本不会更新 - 推送被传递到应用程序,应用程序将其丢弃。

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

我想知道是否有办法绕过此问题并使用服务器端 APNs 推送更新徽章,而不管应用程序状态、前景或背景如何。

有没有办法在应用处于前台时使用推送消息更改 iOS 应用徽章,而无需从应用内部处理推送通知?

【问题讨论】:

  • 只有通过AppDelegate中的- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函数,在前台收到通知时才会调用该函数,从payload中读取值并赋值给[UIApplication sharedApplication].applicationIconBadgeNumber=BADGEVALUE;
  • @iphonic 所以不改变客户端代码就没有办法吗?谢谢。你想把你的评论写成完整的答案吗?

标签: ios apple-push-notifications foreground


【解决方案1】:

这只能通过您的 AppDelegate

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

在 iOS 10 中已弃用

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

或者,

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

当应用程序在前台时调用上述委托函数,您可以解码您的推送有效负载并按如下方式分配应用程序徽章

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

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 2022-10-06
    • 2019-10-26
    • 1970-01-01
    • 2019-08-20
    • 2012-12-24
    • 2013-02-01
    • 2013-02-14
    相关资源
    最近更新 更多