远程推送

所有的苹果设备,在联网状态下,都会与苹果的服务器建立长连接
长连接的作用
时间校准
系统升级
查找我的iPhone


长连接的好处
数据传输速度快
数据保持最新状态


一.开发iOS程序的推送功能, iOS端需要做的事
1.请求苹果获得deviceToken
2.得到苹果返回的deviceToken,发送deviceToken给公司的服务器

  1. 监听用户对通知的点击

二.调试iOS的远程推送功能, 必备条件:
1.真机

2.调试推送需要的证书文件
1> aps_development.cer : 某台电脑就能调试某个app的推送服务
2> iphone5_qq.mobileprovision : 某台电脑就能利用某台设备调试某个程序

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


配置证书

远程推送_第1张图片
Paste_Image.png

真机调试用的APNs SSL证书:要在哪台电脑上调试具有推送服务的App

远程推送_第2张图片
Paste_Image.png

发布程序用的APNs SSL证书:要在哪台电脑上发布具有推送服务的App

远程推送_第3张图片
Paste_Image.png

最终得到2个APNs SSL证书
APNs Development iOS:真机调试用的证书
APNs Production iOS:发布程序用的证书

Paste_Image.png

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

远程推送_第4张图片
Paste_Image.png

证书配置04 – 安装

远程推送_第5张图片
Paste_Image.png


注册远程推送通知
客户端如果想接收APNs的远程推送通知,必须先注册(得到用户的授权)
一般在App启动完毕后就马上注册

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 注册远程通知
       UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound;
    [application registerForRemoteNotificationTypes:type];
    return YES;
}

如果是第一次注册,会弹出对话框

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

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

app并没有关闭,一直隐藏在后台
让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;

app已经被关闭(进程已死)
启动app,启动完毕会调用AppDelegate的下面方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
launchOptions参数通过UIApplicationLaunchOptionsRemoteNotificationKey取出服务器返回的字典内容



官方文档:

远程推送_第6张图片
Paste_Image.png

远程推送_第7张图片
Paste_Image.png



PushMeBaby
PushMeBaby是一款用来测试ANPs的开源Mac项目
它充当了服务器的作用,用法非常简单
它负责将内容提交给苹果的APNs服务器,苹果的APNs服务器再将内容推送给用户的设备

PushMeBaby的主页
https://github.com/stefanhafeneger/PushMeBaby

你可能感兴趣的:(远程推送)