本文共 3741 字,大约阅读时间需要 12 分钟。
步骤:
1. 创建UILocalNotification。 2. 设置处理通知的时间fireDate。 3. 配置通知的内容:通知主体、通知声音、图标数字等。 4. 配置通知传递的自定义数据参数userInfo(这一步可选)。 5. 调用通知,可以使用scheduleLocalNotification:按计划调度一个通知,也可以使用presentLocalNotificationNow立即调用通知。 注意: • 在使用通知之前必须注册通知类型,如果用户不允许应用程序发送通知,则以后就无法发送通知,除非用户手动到iOS设置中打开通知。 • 本地通知是由操作系统统一调度的,只有在应用退出到后台或者关闭才能收到通知。(注意:这一点对于后面的推送通知也是完全适用的。 ) • 通知的声音是由iOS系统播放的,格式必须是Linear PCM、MA4(IMA/ADPCM)、µLaw、aLaw中的一种,并且播放时间必须在30s内,否则将被系统声音替换,同时自 定义声音文件必须放到main boundle中。 • 本地通知的数量是有限制的,最近的本地通知最多只能有64个,超过这个数量将被系统忽略。 • 如果想要移除本地通知可以调用UIApplication的cancelLocalNotification:或cancelAllLocalNotifications移除指定通知或所有通知。#import "AppDelegate.h"
@interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. application.applicationIconBadgeNumber = 0; //申请用户许可 float version = [[[UIDevice currentDevice] systemVersion] floatValue]; if (version >= 8.0) { UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound|UIUserNotificationTypeBadge|UIUserNotificationTypeAlert categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:setting]; } UILocalNotification * localNotificaiton = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; if (localNotificaiton != nil) { [self processLocalNotifiction:localNotificaiton]; } return YES; } -(void)processLocalNotifiction:(UILocalNotification*)localNotification { UIAlertView *alterView = [[UIAlertView alloc]initWithTitle:@"lanchApp" message:@"loc" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alterView show]; } //注册设置提醒后,调用的代理方法 -(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { if (notificationSettings.types != UIUserNotificationTypeNone ) { //注册本地推送,首先生成UILocalNotification对象 UILocalNotification *localNotifcation = [[UILocalNotification alloc]init]; //提示出发的时间 localNotifcation.fireDate = [NSDate dateWithTimeIntervalSinceNow:10]; //提示的内容 localNotifcation.alertBody = @"这是一个测试"; //制定消息到来时的播放的声音文件,一定要在bundle内,而且声音的持续时间不能超过30s localNotifcation.soundName = @"CAT2.WAV"; //设置系统角标 localNotifcation.applicationIconBadgeNumber = 1; //注册本地通知道系统中,这样系统道指定的时间会出发该通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNotifcation]; } } //当程序运行在后台,或者程序没有启动,当注册的本地通知到达时。ios会弹框提示,并播放你设置的声音。 //当应用程序运行在前台会调用该代理方法,不会播放声音,不会弹框 -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { //判断应用程序状态来决定是否弹框 if (application.applicationState == UIApplicationStateActive) { UIAlertView *alterView = [[UIAlertView alloc]initWithTitle:@"本地推送" message:notification.alertBody delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alterView show]; }else if (application.applicationState == UIApplicationStateInactive) { NSLog(@"UIApplicationStateInactive"); }else{ //background NSLog(@"UIApplicationStateBackground"); } } - (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. //取消所有的本地推送 //[[UIApplication sharedApplication] cancelAllLocalNotifications]; //取消某一个 //[[UIApplication sharedApplication] cancelLocalNotification:<#(UILocalNotification *)#>]; //所有调度道系统中的本地推送 //[UIApplication sharedApplication].scheduledLocalNotifications; }转载地址:http://qcsni.baihongyu.com/