制作远程推送证书以及用极光进行远程推送教程
昨天公司项目要加入远程推送功能,自己做显然会很麻烦,所以用了极光的远程推送,下面我会讲如何制作推送证书并使用极光推送进行远程推送.
![](https://img.haomeiwen.com/i2152349/906d33b7d76677ff.png)
远程推送
先讲讲怎么下载推送证书吧(前面的很简单要是知道的可以直接往下滑,简书竟然不能页内跳转…)
网上下载推送证书的教程一般都是几年前的,现在下载推送证书很简单
首先进入苹果开发者中心
点击Member Center
![](https://img.haomeiwen.com/i2152349/2b4aa30d6a5cfca3.png)
Member Center
登录后点击Certificates,Identifiers & Profiles
![](https://img.haomeiwen.com/i2152349/83fd76d1f39dfb62.png)
Certificates,Identifiers & Profiles
任意点击一个
![](https://img.haomeiwen.com/i2152349/06fcb52fff781ded.png)
创建App ID
![](https://img.haomeiwen.com/i2152349/b9c3b6e3a7ff974f.png)
创建App ID
App ID的名字可以随便取,Bundle ID一定要注意,要推送的App项目中的Bundle ID一定要是这个Bundle ID
![](https://img.haomeiwen.com/i2152349/4f46d7ed284fbc62.png)
App ID的名字可以随便取,Bundle ID一定要注意,要推送的App项目中的Bundle ID一定要是这个Bundle ID
App Services可以现在勾上Push Notifications,也可以后面再改,然后点继续
![](https://img.haomeiwen.com/i2152349/522b77afa6531d8c.png)
App Services可以现在勾上Push Notifications,也可以后面再改
提交(我之前勾选了Push Notifications,所有它现在是橙色的,不然应该是灰色)
![](https://img.haomeiwen.com/i2152349/cfd1ee9e6e91fbaf.png)
提交(我之前勾选了Push Notifications,所有它现在是橙色的,不然应该是灰色)
出来后点击你刚创建的App ID,然后点Edit
![](https://img.haomeiwen.com/i2152349/930a1ab5c37ff4f6.png)
点击你刚创建的App ID
![](https://img.haomeiwen.com/i2152349/68c9e9293b6d0011.png)
点Edit
创建开发环境和生产环境的证书
![](https://img.haomeiwen.com/i2152349/45d26cac04a4df93.png)
创建开发环境和生产环境的证书
这里讲一下什么是开发环境和生产环境:
你用Xcode编译安装的就是开发环境,用二维码或者App Store下载的就是生产环境.
这里点继续后会发现需要你上传一个证书
![](https://img.haomeiwen.com/i2152349/588a4be5808a3c94.png)
需要你上传一个证书
现在我们来制作这个证书
打开MAC自带的钥匙串访问(Launchpad->其他->钥匙串访问)
点开后左上角打开证书助手,从证书颁发机构请求证书
![](https://img.haomeiwen.com/i2152349/12f862e81efb1021.png)
左上角打开证书助手,从证书颁发机构请求证书
注意一定要存储到磁盘
![](https://img.haomeiwen.com/i2152349/0451f6449fa36438.png)
注意一定要存储到磁盘
然后存储就行了,存在哪都可以
把刚才存储的证书上传了
![](https://img.haomeiwen.com/i2152349/2ec874b6e0b822c9.png)
把刚才存储的证书上传了
下载下来,点击Done,又回跳回到开始的界面,然后还是选择你创建的App ID然后Edit,开发环境和生产环境推送证书的创建流程是一样的,自己按着步骤就能把证书全部创建并下载成功.
![](https://img.haomeiwen.com/i2152349/95130fb806d8491e.png)
下载下来
这时候Push Notifications应该是绿的了
![](https://img.haomeiwen.com/i2152349/26033be7e6a53d71.png)
这时候Push Notifications应该是绿的了
打开钥匙串访问,你会发现你多了这两个证书
![](https://img.haomeiwen.com/i2152349/c20fb7ed71be5230.png)
打开钥匙串访问,你会发现你多了这两个证书
右键分别导出它们
![](https://img.haomeiwen.com/i2152349/d4a1214c364dea89.png)
右键分别导出它们
设置密码
![](https://img.haomeiwen.com/i2152349/41ae25fda500e020.png)
设置密码
导出成功后,你就能看到它们了,记得命好名(最好用英文)
推送证书的制作到这就结束了,下面讲怎么使用极光推送进行远程推送
怎么使用极光推送进行远程推送
在极光官网注册极光推送
创建一个应用
在应用配置中导入两个证书(我这是已经验证了的,不然就是让你上传证书的按钮)
Bundle ID是导入证书后自动出现的,证书最好一个一个上传不然可能会出现验证失败的问题.
![](https://img.haomeiwen.com/i2152349/00581e01e5c2fc0d.png)
导入两个证书
然后下载SDK
把SDK中的Lib文件夹导入你的项目中,记得勾选Copy
![](https://img.haomeiwen.com/i2152349/3bb771ed47bddaf5.png)
记得勾选Copy
在Build Phases中导入以下库
![](https://img.haomeiwen.com/i2152349/481caa7d127d817c.png)
在Build Phases中导入以下库
修改Capabilities
打开远程推送
![](https://img.haomeiwen.com/i2152349/5fde69ba40018342.png)
打开远程推送
打开Background Modes
![](https://img.haomeiwen.com/i2152349/848a80fabb88d3b8.png)
打开Background Modes
修改Bundle ID 以及选择Team
![](https://img.haomeiwen.com/i2152349/0c77b15b4025e15a.png)
修改Bundle ID 以及选择Team
下面便是代码部分
在Appdelegate.m中导入头文件
#import "JPUSHService.h"
在didFinishLaunchingWithOptions方法中写入以下代码,有的地方要按你自己的信息填
// Required
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//可以添加自定义categories
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |UIUserNotificationTypeSound |UIUserNotificationTypeAlert)categories:nil];
} else {
//categories 必须为nil
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert)categories:nil];
}
[JPUSHService setupWithOption:launchOptions appKey:你的appKey(字符串),在极光的应用详情中可以看到" channel:@""(这个不填就行) apsForProduction:这个值生产环境为YES,开发环境为NO(BOOL值)];
1
2
3
4
5
6
7
8
9
10// Required
if([[UIDevicecurrentDevice].systemVersionfloatValue]>=8.0){
//可以添加自定义categories
[JPUSHServiceregisterForRemoteNotificationTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert)categories:nil];
}else{
//categories 必须为nil
[JPUSHServiceregisterForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)categories:nil];
}
[JPUSHServicesetupWithOption:launchOptionsappKey:你的appKey(字符串),在极光的应用详情中可以看到" channel:@""(这个不填就行)apsForProduction:这个值生产环境为YES,开发环境为NO(BOOL值)];
创建-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法中注册设备
(去掉这个)- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
//这个方法是设置别名和tag 可省
// [JPUSHService setTags:nil alias:@"WzxJiang" fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
// NSLog(@"rescode: %d, ntags: %@, nalias: %@n", iResCode, iTags , iAlias);
// }];
// Required
[JPUSHService registerDeviceToken:deviceToken];
}
1
2
3
4
5
6
7
8(去掉这个)-(void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
//这个方法是设置别名和tag 可省
// [JPUSHService setTags:nil alias:@"WzxJiang" fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
// NSLog(@"rescode: %d, ntags: %@, nalias: %@n", iResCode, iTags , iAlias);
// }];
// Required
[JPUSHServiceregisterDeviceToken:deviceToken];
}
创建- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void
(^)(UIBackgroundFetchResult))completionHandler:App在后台时收到推送时的处理
(去掉这个)- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
//iOS 7及之后才能用,现在没人适配iOS6了吧...
// IOS 7 Support Required
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
1
2
3
4
5
6(去掉这个)-(void)application:(UIApplication *)applicationdidReceiveRemoteNotification:(NSDictionary *)userInfofetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler{
//iOS 7及之后才能用,现在没人适配iOS6了吧...
// IOS 7 Support Required
[JPUSHServicehandleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
在applicationWillEnterForeground方法(App即将进入前台)中将小红点清除
(去掉这个)- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"进入前台");
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
}
1
2
3
4(去掉这个)-(void)applicationWillEnterForeground:(UIApplication *)application{
NSLog(@"进入前台");
[UIApplicationsharedApplication].applicationIconBadgeNumber=0;
}
创建didFailToRegisterForRemoteNotificationsWithError方法,处理接收推送错误的情况(一般不会…)
(去掉这个)- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
//Optional
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}
1
2
3
4(去掉这个)-(void)application:(UIApplication *)applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
//Optional
NSLog(@"did Fail To Register For Remote Notifications With Error: %@",error);
}
代码都已经弄好了,现在推送以下,(注意只能是真机调试)
在极光上点击发送通知,注意是开发环境
![](https://img.haomeiwen.com/i2152349/2a4458dcd5f075eb.png)
点击发送通知,注意是开发环境
然后你就能收到推送了
![](https://img.haomeiwen.com/i2152349/77b8e7b6ff6e32ee.jpg)
然后你就能收到推送了