如何处理用户点击的本地通知

时间:2014-01-19 18:32:21

标签: ios iphone objective-c apple-push-notifications uilocalnotification

我在我的应用中使用本地通知,我唯一关心的是用户点击的确切通知。

方法

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
收到通知时会触发

但我需要在用户点击时处理通知,这对我来说没用。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

仅在app未运行时触发,也不是我需要的

我搜索了网络,但发现只有应用程序处于活动状态或未运行的句柄。当应用程序在后台时,我该如何处理它?<​​/ p> 换句话说,我需要的是识别用户在应用程序在后台运行时点击的确切通知

2 个答案:

答案 0 :(得分:5)

创建UILocalNotification时,您可以设置userInfo以设置任何关联的数据/唯一标识符。

实施例

UILocalNotification *someNotification = [[UILocalNotification alloc] init];
[someNotification setUserInfo:@{ kSomeUniqueIdentifierKey : @"identifier" }];

然后,

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    if ([notification.userInfo[kSomeUniqueIdentifierKey] isEqualToString:@"identifier"]) {
        // We know what notification was responded to based on userInfo
    }
}

上述方法会在应用程序运行时收到通知后立即触发,或者当用户点击您的应用在后台时触发的通知时立即触发。

如果您想在应用程序运行时忽略这些通知,您可以随时检查应用程序的状态,以确定它是在运行时还是在后台响应通知。

答案 1 :(得分:-1)

我正在使用iOS 9,解决方案是检查AppDelegate didFinishLaunchingWithOptions中的launchOptions。如下:

    // Were we launched from a local notification?
    if let lo = launchOptions
    {
        if let ln = lo[UIApplicationLaunchOptionsLocalNotificationKey] as? UILocalNotification
        {
            // Do our thing...
        }
    }