iOS的本地推送和远程推送
(文章转载自:http://www.zhangfei.tk/2015/10/12/%E6%8E%A8%E9%80%81/)
iOS的本地推送和远程推送
推送也叫推送通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径。有远程推送和本地推送之分。本地推送就是由应用程序发起的推送通知,不经过服务器。远程推送是由服务器发送的消息经过苹果的APNS(Apple Push Notification Service)服务远程推送给设备。
关于推送
推送也叫推送通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径。有远程推送和本地推送之分。本地推送就是由应用程序发起的推送通知,不经过服务器。远程推送是由服务器发送的消息经过苹果的APNS(Apple Push Notification Service)服务远程推送给设备。
本地推送
本地推送不依赖服务器,只需要在程序里面写好触发推送通知的逻辑就可以了。添加一个本地通知的代码如下:
1
|
UILocalNotification *localNotification = [[UILocalNotification alloc] init];//初始化本地通知
|
如果想要取消本地推送,可以用下面的代码进行取消,既可以通过获取userInfo信息取消特定的消息,也可以取消全部的消息。
1
|
UIApplication *app = [UIApplication sharedApplication];
|
收到消息后该如何处理呢?不管是在程序正在使用或者退出的状态下,都是通过UIApplication的代理方法进行处理,该方法如下:
1
|
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
|
远程推送
iOS的远程通知和安卓不一样,iOS要通过苹果公司提供的推送服务(APNS)才能把想要推送的消息从服务器那边推送到iPhone设备上。因此还得和苹果的APNS打交道。要在程序中添加推送服务需要配置不少东西,具体步骤如下:
给应用程序的App ID添加Push Notifications服务—>配置对应的证书—>配置对应Provisioning Profiles文件—>获取Device Token—>服务器端通过deviceToken和APNS建立SSL连接—>服务器端给APNS服务器发送推送消息
配置Push Notifications服务和相应证书请参考教你一步一步获取App ID,配置文件Provisioning Profiles文件请移步教你一步一步获取Provisioning Profiles。
获取deviceToken需要在程序里面用代码来解决。首先注册远程推送通知,通过UIApllication的代理方法获取,代码如下:
1
|
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
|
注意:在iOS8以后还要添加下面的方法
1
|
#ifdef __IPHONE_8_0
|
注册成功以后通过UIApplication的代理方法获取deviceToken。获取deviceToken的格式是这样的:75e84eed c0451b39 5d8eec91 03154347 3ad56aee 97f8f565 9f027842 b78f8c77
,并且要注意把deviceToken给后台的时候要去掉两边的尖括号和中间的空格。
1
|
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
|
但是如果注册远程通知失败后会调用下面的代理方法。
1
|
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
|
程序正在使用或者退出的状态下,都会调用UIApplication的代理方法进行处理,该方法如下:
1
|
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
|
推送远程消息
如果写demo的话,可以用SmartPush进行模拟测试。想了解SmartPush的详细使用请移步到使用SmartPush进行iOS远程推送测试。如果你会Python的话,你可以参考一下这个代码来推送消息。
总结
- 关于推送流程可以参考苹果官方文档,那里有详细的流程解释。
- 在进行推送处理时要注意点击程序图标进入程序和点击消息进入程序是不同的,前者不会调用代理方法,需要从
didFinishLaunchingWithOptions:
方法的参数`launchOptions进行判断处理。