当前位置: 首页 > 知识库问答 >
问题:

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

洪越泽
2023-03-14

我已经看过关于午夜更新应用程序徽章的问题,选项有:应用程序未启动或在后台,当通知到达时,徽章编号可以减少并更改应用程序图标徽章;当应用程序关闭时,推送通知徽章计数不更新并更新徽章图标;等等。但我遇到的问题与应用程序在后台且推送通知到达时相同,应用程序徽章图标不更新。

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

-(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所示:推送红点更新问题,我还测试了应用程序徽章图标接收正确,并在应用程序处于前台时打印在NSLog中。我需要设置它未读消息作为徽章图标时,应用程序是在后台和它的工作罚款,但它应该更新时,任何新的消息推送到达。请建议我的选项。

共有2个答案

松昱
2023-03-14

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

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

{
    "aps" :  
    {
        "alert" : "Your notification message to show",
        "badge" : BADGE_COUNT ,
        "sound" : "sound.caf"
    }
}
颜实
2023-03-14

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

当任何新推送通知到达设备时,iOS会设置应用程序徽章图标。有效载荷与@rahulPatel所说的相同。我很少改变,因为BADGEZY计数是从数据库中提取的,虽然它是整数,但是考虑到字符串和字符串不是由IOS获取的,这就是为什么当通知到达时,我的应用程序的徽标图标没有更新。现在,我的服务器端代码如下所示:

$badges=(int)$cntmsg;

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

因此,通过将Countmsg更改为(int),它解决了我的问题。谢谢。

 类似资料:
  • 当我的数据库记录在服务器上更新时,它会通过FCM向Android应用程序用户发送推送通知。通知已发送,但设备上的徽章计数未更新。如何设置更改徽章应用程序图标的通知?

  • 在我的应用程序中,我使用firebase推送通知。我想为所有版本的设备(如Whatsapp)显示应用图标徽章(应用图标上的点), 在Android8中,徽章仅通过打开设置(在手机中)显示- 默认情况下,我需要打开此设置

  • 我的应用程序使用推送通知。当我将应用程序安装到设备时,应用程序图标会显示推送通知徽章。徽章编号保持不变,不会随新通知更新。 安装应用程序后,只有当我的应用程序收到实际推送通知时,是否有办法不显示徽章?

  • 我需要在我的应用程序图标上显示徽章 我所尝试的: > 2.我已经浏览了许多已经在stackoverflow上的可用答案,如 如何在应用程序启动器图标中显示通知计数 我们可以在android应用程序图标(如iphone)上显示徽章号码吗? 如何在Redmi上使用应用程序图标显示徽章计数? 在android应用程序图标上添加未读通知徽章 有没有办法在Android系统中为应用程序图标添加徽章? 所有这

  • 当应用程序在后台时,如何更新包含数据负载的Firebase推送通知?有没有办法在通知中指定通知id给Firebase API? 完整的项目在github https://github.com/akshatashan/FireBaseCloudMessagingDemo中

  • 我已经得到推送通知工作,并设法更新图标徽章计数时,应用程序被带到前台。 但我对此有点困惑。。。iPhone收到通知,弹出消息显示激活我的应用程序,徽章仅在我启动应用程序后更新。 就用户体验而言,这听起来并不正确。我的理解是,徽章计数应该通过递增计数通知用户需要采取的行动,但这要等到应用程序运行的后期才会发生。 那么,当应用程序在后台收到推送通知时,有没有办法告诉它更新徽章计数? 请注意,我的应用程