如何检测用户是不是采取了本地通知或远程通知的操作?
Posted
技术标签:
【中文标题】如何检测用户是不是采取了本地通知或远程通知的操作?【英文标题】:How to detect if user has taken action local notification or remote notification?如何检测用户是否采取了本地通知或远程通知的操作? 【发布时间】:2017-12-15 06:20:58 【问题描述】:我在我的应用程序中显示本地和远程通知。现在有一种情况,如果通知是本地的,那么我想采取不同的行动,或者如果通知是远程的,那么我想采取一些不同的行动。
直到 ios 9 我使用下面的代码来检测通知是本地的还是远程的。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
if launchOptions?[UIApplicationLaunchOptionsKey.localNotification] != nil
// Do what you want to happen when a remote notification is tapped.
return true
但在 iOS 10 中,这种方法已被弃用,所以现在我如何确保通知是本地的还是远程的?
【问题讨论】:
检查这个:useyourloaf.com/blog/local-notifications-with-ios-10 您可以查看我已更新的答案。希望这会有所帮助。 【参考方案1】:对于使用UserNotifications
框架的iOS 10 及更高版本。
检查用户是否对通知采取了行动。可以遵循UNUserNotificationCenterDelegate
,实现userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:
检查是否是远程通知。您可以检查trigger
的类型,因为远程通知触发器是UNPushNotificationTrigger
。
这是代码...
#pragma mark - UNUserNotificationCenterDelegate
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler
if ([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]])
// User did tap at remote notification
completionHandler();
【讨论】:
【参考方案2】:在UNMutableNotificationContent
中添加userInfo
,如下所示:
content.userInfo = ["isLocalNotification" : true]
现在在AppDelegate
中设置UNUserNotificationCenterDelegate
在didFinishLaunchingWithOptions
中,如下所示:
UNUserNotificationCenter.current().delegate = self
然后实现UNUserNotificationCenterDelegate
的didReceive response
方法:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
print(response.notification.request.content.userInfo)
在输出中你会得到类似下面的东西:
[AnyHashable("isLocalNotification"): 1]
您可以使用isLocalNotification
键识别本地通知。
【讨论】:
【参考方案3】:您可以参考以下链接。你会得到你的答案。如果没有,请告诉我:
Local and Push Notifications in IOS 9 and 10 using swift3
关于通知类别的更多信息:
要识别本地和远程通知,您可以为通知对象分配一个标识符。 UIMutableUserNotificationCategory
在 iOS 10 中已弃用,因此请使用 UNNotificationCategory
为通知分配标识符。
请参阅以下链接以将标识符分配给通知:
https://developer.apple.com/documentation/uikit/uimutableusernotificationcategory/ https://developer.apple.com/documentation/usernotifications/unnotificationcategory
【讨论】:
【参考方案4】:对于 iOS 10+ 本地通知,您需要使用 UNUserNotificationCenter
你可以参考教程here
对于 Apple 文档,请参阅 here
【讨论】:
我已经用过UNUserNotificationCenter了。我如何知道从本地通知或远程通知启动的应用我想区分它们以上是关于如何检测用户是不是采取了本地通知或远程通知的操作?的主要内容,如果未能解决你的问题,请参考以下文章