如何检测用户是否已采取操作本地通知或远程通知?

时间:2017-12-15 06:20:58

标签: ios swift notifications unusernotificationcenter

我在我的应用中显示本地和远程通知。现在有一种情况,如果通知是本地的,那么我想采取不同的行动,或者如果通知是远程的,那么我想采取一些不同的行动。

直到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中这种方法已被弃用,所以现在如何确保通知是本地的还是远程的?

4 个答案:

答案 0 :(得分:10)

对于使用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();
}

答案 1 :(得分:3)

UNMutableNotificationContent添加userInfo,如下所示:

content.userInfo = ["isLocalNotification" : true]

现在AppDelegate设置UNUserNotificationCenterDelegate中的didFinishLaunchingWithOptions,如下所示:

UNUserNotificationCenter.current().delegate = self

然后实施didReceive response的{​​{1}}方法:

UNUserNotificationCenterDelegate

在输出中,您将得到如下内容:

[AnyHashable(“isLocalNotification”):1]

您可以使用func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print(response.notification.request.content.userInfo) } 密钥识别本地通知。

答案 2 :(得分:0)

对于iOS 10+本地通知,您需要使用UNUserNotificationCenter

您可以参考教程here

以及Apple文档参考here

答案 3 :(得分:0)

您可以参考以下链接。你会得到你的答案。如果没有,请告诉我:

Local and Push Notifications in IOS 9 and 10 using swift3

有关通知类别的更多信息:

要识别本地和远程通知,您可以为通知对象分配标识符。 iOS 10中不推荐使用UIMutableUserNotificationCategory,因此请使用UNNotificationCategory为通知分配标识符。

请参阅以下链接,为通知分配标识符:

https://developer.apple.com/documentation/uikit/uimutableusernotificationcategory/ https://developer.apple.com/documentation/usernotifications/unnotificationcategory