zoukankan      html  css  js  c++  java
  • ios本地推送

    // 本地通知回调函数,当应用程序在前台时调用
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
        NSLog(@"noti:%@",notification);
        
        // 这里真实需要处理交互的地方
        // 获取通知所带的数据
        NSString *key = [notification.userInfo objectForKey:LocalPushKey];
        NSString *title = [notification.userInfo objectForKey:@"title"];
        NSString *content = [notification.userInfo objectForKey:@"content"];
        
        NSString *sysVersion = [UIDevice currentDevice].systemVersion;
        CGFloat version = [sysVersion floatValue];
        
        if (version >= 8.0) {
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:content preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
            [alertController addAction:okAction];
            [[UIApplication sharedApplication].keyWindow.rootViewController  presentViewController:alertController animated:YES completion:nil];
        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                                                            message:content
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
    
        }
        // 更新显示的徽章个数
    //    NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
    //    badge--;
    //    badge = badge >= 0 ? badge : 0;
        [UIApplication sharedApplication].applicationIconBadgeNumber = 1;
        
        // 在不需要再推送时,可以取消推送
        [AppController cancelLocalNotificationWithKey:key];
    }
    
    // 设置本地通知
    + (void)registerLocalNotification:(NSNumber *)alertTime key:(NSString *)key alertBody:(NSString *)alertBody title:(NSString *) title content:(NSString *) content{
        [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
        [AppController cancelLocalNotificationWithKey:key];
        //NSLog(@"registerLocalNotification:   %long   %@   %@   %@   %@", [alertTime integerValue], key, alertBody, title, content);
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        // 设置触发通知的时间
        NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:[alertTime integerValue]];
        //NSLog(@"fireDate=%@",fireDate);
        
        notification.fireDate = fireDate;
        // 时区
        notification.timeZone = [NSTimeZone defaultTimeZone];
        // 设置重复的间隔
        notification.repeatInterval = kCFCalendarUnitSecond;
        
        // 通知内容
        //notification.alertTitle = @"通知";
        notification.alertBody = alertBody;
        notification.applicationIconBadgeNumber = 1;
        // 通知被触发时播放的声音
        notification.soundName = UILocalNotificationDefaultSoundName;
        // 通知参数
        NSDictionary *userDict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects: key, title, content, nil] forKeys:[NSArray arrayWithObjects: LocalPushKey, @"title", @"content", nil]];//[NSDictionary dictionaryWithObject:userDictData  forKey:LocalPushKey];
        notification.userInfo = userDict;
        
        // ios8后,需要添加这个注册,才能得到授权
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
            UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type
                                                                                     categories:nil];
            [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
            // 通知重复提示的单位,可以是天、周、月
            notification.repeatInterval = NSCalendarUnitDay;
        } else {
            // 通知重复提示的单位,可以是天、周、月
            notification.repeatInterval = NSDayCalendarUnit;
        }
        // 执行通知注册
        [[UIApplication sharedApplication] scheduleLocalNotification:notification];
    }
    
    // 取消某个本地推送通知
    + (void)cancelLocalNotificationWithKey:(NSString *)key {
        // 获取所有本地通知数组
        NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
        
        for (UILocalNotification *notification in localNotifications) {
            NSDictionary *userInfo = notification.userInfo;
            if (userInfo) {
                // 根据设置通知参数时指定的key来获取通知参数
                NSString *userKey = [userInfo objectForKey:LocalPushKey];
                // 如果找到需要取消的通知,则取消
                if (userKey != nil && [userKey isEqualToString:key]) {
                    [[UIApplication sharedApplication] cancelLocalNotification:notification];
                    break;
                }
            }
        }
    }
  • 相关阅读:
    Hadoop入门
    Redis缓存分布式高可用架构原理
    ES分布式搜索引擎架构原理
    Java锁,多线程与高并发,JUC并发包
    图算法--拓扑序列
    数据结构--数组模拟队列
    数据结构--数组模拟栈
    数据结构--数组模拟双链表
    数据结构--数组模拟单链表
    基础算法--双指针
  • 原文地址:https://www.cnblogs.com/pengyingh/p/4813891.html
Copyright © 2011-2022 走看看