推送通知可以在应用没有启动或者在后台运行的时候给用户一些提示。
iOS开发的API中有3种不同的“通知”,包括:广播通知、本地通知和推送通知(远程通知)。
1、广播通知:是观察者模式中的通知机制,可以实现在相同进程中实现一个对象对多个对象的通信,它在异步调用返回结果给多个对象时使用非常广泛。
2、本地通知:使用场景是应用在后台运行时,把一些消息提示给用户,一个很好的例子是基于定位服务的应用,这类应用在后台运行,到它发现到达某个特定地点时,给用户提示。
【注】:本地通知和推送通知都可以给用户一些通知信息,只不过本地通知只是应用所在设备上给用户通知,而推送通知是远程通知,它是由远程服务器推送过来的。无论哪一种通知,通知形式是一样的,常见的有2种形式:横幅通知和提醒通知。横幅通知会在屏幕的上面出现一个小横幅条,几秒钟后消失;提醒通知会在屏幕*填出一个对话框,这种提醒方式的通知一定要慎用,用户体验不好,而横幅通知不会打扰用户。这两种形式的通知可以在系统设置中切换,也可以关闭通知,还可以设置通知的提示音。当应用程序正在运行时,通知也会如期而至,但是不会提示用户,它会保留在通知中心里(即:用手向下拉动状态栏,可以看到通知,这个设计是在iOS 5之后的新功能),单击后面的关闭按钮可以清除通知,单击具体的通知项目可以进入应用。还可以通过程序为应用接收到通知时,在其图标上添加标记,标记是在图标右上角现实的红色数字,标记中的数字可以通过程序设置,标记的数量一般代表有多少条未读的通知,当用户看完这些通知后,图标上的标记会一起变化,这些是要通过编程实现的。标记可以被关闭,可以在设置中关闭它。
虽然本地通知并没有任何的网络通信,但是它在编程方面与推送通知非常相似。
本地通知示例:
@interface YXCViewController () - (IBAction)scheduleStart:(id)sender; - (IBAction)scheduleEnd:(id)sender; - (IBAction)nowStart:(id)sender; @end
// 点击后,10s后发送通知 - (IBAction)scheduleStart:(id)sender { UILocalNotification *localNotification = [[UILocalNotification alloc] init]; // 设置通知10s后触发 localNotification.fireDate = [[NSDate alloc] initWithTimeIntervalSinceNow:10]; // 通知消息 localNotification.alertBody = @"计划通知,新年好"; // 设置通知标记数 localNotification.applicationIconBadgeNumber = 1; // 设置通知出现时声音,UILocalNotificationDefaultSoundName是指系统默认的声音 localNotification.soundName = UILocalNotificationDefaultSoundName; // 设置动作按钮的标题 localNotification.alertAction = @"查看详情"; // 计划通知,scheduleLocalNotification方法发送计划通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; } - (IBAction)scheduleEnd:(id)sender { // 结束计划通知 // 该方法可以取消已经开始的计划通知 [[UIApplication sharedApplication] cancelAllLocalNotifications]; } // 点击后,立即发送通知 - (IBAction)nowStart:(id)sender { UILocalNotification *localNotification = [[UILocalNotification alloc] init]; // 设置通知10s后触发 localNotification.fireDate = [[NSDate alloc] initWithTimeIntervalSinceNow:10]; // 通知消息 localNotification.alertBody = @"立即通知,新年好"; // 设置通知标记数 localNotification.applicationIconBadgeNumber = 1; // 设置通知出现时声音,UILocalNotificationDefaultSoundName是指系统默认的声音 localNotification.soundName = UILocalNotificationDefaultSoundName; // 设置动作按钮的标题 localNotification.alertAction = @"查看详情"; // 计划通知,presentLocalNotificationNow方法立即发送通知 [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; }