带有 BadgeValue 的 TabItem 仅在我从通知触发器启动应用程序时显示
TabItem with BadgeValue only shows up when I launch the app from the notification trigger
我有一个带有推送通知的应用程序,使用 PHP EasyAPNS 通知在 Swift 3、iOS 10 上工作正常。但是我不明白的一件事是为什么徽章在当我从通知警报启动应用程序时,TabItem 工作正常,但当我直接从应用程序图标(带有红色徽章)打开应用程序时,TabItem 工作正常
下面是我在 AppDelegate 上使用的代码:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [String:Any])
{
print("Message details \(userInfo)")
if let aps = userInfo["aps"] as? NSDictionary
{
if let alertMessage = aps["alert"] as? String {
let rootViewController = self.window?.rootViewController as! UITabBarController!
let tabArray = rootViewController?.tabBar.items as NSArray!
let tabItem = tabArray?.object(at: 3) as! UITabBarItem
tabItem.badgeValue = "1"
let myAlert = UIAlertController(title: "Message", message: alertMessage, preferredStyle: UIAlertControllerStyle.alert)
let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil)
myAlert.addAction(okAction)
self.window?.rootViewController?.present(myAlert, animated: true, completion: nil)
}
}
}
所以,当我点击警报打开我的应用程序时,徽章是这样的:
但是当我使用图标本身打开应用程序时,徽章没有显示:
有人知道我做错了什么吗?
如果我可以改进问题,请告诉我!
您应该使用 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
方法来处理通知。如文档中所述 (found here),无论应用程序是在前台还是后台,都会调用此方法。
application(_:didReceiveRemoteNotification:)
的文档也值得注意
If the app is not running when a remote notification arrives, the
method launches the app and provides the appropriate information in
the launch options dictionary. The app does not call this method to
handle that remote notification.
请注意,如果应用不是 运行 并且用户点击图标,应用将调用 application(_:didFinishLaunchingWithOptions:)
。如果应用程序有需要处理的远程通知,将有适当的 launchOption 键值对。
我有一个带有推送通知的应用程序,使用 PHP EasyAPNS 通知在 Swift 3、iOS 10 上工作正常。但是我不明白的一件事是为什么徽章在当我从通知警报启动应用程序时,TabItem 工作正常,但当我直接从应用程序图标(带有红色徽章)打开应用程序时,TabItem 工作正常
下面是我在 AppDelegate 上使用的代码:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [String:Any])
{
print("Message details \(userInfo)")
if let aps = userInfo["aps"] as? NSDictionary
{
if let alertMessage = aps["alert"] as? String {
let rootViewController = self.window?.rootViewController as! UITabBarController!
let tabArray = rootViewController?.tabBar.items as NSArray!
let tabItem = tabArray?.object(at: 3) as! UITabBarItem
tabItem.badgeValue = "1"
let myAlert = UIAlertController(title: "Message", message: alertMessage, preferredStyle: UIAlertControllerStyle.alert)
let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil)
myAlert.addAction(okAction)
self.window?.rootViewController?.present(myAlert, animated: true, completion: nil)
}
}
}
所以,当我点击警报打开我的应用程序时,徽章是这样的:
但是当我使用图标本身打开应用程序时,徽章没有显示:
有人知道我做错了什么吗?
如果我可以改进问题,请告诉我!
您应该使用 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
方法来处理通知。如文档中所述 (found here),无论应用程序是在前台还是后台,都会调用此方法。
application(_:didReceiveRemoteNotification:)
If the app is not running when a remote notification arrives, the method launches the app and provides the appropriate information in the launch options dictionary. The app does not call this method to handle that remote notification.
请注意,如果应用不是 运行 并且用户点击图标,应用将调用 application(_:didFinishLaunchingWithOptions:)
。如果应用程序有需要处理的远程通知,将有适当的 launchOption 键值对。