当前位置:  开发笔记 > IOS > 正文

检测应用程序打开的UILocalNotification

如何解决《检测应用程序打开的UILocalNotification》经验,为你挑选了1个好方法。

在某些情况下,我的iOS应用程序触发多个UILocalNotification同一时间.我想决定UILocalNotification用户点击了哪个.当用户点击某个UILocalNotification应用程序处于非活动状态或后台时.问题是该方法

func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {

每次触发都会UILocalNotification被调用.因此,当应用程序变为活动状态时,此方法会被多次调用,因为我收到了多个UILocalNotification.有没有办法确定UILocalNotification应用程序打开的原因是什么?由于UILocalNotification应用程序处于非活动状态或后台时已收到所有应用程序,因此检查applicationState 不起作用.

非常感谢!

编辑:作为一个例子:当您从两个不同的组A和B收到WhatsApp消息并从组A中选择推送通知时,该应用程序将在应用程序打开后立即显示.WhatsApp和我的用例之间的区别在于我有本地通知.



1> 小智..:

在安排通知时,您可以为通知userinfo设置一些唯一ID.

UILocalNotification *notif = [[UILocalNotification alloc] init];
    notif.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];
    notif.timeZone = [NSTimeZone defaultTimeZone];

// set the your data with unique id
    NSMutableDictionary *dict=[NSMutableDictionary new];
    [dict setObject:Id forKey:@"id"];

// assignt the dictionary to user info
    notif.userInfo=dict;


    notif.alertBody = @"test Notification";
    notif.soundName = UILocalNotificationDefaultSoundName;


    [[UIApplication sharedApplication] scheduleLocalNotification:notif];

你可以从didReceiveLocalNotification那样获取userinfo

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    if ([[notification.userInfo valueForKey:@"id"] isEqualToString:@"1"])
    {
        NSLog(@"notification id %@",[notification.userInfo valueForKey:@"id"]);
    }
    else if ([[notification.userInfo valueForKey:@"id"] isEqualToString:@"2"])
    {
        NSLog(@"notification id %@",[notification.userInfo valueForKey:@"id"]);
    }

    ////// or /////

    if ([notification.userInfo valueForKey:@"id"] )
    {
        NSLog(@"id of notification %@",[notification.userInfo valueForKey:@"id"]);
    }

}

来自didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey])
    {
       UILocalNotification *notif=[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
        NSLog(@"notif.userInfo  %@",notif.userInfo);

//        notif.userInfo  {
//            id = 2;
//        }

    } 


        return YES;
}

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有