【问题标题】:application badge icon not updated when push notification arrives推送通知到达时应用程序徽章图标未更新
【发布时间】:2014-07-18 20:22:56
【问题描述】:

我在Updating application badge at midnight with options: app not launched or in background, badge number can decrease 上看过问题 和Changing application icon badge when notification arrivesPush Notification Badge Count Not UpdatingUpdate badge icon when app is closed 等等,但我遇到的问题与当应用程序处于后台并且推送通知到达时,应用程序徽章图标未更新时相同。

我已经检查了所有的可能性。我的代码是:

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

    UIApplicationState appState = UIApplicationStateActive;
    if ([application respondsToSelector:@selector(applicationState)]) {
        appState = application.applicationState;
    }

    for (id key in userInfo) {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    }

    NSLog(@"remote notification: %@",[userInfo description]);

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

    UIApplicationState state = [application applicationState];


    if (state == UIApplicationStateActive)
    {
        NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@""
                                                            message:message
                                                           delegate:self
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
        [alertView show];

    }
 }

是的,当应用程序处于前台时它工作正常,然后它显示警报正常。但是当应用程序在后台时,既没有发生任何事件,也没有更新应用程序徽章图标。我还设置了后台模式,如ios7.1: push notification badge update issue 所示,我还测试了应用程序在前台时应用程序徽章图标是否正确接收并打印在 NSLog 中。当应用程序在后台运行并且工作正常时,我需要将未读消息设置为徽章图标,但是当任何新的推送通知到达时应该更新它。请建议我选择。

【问题讨论】:

  • 必须从服务器端管理,而不是从iOS端管理。
  • @iPatel 是的,但是为什么设置了 aps->badge 时徽章图标没有更新?通知到达时,徽章图标应设置为 aps->badge 的值,并且应用程序无法处理通知,因为它在后台
  • 服务器端代码没问题,我已经测试过了。它给出了徽章计数的完美计数结果,我已经通过调试进行了检查,当应用程序处于前台时它给出了完美的结果。但是当通知到达并且应用程序处于后台时,它应该更新应用程序图标徽章。

标签: ios iphone notifications push-notification badge


【解决方案1】:

这个问题终于解决了。确实,当应用程序处于后台时不会触发任何操作。所以appDelegate 中的didReceiveRemoteNotification 方法在应用处于后台时也不会触发。

当任何新的推送通知到达设备时,iOS 会设置应用程序徽章图标。有效载荷与@rahulPatel 所说的相同。我对此几乎没有什么改变,因为 BADGE_COUNT 是从数据库中获取的,虽然它是 INTEGER,但考虑到字符串和字符串不被 iOS 采用,这就是为什么我的应用程序的徽章图标在通知到达时没有更新的原因。现在我的服务器端代码变成了这样:

$badges=(int)$cntmsg;

$body['aps'] = array(
                'alert' => $message,
                'sound' => 'default',
                'badge' => $badges
                //'msg_id'=> $msg_id
            );

所以通过将 count msg 更改为 (int) 它解决了我的问题。谢谢。

【讨论】:

  • 徽章计数器采用字符串格式。从服务器使它成为整数解决了我的问题。
【解决方案2】:

通常在所有应用程序中,未读通知计数都保存在服务器中。 当服务器向特定设备令牌发送推送通知时,服务器将徽章计数与有效负载一起发送

您的服务器逻辑需要跟踪正确的徽章计数并适当地发送。

{
    "aps" :  
    {
        "alert" : "Your notification message to show",
        "badge" : BADGE_COUNT ,
        "sound" : "sound.caf"
    }
}

【讨论】:

  • 是的,正如您在代码中显示的那样,从服务器端看是正确的。它每次都会发送更新的徽章计数。
  • 我收到推送通知作为远程通知:{ aps = { alert = " 点击查看消息。";徽章 = 34;声音=默认; }; }
  • 您是否厌倦了使用不同的 ios 设备进行检查?
  • 是的,拉胡尔,问题解决了......因为这个 BADGE_count 值从数据库中获取它变成了字符串,这就是问题
猜你喜欢
  • 2015-10-25
  • 2013-02-01
  • 2020-08-13
  • 1970-01-01
  • 2021-07-17
  • 2012-04-02
  • 2012-12-24
  • 2013-04-16
  • 2019-04-22
相关资源
最近更新 更多