在 Swift 中收到推送时添加徽章

Posted

技术标签:

【中文标题】在 Swift 中收到推送时添加徽章【英文标题】:Add badge when push received in Swift 【发布时间】:2015-08-03 14:57:55 【问题描述】:

我有用 Swift 编写的 ios 应用程序。我使用 Parse SDK 进行推送通知。 我想在收到推送时将徽章添加到应用程序图标。 有问题 - 我无法直接从推送中添加徽章,因为有很多用户使用我的应用的早期版本。如果我从推送中添加徽章 - 此徽章不会消失,因为以前的应用程序版本在打开后不会隐藏徽章。所以徽章将始终在图标上。

所以我想要的是通过我的应用处理推送。不管它是否运行。如果推送到达 - 我的应用程序会添加徽章。所以如果我的应用程序没有运行,我可以处理它的推送吗?

我知道如何用 Swift 添加徽章

application.applicationIconBadgeNumber = 5

但是我如何在不打开应用程序的情况下做到这一点 - 就在收到推送时?

【问题讨论】:

【参考方案1】:

当你推送应用时,你需要发送徽章计数:


    "aps": 
        "alert": "message goes here",
        "sound": "sound.aiff",
        "badge": 5 
    

这将在应用打开之前更改应用上的徽章编号。

请注意,当应用关闭时,您无法在不使用通知的情况下更改应用的徽章编号。

【讨论】:

问题是我有很多用户拥有我的应用程序的早期版本。而且这个版本在应用打开后不隐藏徽章。因此,如果我发送带有徽章的推送 - 他们将始终看到此徽章。 没错。除非您发送静默推送,将徽章编号设置为 0。 是否有可能让未运行的应用知道是否收到推送? 当你发送一个推送时,不管它是否正在运行,它都会被传递给应用程序。如果应用程序未运行,则 iOS 会处理徽章编号。如果是,那么你需要处理它。 那么在应用不运行的情况下,是不是无法处理应用推送?【参考方案2】:

如Parse docs 中所说,您可以设置徽章编号,将有效负载中的badge 字段设置为整数 例如:

"data": 
          "alert": "The Mets scored! The game is now tied 1-1.",
          "badge": 5,
          "sound": "default",
          "title": "Mets Score!"
        

或使用Increment 自动增加徽章计数中的当前值 例如:

"data": 
          "alert": "The Mets scored! The game is now tied 1-1.",
          "badge": "Increment",
          "sound": "default",
          "title": "Mets Score!"
        

【讨论】:

问题是我有很多用户拥有我的应用程序的早期版本。而且这个版本在应用打开后不隐藏徽章。因此,如果我发送带有徽章的推送 - 他们将始终看到此徽章。【参考方案3】:

要使用 Parse 发送推送通知,只需使用以下代码,确保将频道更改为正确的:

 let push = PFPush()
 push.setChannel("MyChannel")
 push.sendPushInBackground()

然后在用户打开应用程序备份后隐藏徽章,将以下函数添加到您的AppDelegate.swift

 func applicationDidBecomeActive(application: UIApplication) 

    //Reset badge counter to zero
    var currentInstallation = PFInstallation.currentInstallation()
    if(currentInstallation.badge != 0)
        currentInstallation.badge = 0
    
 

【讨论】:

【参考方案4】:

由于 Parse SDK 将其自己的徽章计数与 iOS 应用徽章计数分开,因此您需要像这样将徽章计数归零。

- (void)applicationDidBecomeActive:(UIApplication *)application 
  PFInstallation *currentInstallation = [PFInstallation currentInstallation];
  if (currentInstallation.badge != 0) 
    currentInstallation.badge = 0;
    [currentInstallation saveEventually];
  
  // ...


在 Swift 2.0 中,

let parseinst: PFInstallation = PFInstallation.currentInstallation();

if (parseinst.badge != 0)

     parseinst.badge = 0;
     parseinst.saveEventually()

【讨论】:

以上是关于在 Swift 中收到推送时添加徽章的主要内容,如果未能解决你的问题,请参考以下文章

收到推送通知时清除徽章

当应用程序在Phonegap(cordova)的后台状态下收到推送通知时增加徽章编号,

是否可以仅显示 Firebase 推送通知的徽章,而在 IOS(Swift 或 Obj-C)中没有警报?

未使用 Apple 推送通知设置通知徽章计数 - swift - 以编程方式

如何在 android 和 ios 收到的推送通知上设置徽章?

每当我的应用收到推送通知时,它都会从最后一个徽章编号(不是 0)递增