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

    网络推送可能被人最为重视,但是本地推送有时候项目中也会运用到;

    闲话少叙,代码如下:

    1、添加根视图

    self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];
        
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];

    2、本地创建一个button进行触发

    button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(20, 100, WIDTH - 40, 50);
        button.backgroundColor = [UIColor blueColor];
        [button setTitle:@"开始啦" forState:UIControlStateNormal];
        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        //绑定方法
        [button addTarget:self action:@selector(noticClick:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];

    3、注册一个通知

    //设置本地通知 传一个时间进去
    + (void)registerLocalNotification:(NSInteger)alertTime
    {
        UILocalNotification *notification = [[UILocalNotification alloc]init];
        //设置触发通知的时间
        NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];
        NSLog(@"fireDate=%@",fireDate);
        
        notification.fireDate = fireDate;
        //时区
        notification.timeZone = [NSTimeZone defaultTimeZone];
        //设置重复的间隔
        notification.repeatInterval = kCFCalendarUnitSecond;
        
        //通知内容
        notification.alertBody = @"该起床了...";
        notification.applicationIconBadgeNumber = 1;
        //通知被触发时播放的声音
        notification.soundName = UILocalNotificationDefaultSoundName;
        //通知参数
        NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"起床了,开始学习了ios开发了" forKey:@"key"];
        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];
        
    }

    4、调用这个方法

    -(void)noticClick:(id)sender
    {
        //调用通知
        [ViewController registerLocalNotification:4];//4秒钟后
    }

    5、取消通知的方法

    //取消某个本地推送通知
    +(void)cancelLocalNotificationWithKey:(NSString *)key
    {
        //获取所有本地通知数组
        NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
        
        for (UILocalNotification *notification in localNotifications) {
            NSDictionary *userInfo = notification.userInfo;
            if (userInfo) {
                
                //根据设置通知参数时指定的key来获取通知参数
                NSString *info = userInfo[key];
                
                //如果找到需要取消的通知,则取消
                if (info != nil) {
                    [[UIApplication sharedApplication]cancelLocalNotification:notification];
                    break;
                }
                
            }
        }
    }

    6、调用这个方法

    //本地通知回调函数,当应用程序在前台时调用
    -(void)application:(UIApplication *)application didReceiveLocalNotification:(nonnull UILocalNotification *)notification
    {
        NSLog(@"notif:%@",notification);
        
        //这里真是需要处理交互的地方
        //获取通知所带的数据
        NSString *notMes = [notification.userInfo objectForKey:@"key"];
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"本地通知(前台)" message:notMes delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
        
        //更新显示的角标个数
        NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
        badge--;
        badge = badge >= 0 ? badge : 0;
        [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
        
        //在不许要再推送时,可以取消推送
        [ViewController cancelLocalNotificationWithKey:@"key"];
    }
  • 相关阅读:
    不同类型的磁盘存储在Ubuntu下的性能测试
    Ubuntu16.04编译安装Redis Desktop Manager
    gnu screen的用法
    MySQL Workbench常用快捷键
    Libevent例子(二)
    Libevent例子(一)
    Ubuntu下的init.d管理update-rc.d
    Centos7 修改终端文字显示颜色
    通过socks tunnel设置http代理
    linux:C++的socket编程
  • 原文地址:https://www.cnblogs.com/hero11223/p/5764391.html
Copyright © 2011-2022 走看看