1.关于推送的几个证书。http://www.mobile-open.com/2016/931624.html
(1)创建 App ID,如果 ID 已经存在可以直接跳过此步骤。
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104738262-646074736.png)
为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104729059-1056876915.png)
根据实际情况完善 App ID 信息并提交,注意此处需要指定具体的 Bundle ID 不要使用通配符。
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104710010-842069540.png)
(2)新建证书需要注意选择证书种类(开发证书用于开发和调试使用,生产证书用于 App Store 发布)
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104659994-734121839.png)
点击 Continue 后选择证书对应的应用ID,然后继续会出现“About Creating a Certificate Signing Request (CSR)”。
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104642805-1372178310.png)
根据它的说明创建打开KeychainAccess 创建 Certificate Signing Request
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104619741-381872107.png)
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104605646-2055845953.png)
继续返回Apple developer 网站点击 Continue ,上传刚刚生成的 .certSigningRequest 文件生成 APNs Push Certificate。
下载并双击打开证书,证书打开时会启动“钥匙串访问”工具。
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104554224-1269823337.png)
右击刚刚生成的证书,导出p12文件(一共有2个P12文件,导出步骤一样的)。注意:
导出证书时要选中证书文件,不要展开private key
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104530519-1675399382.png)
(3)Provisioning Profile的创建
创建Provisioning Profile的前提,已在Apple Developer网站创建待发布应用所使用的Bundle ID的App ID,且为该App ID创建了APNs证书,如下图:
在苹果开发者账号的Provisioning Profile页面点击下图按钮,创建Provisioning Profile
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104509080-1254212648.png)
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104457188-1721757294.png)
双击下载下来的Provisioning Profile,添加到xcode。
到此为止,证书创建完成。
1.进入极光的官网,注册,登录,并新建一个应用:https://www.jiguang.cn/
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104202567-1001844847.png)
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104149910-370893792.png)
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104140956-1364848606.png)
到这里应用创建完成。
(4)配置项目:
(1)允许Xcode7支持Http传输方法
如果您使用的是2.1.9以后的版本则不需要配置此步骤
如果用的是Xcode7或更新版本,需要在App项目的plist手动配置下key和值以支持http传输。
全局配置
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict
(2)配置证书和开启后台推送
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104100125-527574577.png)
开启Remote notifications,需要在Xcode 中修改应用的 Capabilities 开启Remote notifications
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009104100062-1638821188.png)
3.SDK集成步骤(参照官方文档:http://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/)
下面便是代码部分
在Appdelegate.m中导入头文件#import “JPUSHService.h”
在didFinishLaunchingWithOptions方法中写入以下代码,有的地方要按你自己的信息填
1 // Required 2 if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { 3 //可以添加自定义categories 4 [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |UIUserNotificationTypeSound |UIUserNotificationTypeAlert)categories:nil]; 5 } else { 6 //categories 必须为nil 7 [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert)categories:nil]; 8 } 9 10 [JPUSHService setupWithOption:launchOptions appKey:你的appKey(字符串),在极光的应用详情中可以看到" channel:@""(这个不填就行) apsForProduction:这个值生产环境为YES,开发环境为NO(BOOL值)]; 11 12 13 14 创建 15 16 -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 17 18 19 方法中注册设备(去掉这个) 20 21 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 22 //这个方法是设置别名和tag 可省 23 // [JPUSHService setTags:nil alias:@"WzxJiang" fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) { 24 // NSLog(@"rescode: %d, tags: %@, alias: %@ ", iResCode, iTags , iAlias); 25 // }]; 26 // Required 27 [JPUSHService registerDeviceToken:deviceToken]; 28 } 29 30 31 32 创建 33 34 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler: 35 36 37 App在后台时收到推送时的处理 38 39 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 40 //iOS 7及之后才能用,现在没人适配iOS6了吧... 41 // IOS 7 Support Required 42 [JPUSHService handleRemoteNotification:userInfo]; 43 completionHandler(UIBackgroundFetchResultNewData); 44 } 45 46 47 48 在applicationWillEnterForeground方法(App即将进入前台)中将小红点清除 49 50 - (void)applicationWillEnterForeground:(UIApplication *)application { 51 NSLog(@"进入前台"); 52 [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 53 } 54 56 57 创建 58 59 didFailToRegisterForRemoteNotificationsWithError 60 61 62 方法,处理接收推送错误的情况(一般不会…) 63 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { 64 //Optional 65 NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error); 66 }
4.测试推送结果:
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009103908008-60678274.png)
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009103855585-303624111.png)
注意要在真机上运行,如果能够收到自己推送的消息,极光的集成就算完成了。
1.问题:
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009103809613-1061992575.png)
解决:
双击证书:
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009103759472-1870094427.png)
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009103756800-650312255.png)
![](https://images2015.cnblogs.com/blog/979869/201610/979869-20161009103726360-1998234362.png)
2.应用在前台的时候是收不到消息,也没有小红点提示的,应用在后台或者杀死的情况下是可以正常接收到消息的。
据说在iOS 10之后是没有这个问题了,不过目前由于项目问题还没有进行ios10的适配,希望能够解决这个问题吧,对于集成极光推送有问题的小伙伴可以提出来一起讨论,共同进步。