ios - 推送通知到达时应用程序角标(Badge)图标未更新

标签 ios iphone notifications push-notification badge

我已经查看了关于 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还有更多,但我有同样的问题,当应用程序在后台并且推送通知到达时,应用程序角标(Badge)图标没有更新。

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

-(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];

    }
 }

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

最佳答案

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

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

$badges=(int)$cntmsg;

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

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

关于ios - 推送通知到达时应用程序角标(Badge)图标未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23931484/

相关文章:

ios - 如何仅在 watch 应用程序中支持可操作的通知?

iphone - UIGestureRecognizer 未触发的可能原因?

iphone - Xcode显示未知字符

使用 Play Framework 在 Heroku 中访问数据库时间

ios - 一个活跃的 iOS 应用程序可以知道何时显示另一个应用程序的推送通知吗?

ios - iOS 7-10 收到通知时如何显示本地通知?

ios - 避免在 Restkit 路由器上进行 uri 编码

ios - 如何以编程方式在 View Controller 之间传递数据?我想将 UITextfield 数据传递给另一个 View Controller

ios - vImage_Buffer 没有渲染到 CGContext,为什么?

ios - 以编程方式更改 imageview 高度 ios