您的位置:首页 > 移动开发 > IOS开发

iOS本地推送

2015-09-09 19:52 357 查看

推送通知

注意:这里说的推送通知跟NSNotification有所区别

NSNotification是抽象的,不可见的

推送通知是可见的(能用肉眼看到)

iOS中提供了2种推送通知

本地推送通知(Local Notification)

远程推送通知(Remote Notification)

推送通知的作用

推送通知的作用

可以让不在前台运行的app,告知用户app内部发生了什么事情

推送通知的呈现效果总结

在屏幕顶部显示一块横幅(显示具体内容)

在屏幕中间弹出一个UIAlertView(显示具体内容)

在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)

更新app图标的数字(说明新内容的数量)

播放音效(提醒作用)

用户也可以决定是否要开启以下4个功能:

显示App图标数字

播放音效

锁屏显示

显示在“通知中心”

推送通知的使用细节

发出推送通知时,如果程序正运行在前台,那么推送通知就不会被呈现出来

点击推送通知后,默认会自动打开发出推送通知的app

不管app打开还是关闭,推送通知都能如期发出

如何发送本地推送

1.创建本地推送对象

UILocalNotification *localNote = [[UILocalNotification alloc]init];


2.设置通知属性

if (localNote != nil) {
// 设置推送时间
NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10];
localNote.fireDate = pushDate;
// 设置时区(一般设置为[NSTimeZone defaultTimeZone] ,跟随手机的时区)
localNote.timeZone = [NSTimeZone defaultTimeZone];
// 设置重复间隔
localNote.repeatInterval = NSCalendarUnitMinute;
// 推送音效,格式只能是.aiff、.wav、.caf三种格式,并且声音的长度不能超过30秒
localNote.soundName = UILocalNotificationDefaultSoundName;
//localNote.alertLaunchImage = @"";//点击推送通知打开app时显示的启动图片

// 推送内容
localNote.alertBody = @"推送内容";
// 锁屏后动作提示标题(提示滑动的操作目的)
localNote.alertAction=@"推送内容";
// 显示在icon上的红色圈中的数子
localNote.applicationIconBadgeNumber = 1;

// 设置userinfo 方便在之后需要撤销的时候使用(附加的额外信息)

NSDictionary *info = [NSDictionary dictionaryWithObject:@"name"forKey:@"key"];
localNote.userInfo = info;

//添加推送到UIApplication
UIApplication *app = [UIApplication sharedApplication];
// 判断版本设备,因为iOS8.0以后的版本设置和之前的不一样
if([[UIDevice currentDevice].systemVersion floatValue] >= 8.0){
//对通知进行设置
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotificationTypeSound) categories:nil];
[app registerUserNotificationSettings:setting];// 注册设置
}
[app scheduleLocalNotification:localNote];// 启动推送(在规定时间)
}


3.取消本地推送

UIApplication *app = [UIApplication sharedApplication];
[app cancelAllLocalNotifications];// 取消所有本地推送
// 取消指定本地推送
// [app cancelLocalNotification:localNote];


4.获得被调度的所有本地推(等待发出还未发出的推送)

已发出且过期的推送算调度结束,会自动从数组中移除

NSArray *notes = [UIApplication sharedApplication].scheduledLocalNotifications;


5.此方法是立即发送推送(应用场景:程序后台运行时接受到类似于QQ消息后即时推送)

//即时推送
[app presentLocalNotificationNow:notification];


点击本地推送通知

当用户点击本地推送通知,会自动打开app,这里有2种情况

app并没有关闭,一直隐藏在后台

让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;


示例代码:

/**
*  当用户点击本地通知进入app的时候调用 、通知发出的时候(app当时并没有被关闭)
*/
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
//    self.label.text = [NSString stringWithFormat:@"点击通知再次回到前台---%d", application.applicationState];
// 程序正处在前台运行,直接返回
if (application.applicationState == UIApplicationStateActive) return;

NewViewController *homeVc = [self.window.rootViewController.childViewControllers firstObject];
[homeVc performSegueWithIdentifier:@"home2detail" sender:notification];
}


app已经被关闭(进程已死)

启动app,启动完毕会调用AppDelegate的下面方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor redColor];
label.frame = CGRectMake(0, 100, 200, 100);
label.font = [UIFont systemFontOfSize:11];
label.numberOfLines = 0;
[[[self.window.rootViewController.childViewControllers firstObject] view] addSubview:label];

// launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象
UILocalNotification *note = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (note) {
label.text = @"点击本地通知启动的程序";
NewViewController *homeVC = [self.window.rootViewController.childViewControllers firstObject];
[homeVC performSegueWithIdentifier:@"home2detail" sender:note];
} else {
label.text = @"直接点击app图标启动的程序";
}
self.label = label;
return YES;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: