极光推送(手把手教你)

源文件出处
程胖出品——极光推送(手把手教你啊)

iOS开发中不可避免要使用到推送,JPush还是个不错的选择。本文主要介绍极光推送的过程。
写在前面:极光推送本身也有教程,网上也有好多大牛总结,为什么我还要写这篇呢?不知道大家是否有这样的感觉:每次接触一个新东西,如果有那么一两步没有写,可能就无法成功!反正这次的激光推送,有那么一两步让我吃了点苦头,而为什么有这一两步呢?因为大牛们都觉得太简单不需要!!!

鉴于我吃了苦头,所以本篇文章准备把每一块的每个步骤都尽量详细,尽量能够一次上手就可成功。
准备事项:
苹果开发者账号。是要交过99美金的。如果没有账号或者没有交过钱,可以参考这篇博客:AppStrore企业开发者账号完整申请流程。
极光平台账号。像其他平台一样,需要注册一个账号,点我注册账号。
一个Xcode工程。
需要测试机一部。
浏览器一个,方便随时查询信息。

整个步骤过程如下:

  1. 设置并下载证书,包括:
    1.1 真机调试的测试证书1.2 绑定Bundle Identifier1.3 生成开发的推送cer证书1.4 生成开发所需的P12证书1.5 生成生产cer证书1.6 生成生产所需的P12证书1.7 Provisioning Profile配置文件
  2. 配置项目,包括:
    2.1 极光推送上创建应用2.2 下载SDK,导入到Xcode的项目中2.3 导入必要框架2.4 配置PushConfig.plist文件2.5 Xcode7支持http传输的方法2.6 调试代码设置
  3. 极光推送平台发送通知
    3.1 应用在后台的情况下发送通知3.2 使用第三方在应用active状态下获取通知
    1.设置并下载证书,包括:
    1.1 真机调试的测试证书
    首先登录苹果开发者网站,按照下图步骤走:1.1.1进入苹果开发者中心


    1.1.1 进入苹果开发者中心
    1.1.2 输入账号和密码

    1.1.2 输入账号和密码
    1.1.3 点击Certificates & Profiles

    1.1.3 选择创建证书
    1.1.4 选择创建测试证书


    1.1.4 选择创建测试证书
    1.1.5 选择并创建
    粘贴的图像1148x1061 219 KB

    1.1.5 选择并创建
    1.1.6 选择测试证书


    1.1.6 选择测试证书.png
    1.1.7 提示创建一个证书请求文件


    1.1.7 提示创建一个证书请求文件
    1.1.8 打开钥匙串


    1.1.8 打开钥匙串
    1.1.9 从证书颁发机构请求证书


    1.1.9 从证书颁发机构请求证书
    1.1.10 填写邮箱和选存到磁盘


    1.1.10 填写邮箱和选存到磁盘
    1.1.11 找到我们创建的证书请求文件


    1.1.11 找到我们创建的证书请求文件
    1.1.12 选择请求文件后继续下一步


    1.1.12 选择请求文件后继续下一步
    1.1.13 下载测试证书


    1.1.13 下载测试证书
    1.2 绑定Bundle Identifier
    1.2.1 新绑定Bundle Identifier


    1.2.1 新绑定Bundle Identifier
    1.2.2 打开工程找到Bundle Identifier


    1.2.2 打开工程找到Bundle Identifier
    1.2.3 填写Bundle Identifier
    粘贴的图像1148x1061 179 KB

    1.2.3填写Bundle Identifier
    1.2.4 给项目开启推送


    1.2.4 给项目开启推送
    1.2.5 查看证书状态(黄色)


    1.2.5 查看证书状态(黄色)
    1.3 生成开发的推送cer证书
    1.3.1 开始创建开发推送证书


    1.3.1 开始创建开发推送证书
    1.3.2 开发和生产推送证书


    1.3.2 开发和生产推送证书
    1.3.3 选择Bundle Identifier


    1.3.3 选择Bundle Identifier
    1.3.4 选择CSR证书请求文件


    1.3.4 选择CSR证书请求文件
    1.3.5 选择好CSR


    1.3.4 选择CSR证书请求文件
    1.3.6 下载开发推送证书


    1.3.6 下载开发推送证书
    1.3.7 已经可以进行推送测试


    1.3.7 已经可以进行测试推送
    1.4 生成开发所需的P12证书
    1.4.1 双击开发推送证书


    1.4.1 双击开发推送证书
    1.4.2 右击多出的证书


    1.4.2 右击多出的证书
    1.4.3 右键并导出


    1.4.3 右键并导出
    1.4.4 存储


    1.4.4 存储
    1.4.5 设置生产P12证书的密码
    1.4.5 设置生产P12证书的密码
    1.4.6 输入开机密码
    1.4.6 输入开机密码
    1.5 生成生产cer证书
    1.5.1 开始创建生产推送证书


    1.5.1 开始创建生产推送证书
    1.5.2 选择生产推送证书


    1.5.2 选择生产推送证书
    1.5.3 提示选择CSR


    1.5.3 提示选择CSR
    1.5.4 选定CSR证书请求文件


    1.5.4 选定CSR证书请求文件
    1.5.5 下载生产证书


    1.5.5 下载生产证书
    1.5.6 两个证书都配置完毕


    1.5.6 两个证书都配置完毕
    1.6 生成生产所需的P12证书
    1.6.1 双击生产推送证书


    1.6.1 双击生产推送证书
    1.6.2 右击多出的证书


    1.6.2 右击多出的证书
    1.6.3 右键并导出.png


    1.6.3 右键并导出.png
    1.6.4 存储


    1.6.4 存储
    1.6.5 设置生产P12证书的密码
    1.6.5 设置生产P12证书的密码
    1.6.6 输入开机密码
    1.6.6 输入开机密码
    1.7 生成Provisioning Profile配置文件
    1.7.1 开始生成配置文件


    1.7.1 开始生成配置文件
    1.7.2 选择


    1.7.2 选择
    1.7.3 选择Bundle Identifier


    1.7.3 选择Bundle Identifier
    1.7.4 选择真机调试证书


    1.7.4 选择真机调试证书
    1.7.5 创建Devices(需要注意的是如果在创建Provisioning Prifile文件之前没有创建调试设备的话,这里接着创建的话,创建完成的时候需要从1.7.1开始重来到1.7.4的步骤。当然,如果第一次操作,肯定是这样的顺序,我没单独分一个模块,就是想让后来者也能经历一下这个顺序)


    1.7.5 创建Devices
    1.7.6 填写调试设备的Name和UDID


    1.7.6 填写调试设备的Name和UDID
    1.7.7 获取设备的UDID

    1.7.7 获取设备的UDID
    1.7.8 接着1.7.4选择新创建的调试设备
    1.7.8 接着1.7.4选择新创建的调试设备
    1.7.9 给配置文件起个名字


    1.7.9 给配置文件起个名字
    1.7.10 下载配置好的配置文件


    1.7.10 下载配置好的配置文件
    (阿西吧,该死的证书终于整理完毕,累死
    :baby:
    :baby:
    宝宝了)
    2.配置项目,包括:
    2.1 极光推送上创建应用
    2.1.1 登录极光账号


    2.1.1 登录极光账号
    2.1.2 创建一个应用


    2.1.2 创建一个应用
    2.1.3 上传P12证书


    2.1.3 上传P12证书
    2.1.4 创建成功
    2.1.4 创建成功
    2.2 下载SDK,导入到Xcode的项目中
    2.2.1 下载JPushSDK


    2.2.1 下载JPushSDK
    2.2.2 将SDK导入到项目中


    2.2.2 将SDK导入到项目中
    2.3 导入必要框架
    2.3.1 开始添加框架


    2.3.1 开始添加框架
    2.3.2 添加完毕


    2.3.2 添加完毕
    2.4 配置PushConfig.plist文件
    2.4.1 创建新的文件


    2.4.1 创建新的文件
    2.4.2 选择Property List,并命名为Push Config


    2.4.2 选择Property List
    2.4.3 配置三条信息


    2.4.3 配置三条信息
    在你的工程中创建一个新的Property List文件,并将其命名为PushConfig.plist,文件所含字段如下:CHANNEL指明应用程序包的下载渠道,为方便分渠道统计,具体值由你自行定义,如:App Store。
    APP_KEY填写管理Portal上创建应用1后自动生成的AppKey值。请确保应用内配置的 AppKey 与第1步在 Portal 上创建应用后生成的 AppKey 一致。
    APS_FOR_PRODUCTION1.3.1版本新增,用于标识当前应用所使用的APNs证书环境。0 (默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。注:此字段的值要与Build Settings的Code Signing配置的证书环境一致。在1.2.2或之前版本的配置文件中,有 TEST_MODE 这个键,新版的SDK不再使用,可以将它删除。
    2.5 Xcode7支持http传输的方法
    2.5.1 允许XCode7支持http传输


    2.5.1 允许XCode7支持http传输
    2.6 调试代码设置
#import "JPUSHService.h"
static NSString *appKey = @"203bb93d6acaf565a52f3cf2";
static NSString *channel = @"App Store";
static BOOL isProduction = FALSE;

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
     self.window.backgroundColor = [UIColor whiteColor]; 
     [self.window makeKeyAndVisible]; 
     //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];
} 
      //Required
      //如需兼容旧版本的方式,请依旧使用[JPUSHService setupWithOption:launchOptions]方式初始化和同时使用pushConfig.plist文件声明appKey等配置内容。
      [JPUSHService setupWithOption:launchOptions appKey:appKey 
                                                 channel:channel 
                                        apsForProduction:isProduction]; 
      return YES;
 }

