ios编程技术收集ios积累技术

iOS-通知相关

2016-03-06  本文已影响1171人  iOS_愛OS

推送通知

1.NSNotification是抽象的,不可见的
2.推送通知是可见的(能用肉眼看到)

1.本地推送通知(LocalNotification)
2.远程推送通知(RemoteNotification)

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

1.在屏幕顶部显示一块横幅


在屏幕顶部显示一块横幅.png

2.在屏幕中间弹出一个UIAlertView


在屏幕中间弹出一个UIAlertView .png
还可以在呈现推送通知的同时播放音效
3.锁屏时也照样呈现 锁屏时也照样呈现 .png
4.呈现推送通知的同时,还可以更新app图标的数字 呈现推送通知的同时,还可以更新app图标的数字 .png
5.用户接收的推送通知,都会展示在“通知中心” 用户接收的推送通知,都会展示在“通知中心”.png

1.在屏幕顶部显示一块横幅(显示具体内容)
2.在屏幕中间弹出一个UIAlertView(显示具体内容)
3.在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
4.更新app图标的数字(说明新内容的数量)
5.播放音效(提醒作用)

显示横幅还是UIAlertView,取决于用户的设置


显示横幅还是UIAlertView,取决于用户的设置 1.png
显示横幅还是UIAlertView,取决于用户的设置 2.png
显示横幅还是UIAlertView,取决于用户的设置 3.png
显示横幅还是UIAlertView,取决于用户的设置 4.png

用户也可以决定是否要开启以下4个功能:
1.显示App图标数字
2.播放音效
3.锁屏显示
4.显示在“通知中心”

1.发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来
2.点击推送通知后,默认会自动打开发出推送通知的app
3.不管app打开还是关闭,推送通知都能如期发出

本地推送通知

顾名思义,就是不需要联网就能发出的推送通知(不需要服务器的支持)

常用来定时提醒用户完成一些任务,比如
清理垃圾、记账、买衣服、看电影、玩游戏

如何发出本地推送通知

UILocalNotification*ln= [[UILocalNotificationalloc] init];

n设置本地推送通知属性
p推送通知的触发时间(何时发出推送通知)
@property(nonatomic,copy) NSDate*fireDate;
p推送通知的具体内容
@property(nonatomic,copy) NSString*alertBody;
p在锁屏时显示的动作标题(完整标题:“滑动来”+ alertAction)
@property(nonatomic,copy) NSString*alertAction;
p音效文件名
@property(nonatomic,copy) NSString*soundName;
papp图标数字
@property(nonatomic) NSIntegerapplicationIconBadgeNumber;
n调度本地推送通知(调度完毕后,推送通知会在特地时间fireDate发出)
[[UIApplicationsharedApplication] scheduleLocalNotification:ln];

n获得被调度(定制)的所有本地推送通知
@property(nonatomic,copy) NSArray*scheduledLocalNotifications;
(已经发出且过期的推送通知就算调度结束,会自动从这个数组中移除)

n取消调度本地推送通知
- (void)cancelLocalNotification:(UILocalNotification*)notification;
- (void)cancelAllLocalNotifications;

n立即发出本地推送通知
- (void)presentLocalNotificationNow:(UILocalNotification*)notification;
n每隔多久重复发一次推送通知
@property(nonatomic) NSCalendarUnitrepeatInterval;

n点击推送通知打开app时显示的启动图片
@property(nonatomic,copy) NSString*alertLaunchImage;

n附加的额外信息
@property(nonatomic,copy) NSDictionary*userInfo;

n时区
@property(nonatomic,copy) NSTimeZone*timeZone;
(一般设置为[NSTimeZonedefaultTimeZone],跟随手机的时区)
n当用户点击本地推送通知,会自动打开app,这里有2种情况
papp并没有关闭,一直隐藏在后台
ü让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
- (void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification;
p
papp已经被关闭(进程已死)
ü启动app,启动完毕会调用AppDelegate的下面方法
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
²launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象

远程推送通知

顾名思义,就是从远程服务器推送给客户端的通知(需要联网)
远程推送服务,又称为APNs(Apple Push Notification Services)
为什么需要远程推送通知?
传统获取数据的局限性
只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容
远程推送通知可以解决以上问题
不管用户打开还是关闭app,只要联网了,都能接收到服务器推送的远程通知

  • 所有的苹果设备,在联网状态下,都会与苹果的服务器建立长连接
  • 什么是长连接
    只要联网了,就一直建立连接
  • 长连接的作用
 -  时间校准
 -  系统升级
 -  查找我的iPhone
 -  .....
  • 长连接的好处

上两张推送的原理图

D43C70DA-2431-4D8F-A43A-81B2D71D739F.png
AD95B25B-4C13-4A4F-B9B8-53B5C98A05CF.png

官方文档的解释

官方文档01.png 官方文档02.png
官方文档03.png
官方文档04.png
官方文档05.png

证书配置

一.开发iOS程序的推送功能,iOS端需要做的事
1.请求苹果获得deviceToken
2.得到苹果返回的deviceToken
3.发送deviceToken给公司的服务器
4.监听用户对通知的点击

二.调试iOS的远程推送功能,必备条件:
1.真机
2.调试推送需要的证书文件

1 aps_development.cer: 某台电脑就能调试某个app的推送服务
2 ios_development.cer:让电脑具备真机调试的能力(调试设备)
3 iphone5_qq.mobileprovision:某台电脑就能利用某台设备调试某个程序

三.发布具有推送服务的app

1 aps_production.cer:如果发布的程序中包含了推送服务,就必须安装这个证书
2 ios_distribution.cer : 让电脑具备发布程序的能力
3 qq.mobileprovision : 某台电脑就能发布某个程序

证书配置01 – 创建AppID

p远程推送只能在真机上测试!因此先要保证真机调试的环境没有问题!
p
n远程推送的第一步是要创建App ID
p目的是说明哪个App需要使用推送服务
p为远程推送服务创建的AppID一定要是全称,不能带有*

证书配置-01.png 证书配置-02.png

证书配置02 – 为AppID创建APNs SSL证书

证书配置-03.png 证书配置-04.png 证书配置-05.png 证书配置-06.png 证书配置-07.png 证书配置-08.png

pAPNsDevelopmentiOS:真机调试用的证书
pAPNsProductioniOS:发布程序用的证书

证书配置-09.png

证书配置03 – 生成描述文件

证书配置-10.png 证书配置-11.png 证书配置-12.png

证书配置04 –安装

paps_development.cer:真机调试用的
paps_production.cer:发布程序用的
pnetease_news_iphone5_home.mobileprovision:描述文件

证书配置-13.png

注册远程推送通知

//这个方法在iOS8已经废弃  
  - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
 //注册远程通知
      UIRemoteNotificationTypetype= UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeBadge| UIRemoteNotificationTypeSound;
   [application registerForRemoteNotificationTypes:type];
   returnYES;
} 
```

```
//使用下面的代码
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:userSettings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    } else {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
    }
发送通知.png

注册远程推送通知

n注册成功后会调用AppDelegate的下面方法,得到设备的deviceToken
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
   NSLog(@"%@", deviceToken);
}

点击远程推送通知

n当用户点击远程推送通知,会自动打开app,这里有2种情况
papp并没有关闭,一直隐藏在后台
ü让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo;
p
papp已经被关闭(进程已死)
ü启动app,启动完毕会调用AppDelegate的下面方法
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
²launchOptions参数通过UIApplicationLaunchOptionsRemoteNotificationKey取出服务器返回的字典内容
上一篇下一篇

猜你喜欢

热点阅读