注意:
这里的推送通知和NSNotificaton有所区别。NSNotification是抽象的不可见的。推送通知是可见的(能用肉眼看见的)
推送通知分两种:本地推送通知(local notification)和远程推送通知(remote notification)
推送通知:可以让不在前台运行的app(在后台,或者是关闭),告知用户app内部发生了什么事情。
本地推送通知:不需要联网就能发出的推送通知(不需要服务器的支持)。常用于定时提醒用户一些事情。
远程推送通知:不管打开还是关闭app,只要联网都能接收到服务器的远程消息。手机把设备的udid和app的bundle id发送给苹果服务器,苹果服务器通过加密生成devicetoken。手机通过app给服务器发送消息时候把devicetoken顺便发送过去,服务器保存此devicetoken。当app关闭时候,服务器把消息和devicetoken发送给苹果服务器,苹果服务器通过此devicetoken推送给手机。
****不管是调试还是发布带有推送功能的app,都要配置推送证书和描述文件。
先获取一个许可,然后注册一个远程通知,然后在代理方法中接收devicetoken
注意事项:ios8以上必须注册一个用户许可才可发送通知。(下面截图代码,不管是本地或者远程ios8以上都必须加)
1.本地通知具体代码:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//把app右上角的显示的通知数字删除
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
- (IBAction)addLocalNote {
<span style="white-space:pre"> </span>//本地通知对象的属性如下:
/*
@property(nonatomic,copy) NSDate *fireDate; // 设置本地推送的时间
@property(nonatomic,copy) NSTimeZone *timeZone; // 时区
@property(nonatomic) NSCalendarUnit repeatInterval; // 重复多少个单元发出一次
@property(nonatomic,copy) NSCalendar *repeatCalendar; // 设置日期
@property(nonatomic,copy) CLRegion *region NS_AVAILABLE_IOS(8_0); // 比如某一个区域的时候发出通知
@property(nonatomic,assign) BOOL regionTriggersOnce NS_AVAILABLE_IOS(8_0); // 进入区域是否重复
@property(nonatomic,copy) NSString *alertBody; 消息的内容
@property(nonatomic) BOOL hasAction; 是否显示alertAction的文字(默认是YES)
@property(nonatomic,copy) NSString *alertAction; 设置锁屏状态下,显示的一个文字
@property(nonatomic,copy) NSString *alertLaunchImage; 启动图片
@property(nonatomic,copy) NSString *soundName; UILocalNotificationDefaultSoundName
@property(nonatomic) NSInteger applicationIconBadgeNumber; 应用图标右上角的提醒数字
// user info
@property(nonatomic,copy) NSDictionary *userInfo;
*/
// 1.创建本地通知
UILocalNotification *localNote = [[UILocalNotification alloc] init];
// 1.1.设置什么时间弹出
localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
// 1.2.设置弹出的内容
localNote.alertBody = @"吃饭了吗?";
// 1.3.设置锁屏状态下,显示的一个文字
localNote.alertAction = @"快点打开";
// 1.4.显示启动图片
localNote.alertLaunchImage = @"123";
// 1.5.是否显示alertAction的文字(默认是YES)
localNote.hasAction = YES;
// 1.6.设置音效
localNote.soundName = UILocalNotificationDefaultSoundName;
// 1.7.应用图标右上角的提醒数字
localNote.applicationIconBadgeNumber = 999;
// 1.8.设置UserInfo来传递信息
localNote.userInfo = @{@"alertBody" : localNote.alertBody, @"applicationIconBadgeNumber" : @(localNote.applicationIconBadgeNumber)};
// 2.调度通知
[[UIApplication sharedApplication] scheduleLocalNotification:localNote];
}
添加需求:当用户通过点击通知打开app时候跳到指定页面(点击应用图标打开app还正常跳到主页面)(下面两幅图结合)。
注意点:不管用过通过何种方式打开app都会进入如下方法。但是当通过点击app图标打开时候,方法的参数launchOptions为nil。除此之外的其他方法(本地通知,远程通知,应用间跳转等等)打开app的时候参数launchOptions里面对应的键有值。
2.远程通知
具体代码:
远程推送不需要专门的后端用第三方库即可:用极光推送。进入极光推送官网,下载iosSDK。在根据网站上的指南创建一个自己的应用得到app key,根据步骤操作就可以了。
推