在前台单击推送通知横幅后如何触发操作
Posted
技术标签:
【中文标题】在前台单击推送通知横幅后如何触发操作【英文标题】:How to trigger an action once the push notification banner is clicked on foreground 【发布时间】:2017-11-17 10:37:02 【问题描述】:到目前为止,当我处于前台和后台状态时,我都会收到推送通知并显示横幅。但是,尽管它在后台运行良好,但当我在前台时,一旦我单击横幅,我就无法触发打开特定视图控制器的操作(仅当我单击横幅时才应打开)。我该怎么做。我的代码如下
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
print("Recived: \(userInfo)")
completionHandler(.newData)
if state == .background
if mediaId != nil
DispatchQueue.main.async
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let mP3ViewController = storyboard.instantiateViewController(withIdentifier:"MP3ViewController") as! MP3ViewController
mP3ViewController.media_ID = mediaId
self.navigationController?.pushViewController(mP3ViewController, animated:true)
else if state == .active
//What sould i do here to get the click
print("Running on foreground")
UIApplication.shared.applicationIconBadgeNumber = 0
let count = 0
UserDefaults.standard.setValue(count, forKey: "PUSH_COUNT")
UserDefaults.standard.synchronize()
【问题讨论】:
如果应用程序打开,推送通知横幅将不会显示。因为您需要使用自定义横幅,当应用程序在 forgrond 时显示推送通知,您可以获得它的点击事件 在前台收到通知时,您必须从导航控制器中关闭所有视图控制器,然后尝试将您的愿望推送到一个控制器@danu 上面的代码可以很好地显示横幅,无需创建自定义。但是有触发点击事件的麻烦 是的,正如@NitinGohel 提到的,如果您的应用处于前台,您将不会收到横幅通知,但您会收到 didreceiveremotnotification 的回调 public func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Swift.Void) completionHandler([.badge, .alert, .sound]) // 这个委托将给我的横幅 【参考方案1】:试试这个
在 AppDelegate
类中实现 UNUserNotificationCenterDelegate
class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDelegate
在AppDelegate
类中添加波纹管方法
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
print("didReceive response")
completionHandler()
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
print("willPresent notification")
completionHandler([.badge, .alert, .sound])
当推送通知出现在前台时,将调用上述方法。
编辑:-
添加这个由交互式通知委托调用的方法
func application(_ application: UIApplication, handleActionWithIdentifier identifier: String?, for notification: UILocalNotification, completionHandler: @escaping () -> Void)
print("identifier = \(identifier)")
编辑2:
func application(_ application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [AnyHashable : Any], withResponseInfo responseInfo: [AnyHashable : Any], completionHandler: @escaping () -> Void)
print("identifier = \(identifier)")
【讨论】:
这两个我已经有了,但是我想触发点击动作 没有得到你,你的意思只是在 AppDelegate 的任何地方添加这个?? 先生有没有办法在这里获取我的无 userInfo 对象 print("identifier = (String(describing: identifier))") 根本没有被触发handleActionWithIdentifier
方法不是已弃用吗?!它们被 didReceiveResponse
方法替换...除非他的目标低于 ios10以上是关于在前台单击推送通知横幅后如何触发操作的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序处于前台时收到推送通知时,是不是可以为 ios 显示横幅?