浅谈iOS的消息推送
创建App ID
要实现远程推送的功能,需要我们创建AppID,推送证书配置等相关操作,我们首先登陆https://developer.apple.com 进入开发者中心
点击+号添加之后需要我们输入Name和Boundle ID,那么我们自己设定 但是boundle ID 就要和我们的工程的boundle identifier要是一样的
然后需要我们在App Serviers里面勾线Push Notification选项->continue->submit->done此时我们的APPID就创建成功了
创建推送证书和描述文件
由于只是测试我们选择Developement
->
->App ID就是我们上面创建的App ID->点击continue->continue
在Generate your certificate.页面会提示我们上传一个CSR文件,那么怎么去生成一个CSR文件呢?
这个时候我们就需要我们的钥匙串了,打开钥匙串
接下来 电子邮件地址必填 我们也可以随便填 保存到桌面上,完成
然后我们点击choose file..上传CSR文件->continue->DownLoad下载到桌面上
接下来我们创建描述文件 点击+创建
选择开发环境->continue
选择我们的App ID ->continue
->
->
->我们不知道具体是哪一个的话 可以选择全部
->
->Continue然后DownLoad
到这里我们的证书和描述文件都已经创建好了 我们双击我们的证书,在钥匙串里面可以查看证书信息,双击描述文件 加到Xcode里面Build Settings->Provisioning Podfile 选择我们的证书,code single identifier 选择我们的开发证书
->
推送的实现
一个应用程序要想实现推送的话 就需要注册推送通知 远程推送 在iOS8之前和之后的注册方式不一样 所以要做系统版本适配 根据不同的iOS版本 执行不同的注册代码
在APPDelegate里
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//条件编译 // 条件编译指令:根据判断条件,编译不同区块的代码
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= _IPHONE80_
//1 配置远程推送收到消息后的状态:有脚标 有声音 有弹框
UIUserNotificationSettings *set = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
//2 将配置添加进远程托送的设置中
[[UIApplication sharedApplication]registerUserNotificationSettings:set];
//3 注册远程推送
[[UIApplication sharedApplication]registerForRemoteNotifications];
#else
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
#endif
return YES;
}
这个时候运行我们的程序会看到如下提示信息
此时用户点击允许之后 应用程序会向苹果APNS注册,获取令牌,令牌唯一标识当前的设备
//远程推送注册成功后 会执行这个方法 通过改代理将APNS提供的DeviceToken传进APP 进而由APP转发给推送服务器
//从苹果APNS获取Token成功
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
NSLog(@"远程推送能力注册成功,deviceToken:%@",deviceToken);
}
//注册失败(获取Token)的话会执行的方法(设备不具备推送能力)
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
NSLog(@"远程推送注册失败 原因是:%@",error);
}
//当程序收到远程推送消息后 执行该方法 在这个方法中接收远程推送进来的内容(死亡)
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@"推送内容是:%@",userInfo);
}
获取到苹果的Token之后 我们需要把token上传我们的服务器 因为这样 我们的服务器才能告诉苹果APNS需要给那些设备发送推送消息,下面是一张截屏 但此时是2016年,我们把token传递给服务器的时候是需要去掉<>和空格 这些不再啰嗦
腾讯信鸽第三方的推送服务
下面我们来探讨一下 使用腾讯第三方的信鸽进行推送是怎么实现的
->点接入应用->点应用配置,我们会看到应用配置里面有我们应用的各种信息 ,而且需要我们上传开发证书
点击上传我们看到需要的是一个pem格式的证书 那么我们怎么获取pem格式的证书呢?这时候我们的好朋友钥匙串又粉墨登场了
->
->
此时我们就获得了一个.p12的文件 我们把.p12转化成pem格式文件的话 需要用到终端我们切换到桌面上 在终端输入:openssl pkcs12 -in Certificates.p12 -out Certificates.pem -nodes 并且将桌面上p12的名字进行替换 然后回车,这个时候需要我们输入一个密码 这个密码就是我们进行导出p12文件是的密码 然后在回车 此时.pem的文件就已经生成好了 我们在信鸽的配置平台里面点击上传就可以了 上传成功的话 会显示
开发证书验证通过后 在配置平台会显示验证通过
我们需要在AppDelegate进入信鸽的头文件
#import "XGPush.h"
注册信鸽
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//初始化信鸽
[XGPush startApp:2200189030 appKey:@"I958DSYJ18GA"];
return YES;
}
此时还没完,我们需要在信鸽配置平台添加一台设备,通过以下方法 我们能过的一个设备的Token
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
[XGPush registerDevice:deviceToken];//信鸽获取Token
NSLog(@"远程推送能力注册成功,deviceToken:%@",deviceToken);
}
接下来我们就可以进行推送了 我们点->创建通知(信鸽配置平台上),推送环境我们选开发环境就行了 其他的自己设定
点击-> 确认推送之后就可以进行推送了 ,此时测试机可以收到信息,但是用户点击了信息之后如何处理呢?需要执行-(void)application:(UIApplication *)application didReceiveRemoteNotification:方法 userInfo里面就是我们推送的信息
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@"推送内容是:%@",userInfo);
}