繁体   English   中英

推送通知到达时,应用程序徽章图标未更新

[英]application badge icon not updated when push notification arrives

我已经查看了有关在午夜更新应用程序徽章的问题, 其中包含以下选项:应用程序未启动或在后台运行,徽章编号可能会减少,并且在通知到达时更改应用程序图标徽章,并且当应用程序关闭 推送通知徽章计数不更新更新徽章图标更多,但我有同样的问题,当应用程序在后台和推送通知到达时,应用程序徽章图标不更新。

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

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

    }
 }

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

最后这个问题解决了。 确实,当app处于后台时,没有一个动作被触发。 所以当app在后台时, appDelegate didReceiveRemoteNotification方法也不会被触发。

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

$badges=(int)$cntmsg;

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

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

通常在所有应用中,未读通知计数都在服务器中维护。 当服务器向特定设备发送推送通知时,令牌服务器会发送徽章计数以及有效负载

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM