zoukankan      html  css  js  c++  java
  • IOS本地通知实现

    当一段时间没有使用一个APP的时候(例如消消乐, 熊猫读书等), 其都会自动的跳出一个通知, 告诉你多久没有用过这个app了,同时提醒你再次使用,目的是为其留住现有的用户.

    本地通知,不像远程通知还要请求苹果APNs服务器,其推送消息的过程较为简单,下面探讨下具体的实现原理.

    注意:如果苹果设备是ios8系统以上,需要请求通知,在AppDelegate.m的

    <span style="font-size:14px;">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions</span>

    这个方法中实现请求通知

    <span style="font-size:14px;">//判断当前设备的系统
        if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
            UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
            // 注册通知类型
            [application registerUserNotificationSettings:settings];
            
            [application registerForRemoteNotifications];
        }</span>

    然后,可以在要实现通知的控制器中,具体实现通知的代码逻辑

    第一步:创建本地通知;

    第二步:设置本地通知的附带信息;

    第三步:注册通知.

    其中第二步中,通知的附带信息有

    <span style="font-size:14px;">@property(nonatomic,copy) NSDate *fireDate; 指定通知发送的时间
     @property(nonatomic,copy) NSTimeZone *timeZone; 指定发送通知的时区
     @property(nonatomic) NSCalendarUnit repeatInterval;  重复的周期, 枚举
     @property(nonatomic,copy) NSCalendar *repeatCalendar; 重复的周期
     @property(nonatomic,copy) NSString *alertBody;      通知内容
     @property(nonatomic) BOOL hasAction;                是否需要滑动事件
     @property(nonatomic,copy) NSString *alertAction;    锁屏状态的标题
     @property(nonatomic,copy) NSString *alertLaunchImage;   点击通知之后的启动图片
     @property(nonatomic,copy) NSString *soundName;    收到通知播放的音乐
     @property(nonatomic) NSInteger applicationIconBadgeNumber;  图标提醒数字
     @property(nonatomic,copy) NSDictionary *userInfo;   额外的信息</span>

    可以根据具体的要求,实现相关的信息,具体代码为:

    <span style="font-size:14px;"> //1.创建本地通知对象
        UILocalNotification *note = [[UILocalNotification alloc] init];
        
        //1.1指定通知发送时间
        note.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
        
        //1.2指定通知内容
        note.alertBody = @"本地通知测试";
        
        //1.3锁屏状态的标题
        note.alertAction = @"锁屏信息";
        
        //1.4额外的信息
        note.userInfo = @{
                        @"name":@"xiaoming",
                        @"age":@"24"
                        };
        
        //2.注册通知
        UIApplication *application = [UIApplication sharedApplication];
        
        [application scheduleLocalNotification:note];</span>

    当收到通知的信息的时候,系统会执行AppDelegate.m中的代理方法

    <span style="font-size:14px;">// 接收到本地通知时就会调用
    // 当程序在前台时, 会自动调用该方法
    // 当程序 还后台时, 只有用户点击了通知才会调用
    //如果应用程序是关闭状态会调用didFinishLaunchingWithOptions
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
        //获取通知的数据
        NSLog(@"%@", notification.userInfo);
    }
    </span>

    应用程序是关闭状态会调用application:didFinishLaunchingWithOptionS

    数据可以从launchOptions中取出



    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    [转]How can I create a design netlist without including my source design files?
    [转]基于FPGA的以太网开发
    [转]GMII/RGMII/SGMII/TBI/RTBI接口信号及时序介绍
    [原]Altium画PCB时鼠标十字不能对准焊盘中心
    [转]Altera特殊管脚的使用(适用全系列Altera FPGA,MSEL区别除外)-来自altera论坛
    [转]STM32正交编码器驱动电机
    [转]使用D触发器制作正交编码器的鉴相电路
    [转]解决STM32开启定时器时立即进入一次中断程序问题
    [转]ISE iMPACT bit生成mcs
    [转]NiosII处理器软件代码优化方法
  • 原文地址:https://www.cnblogs.com/xiaocai-ios/p/7779809.html
Copyright © 2011-2022 走看看