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

更新徽章与消息推送,而应用程序在后台

微生青青
2023-03-14

我已经得到推送通知工作,并设法更新图标徽章计数时,应用程序被带到前台。

但我对此有点困惑。。。iPhone收到通知,弹出消息显示激活我的应用程序,徽章仅在我启动应用程序后更新。

就用户体验而言,这听起来并不正确。我的理解是,徽章计数应该通过递增计数通知用户需要采取的行动,但这要等到应用程序运行的后期才会发生。

那么,当应用程序在后台收到推送通知时,有没有办法告诉它更新徽章计数?

请注意,我的应用程序不使用位置,并且我在通知注册请求中有UIRemoteNotificationTypeBadge

共有3个答案

冀嘉木
2023-03-14

当我们处于后台状态时,我们可以通过在推送通知包中发送“badge”参数来更改徽章编号。正如@rckoenes指出的,徽章的JSON参数必须是整数。

执行相同操作的示例PHP代码

// Create the payload body
$body['aps'] = array(
        'alert' => $message,
        'badge' => 1,
        'sound' => 'default'
        );

徽章=

孙化
2023-03-14

实际上,在iOS10中,远程通知将自动调用你的应用程序代表中的didReceive远程通知方法。

你有两种方法在后台更新徽章计数。
我也为我当前的应用程序做了这件事。您也不需要通知服务扩展。

将APS徽章密钥与您的有效载荷一起发送给APN。
这将根据您徽章有效载荷中的整数值更新徽章计数。

// Payload for remote Notification to APN
{
    "aps": {
        "content-available": 1,
        "alert": "Hallo, this is a Test.",
        "badge": 2, // This is your Int which will appear as badge number,
        "sound": default
    }
}

您可以切换您的application.application状态,并更新您的徽章计数时,应用状态在. background。但是,当发送到APN e. x时,您必须注意不要在通知负载中设置徽章密钥参数。

// Payload to APN as silent push notification
{
    "aps": {
        "content-available": 1
    }
}

这是我的工作代码,用于在APN有效负载中不使用徽章密钥的情况下更新徽章计数。

func application(_ application: UIApplication, didReceiveRemoteNotification 
   userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    print("APN recieved")
    // print(userInfo)
    
    let state = application.applicationState
    switch state {
        
    case .inactive:
        print("Inactive")
        
    case .background:
        print("Background")
        // update badge count here
        application.applicationIconBadgeNumber = application.applicationIconBadgeNumber + 1
        
    case .active:
        print("Active")

    }
}

当你的应用回到活动状态时,不要忘记重置你的徽章计数。

func applicationDidBecomeActive(_ application: UIApplication) {
    // reset badge count
    application.applicationIconBadgeNumber = 0
}
长孙明知
2023-03-14

由于推送通知由iOS而非应用程序处理,因此在收到推送通知时,您无法更改应用程序标记。

但是您可以在推送通知的有效负载中发送徽章号,但是您必须在服务器端进行计算。

您应该阅读本地和推送通知编程指南,尤其是通知负载。

有效载荷可以是这样的:

{
    "aps" : {
        "alert" : "You got your emails.",
        "badge" : 9
    }
}

现在,应用程序徽章图标将显示9。

 类似资料:
  • 我想在没有推送通知的情况下更新应用程序图标徽章计数(例如静默推送)。我只是想在阅读应用程序内的任何通知后更新应用程序徽章计数,类似于linkedIn,在linkedIn中,当我阅读任何通知时,它会更新应用程序徽章上的计数。目前,我已经实现了一个解决方案,其中我使用带有徽章计数的FCM获得有效负载,并使用配置了静默推送通知通道的android notification builder对其进行更新。

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

  • 我已经看过关于午夜更新应用程序徽章的问题,选项有:应用程序未启动或在后台,当通知到达时,徽章编号可以减少并更改应用程序图标徽章;当应用程序关闭时,推送通知徽章计数不更新并更新徽章图标;等等。但我遇到的问题与应用程序在后台且推送通知到达时相同,应用程序徽章图标不更新。 我已经检查了所有的可能性。我的代码是: 是的,当应用程序在前台时,它工作正常,然后它显示警报正常。但是当应用程序在后台时,既没有任何

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

  • 我试图通过消息推送远程更新徽章值。一切正常,但当应用程序打开时,我得到一个空警报(包含我的应用程序名称和关闭按钮)。 我在苹果的留档中读到了静默通知,但似乎即使在通知有效载荷中指定内容可用: 1,有效载荷也不能包含通知静默的徽章。 在没有收到警报的情况下更新徽章可能吗?

  • 我已经在我的应用程序(Android和IOS)中实现了Appcelerator钛推送通知,用于接收消息: 当应用程序在后台和前台时,我在android中收到通知。我在android中使用下面的属性来显示应用程序在前台时的通知(CloudPush.showTrayNotificationsWhenFocus=true;) 问题:当应用程序位于前台时,我在IOS(9.1版iPhone 5)中收到通知时