zoukankan      html  css  js  c++  java
  • 推送机制

    一,NSNotifcationCenter 

    观察者模式。KVO。

    NSNotification并不能实现IPC,因为NSNotificationCenter只允许同一个程序中的不同对象进行通信,他们不能跨越不同的应用。

    Nofitication对象代表Poster与Observer之间的信息载体,该对象包含如下只读属性;

    name:代表该通知的名称;

    object:代表该通知的Poster

    userInfo:

    1,注册

    1)[[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(mytest:) name:@" mytest" object:nil]; 

    //第一个参数为监听者监听object,第二个参数:监听方法,第三个参数:通知名称;

    如果object为空,则用于监听任何对象发出的通知;

    [NSNotificationCenter defaultCenter] 获取系统默认的通知中心对象;

    2)addObseverForName:object:queue:usingBlock: 指定代码块为监听者;

    3)removeObserver:

    4)removeObserver:name:object: 取消监听者队指定Poster、指定通知的监听;

    2,发送消息

    1), [[NSNotificationCenter defaultCenter] postNotificationName:@"mytest" object:searchFriendArray];

    2),postNotification:需要一个NSNotification对象作为通知

    postNotificationName:object://第一个参数:通知名称;第二个:通知的Poster

    postNotificationName:object:userInfo: //第三个参数:是NSDicationary对象,用于携带通知的附加信息;

     

    二,iOS本地通知

    1,推送通知的基本目的都是让应用程序能够通知用户某些事情,而且不需要应用程序在前台运行;

    区别在于:本地通知由本应用负责调用,只能从当前设备上ios发出;

    远程推送通知由远程服务器上的程序发送至App Push Notification serve(APNs),再由APNs把消息推送至设备上对应的程序;

    2,本地通知是一个UILocalNotification对象,它有如下属性:

    fireDate:指定通知在什么时候触发;

    repeatInterval:指定本地通知重复发送的时间间隔;

    alertBody:设置本地通知的消息体;

    alertAction:设置当设备处于锁屏状态时,显示通知的警告框下方的title

    hasAction:设置是否显示Action

    alertLaunchImage:当用户通过该通知启动对应的应用时,该属性设置为加载图片

    applicationIconBadgeNumber:设置显示在应用程序上红色徽标中的数字;

    soundName:设置通知的声音

    userInfo:设置该通知携带的附加信息;

    UILocalNotification *notification=[[UILocalNotification alloc] init];   
        if (notification!=nil) { 
            NSDate *now=[NSDate new]; 
            notification.fireDate=[now dateByAddingTimeInterval:10];//10秒后通知
            notification.repeatInterval=0;//循环次数,kCFCalendarUnitWeekday一周一次
            notification.timeZone=[NSTimeZone defaultTimeZone];
            notification.applicationIconBadgeNumber=1; //应用的红色数字 
            notification.soundName= UILocalNotificationDefaultSoundName;//声音,可以换成alarm.soundName = @"myMusic.caf" 
            //去掉下面2行就不会弹出提示框
             notification.alertBody=@"通知内容";//提示信息 弹出提示框
             notification.alertAction = @"打开";  //提示框按钮 
            //notification.hasAction = NO; //是否显示额外的按钮,为no时alertAction消失
    
           // NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];
            //notification.userInfo = infoDict; //添加额外的信息
            
            [[UIApplication sharedApplication] scheduleLocalNotification:notification];      
        }
        [notification release];

    3,发送通知: 

    scheduleLocalNotification:该方法指定调度通知。通知将会于fireDate指定的时间出发,而且会按repeatInterval指定的时间间隔重复触发;

    presentLocalNotificationNow:立即放松通知,该方法会忽略UILocalNotification的fireData属性;

    每个应用程序最多只能发送最近(新)的64个本地通知,超过该限制的通知将被操作系统自动放弃。重复的通知会被认为是一个通知;

    如果系统发出通知时,应用程序处于前台,系统将触发应用程序委托类的application:didReceiveLocalNotification:方法;

    4,在ios应用中,发送本读通知本地通知的步骤:

    1),创建UILocalNotification对象;

    2),设置UILocalNotification属性;

    3),调用UIApplication的方法发送或调用通知;

    4),如果希望应用程序在前台运行时可以对通知进行相应的处理,则需要重写应用程序委托类的application:didReceiveLocalNotification:方法;

    三,iOS远程推送通知

    UIApplication 提供le如下方法来注册远程Push通知。

    -registerForRemoteNotificationTypes:注册远程推送通知;

    -unregisterForRemoteNotifications:取消注册远程推送通知;

    UIApplicationDelegate中则定义了如下与远程推送通知相关的方法:

    -application:didReceiveRemoteNotification:应用程序收到远程Push通知时自动执行该方法;

    -application:didRegisterForRemoteNotificationsWithDeviceToken:

    -application:didFailToRegisterForRemoteNotificationWithError:

  • 相关阅读:
    用汇编的眼光看c++(之模板函数) 四
    从B树、B+树、B*树谈到R 树 四
    how to locate dll in native c++ world / dotnet world?
    GAC和sidebyside
    ARM VS Intel
    关于dotnet下的encoding
    synchronization objects for interprocess synchronization and multithreadiing
    [remote debug]WinDBG 技巧: 如何用WinDBG远程调试程序
    [tip]transparent bmp
    Review: functor / function object
  • 原文地址:https://www.cnblogs.com/developer-qin/p/4626480.html
Copyright © 2011-2022 走看看