- (void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      /// Required - 注册 DeviceToken 
      [JPUSHService registerDeviceToken:deviceToken];
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
      // Required,For systems with less than or equal to iOS6 
      [JPUSHService handleRemoteNotification:userInfo];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 
      // IOS 7 Support Required 
      [JPUSHService handleRemoteNotification:userInfo]; 
      completionHandler(UIBackgroundFetchResultNewData);
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { 
      //Optional 
      NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}

2.7 Xcode的配置
2.7.1 双击PP证书(灰常重要,如果没有这个证书,那你要头疼了,谁试谁知道)



2.7.1 双击PP证书
2.7.2 同意加入到iPhone配置实用工具


2.7.2 同意加入到iPhone配置实用工具
2.7.3 设置Code Signing


2.7.3 设置Code Signing
3.极光推送平台发送通知
3.1 应用在后台的情况下发送通知
3.1.1 登录极光平台


3.1.1 登录极光平台
3.1.2 点击通知


3.1.2 点击通知
3.1.3 输入内容发送通知


3.1.3 输入内容发送通知
3.1.4 通知结果


3.1.4 通知结果
3.2 使用第三方在应用active状态下获取通知
这个使用的是标哥的处理方法,传送门.标哥讲的很好,我就不画蛇添足了。3.2.1 active通知显示


3.2.1 active通知显示
整个过程真心不易,转载请注明出处2.用到的链接:
iOS SDK教程
iOS SDK集成指南
JPushSDK下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • iOS开发中不可避免要使用到推送,JPush还是个不错的选择。本文主要介绍极光推送的过程。 写在前面:极光推送本身...
    胖子程阅读 3,474评论 66 110
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 不同版本极光推送SDK集成各有差异,集成时一定要注意版本号,楼主已将博文更新成最新的SDK JPush v3.0....
    i顺颂时宜阅读 7,841评论 37 170
  • 推送技术产生场景: --服务器端主动性: 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据...
    原军锋阅读 34,480评论 4 60
  • 恨的牙痒痒的时候,到底在恨什么? 因为不愿意承认自己并没有做爱自己的举动,而是把人生推到别人的手中:别人为我负责,...
    启元读书会阅读 216评论 0 0