首页 > 代码库 > iOS 极光推送

iOS 极光推送

1.关于推送的几个证书。http://www.mobile-open.com/2016/931624.html
进入开发者中心:https://developer.apple.com/account/ios/identifier/bundle,
(1)创建 App ID,如果 ID 已经存在可以直接跳过此步骤。
          技术分享技术分享
为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。
技术分享

 

技术分享
根据实际情况完善 App ID 信息并提交,注意此处需要指定具体的 Bundle ID 不要使用通配符。
技术分享
 技术分享
(2)新建证书需要注意选择证书种类(开发证书用于开发和调试使用,生产证书用于 App Store 发布)
技术分享

 

技术分享
点击 Continue 后选择证书对应的应用ID,然后继续会出现“About Creating a Certificate Signing Request (CSR)”。
技术分享

 

技术分享
根据它的说明创建打开KeychainAccess 创建 Certificate Signing Request
 技术分享
技术分享

 

技术分享
技术分享
继续返回Apple developer 网站点击 Continue ,上传刚刚生成的 .certSigningRequest 文件生成 APNs Push Certificate。
下载并双击打开证书,证书打开时会启动“钥匙串访问”工具。
技术分享

 

技术分享
右击刚刚生成的证书,导出p12文件(一共有2个P12文件,导出步骤一样的)。注意:
导出证书时要选中证书文件,不要展开private key
 技术分享

技术分享

 

 
技术分享
技术分享
(3)Provisioning Profile的创建
          创建Provisioning Profile的前提,已在Apple Developer网站创建待发布应用所使用的Bundle ID的App ID,且为该App ID创建了APNs证书,如下图:
在苹果开发者账号的Provisioning Profile页面点击下图按钮,创建Provisioning Profile
技术分享

 

技术分享

 

技术分享
技术分享
双击下载下来的Provisioning Profile,添加到xcode。
到此为止,证书创建完成。
 
1.进入极光的官网,注册,登录,并新建一个应用:https://www.jiguang.cn/
技术分享

 

技术分享

 

技术分享

 

技术分享
技术分享
技术分享
到这里应用创建完成。
 
 
(4)配置项目:
 
(1)允许Xcode7支持Http传输方法
如果您使用的是2.1.9以后的版本则不需要配置此步骤
如果用的是Xcode7或更新版本,需要在App项目的plist手动配置下key和值以支持http传输。

全局配置

  <key>NSAppTransportSecurity</key> 
  <dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
  </dict
 
(2)配置证书和开启后台推送
技术分享
 
技术分享

 开启Remote notifications,需要在Xcode 中修改应用的 Capabilities 开启Remote notifications

技术分享

 

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 *)deviceToken17 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, \ntags: %@, \nalias: %@\n", iResCode, iTags , iAlias);25     //   }];26     // Required27     [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 didFailToRegisterForRemoteNotificationsWithError60 61 62 方法,处理接收推送错误的情况(一般不会…)63 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {64     //Optional65     NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);66 }
4.测试推送结果:
 
技术分享
技术分享
技术分享技术分享

 

 技术分享技术分享
技术分享
注意要在真机上运行,如果能够收到自己推送的消息,极光的集成就算完成了。
 
1.问题:
 技术分享
技术分享
解决:
双击证书:
技术分享

 

技术分享
 技术分享

 

技术分享
 
技术分享
 技术分享

 

2.应用在前台的时候是收不到消息,也没有小红点提示的,应用在后台或者杀死的情况下是可以正常接收到消息的。
据说在iOS 10之后是没有这个问题了,不过目前由于项目问题还没有进行ios10的适配,希望能够解决这个问题吧,对于集成极光推送有问题的小伙伴可以提出来一起讨论,共同进步。

iOS 极光推送