在 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 - 以编程方式