美文网首页iOS干货iOS知识收集账号
程胖出品——极光推送(手把手教你啊)

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

作者: 胖子程 | 来源:发表于2016-04-12 14:39 被阅读2201次

iOS开发中不可避免要使用到推送,JPush还是个不错的选择。本文主要介绍极光推送的过程。

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

鉴于我吃了苦头,所以本篇文章准备把每一块的每个步骤都尽量详细,尽量能够一次上手就可成功。

准备事项:

1.苹果开发者账号。是要交过99美金的。如果没有账号或者没有交过钱,可以参考这篇博客:AppStrore企业开发者账号完整申请流程
2.极光平台账号。像其他平台一样,需要注册一个账号,点我注册账号
3.一个Xcode工程。
4.需要测试机一部。
5.浏览器一个,方便随时查询信息。

整个步骤过程如下:

1.设置并下载证书,包括:
1.1 真机调试的测试证书
1.2 绑定Bundle Identifier
1.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 选择并创建
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
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.5 选择好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 下载配置好的配置文件
(阿西吧,该死的证书终于整理完毕,累死👶宝宝了)
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上创建应用后自动生成的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 *)application
didFinishLaunchingWithOptions:(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 *)application
didRegisterForRemoteNotificationsWithDeviceToken:(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.14 通知结果


3.14 通知结果
3.2 使用第三方在应用active状态下获取通知

这个使用的是标哥的处理方法,传送门.标哥讲的很好,我就不画蛇添足了。
3.2.1 active通知显示

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

相关文章

网友评论

  • 李乾坤David:这么认真,给作者加鸡腿!!加两个!!
    胖子程:确定?那我中午就等你的鸡腿了啊:no_mouth:
  • 奋斗的愤青i:辛苦了。、
    胖子程:@CJHiOS 能帮到你就好:blush::blush:
  • 太阳和风与旅行者:这个真的是手把手教,不要太详细了。很赞
  • 飘尘随风:大哥,传送门失效. 望看到尽快回复. 如何解决应用程序在前台运行下推送推送消息的问题.
  • Joe_lisa:远程通知,如何在前台的时候,有提醒,并且根据不同的界面加入角标
  • Joe_lisa:在极光推送中,针对2个tag ,该如何处理?
  • 小城东风:哈哈哈,“写在前面”的内容简直不要太准!!!每一个大型开源项目的特点就是,你按照官方文档安装,一定会失败 :smile:
    胖子程:@小城东风 是的,所以操作时要心细,认真,操作成功后总结 :blush:
  • 酸三角:不错 赞下
    酸三角:@胖子程 互相关注啊 :smile:
    胖子程:@酸三角 客官,常来啊!:smirk:
  • GavinKang:可以发一个吗??
    GavinKang:@胖子程 谢谢了,可以发到我邮箱吗??776362265@qq.com
    胖子程:@iOS开发的毛毛虫 好,我找一下
  • GavinKang:iPhone配置实用工具是一个软件吧??我下载了几个,都说有冲突
  • 奔跑的鸿:像楼主学习,以后也要多分享
    胖子程:@奔跑的鸿 好的👌🏻本来好的东西我们就要更加开放,不然中国的技术永远上不去!哈哈,托大了:stuck_out_tongue_winking_eye:
  • 凯文Kevin21:这是我见过最详细,最完整的。。。给101分
    胖子程:@七秒小鱼人 是的!加油!
    凯文Kevin21:@胖子程 其实按照极光官网一步一步来,也不会错的。错的原因大多数就是证书问题。
    胖子程:@七秒小鱼人 你这样我会骄傲哒,哈哈 :stuck_out_tongue_winking_eye:
  • 男人宫:这个跟自己的后台服务器有没有联系?发送消息直接在极光上发送就行了吗??
    胖子程:@ios小霸王 有,你们服务器也要配置下,发送推送要你们后台发送!激光那个应该只是一个测试使用
  • e18189aecded:楼主我的那个PP文件打不开怎么回事儿
    胖子程:@好咯只把 再重新下载下
  • Xl_Lee:真心不错,辛苦
    胖子程:@database 多谢啦!
  • 且听风吟520:第三步使用极光推送平台发送通知提示:指定的接收者目前还没有任何设备进行注册或者设置 这是怎么回事呀 求教
  • mark666:极光推送只能去极光后台推送吗?
    胖子程:@mark666 我理解的是极光推送的后台只是方便你当时调试自己APP是否集成成功。如果要是自己公司推送的话还是自己服务器后台推送比较好。
  • 32dbcf6aabbc:好东西,果断mark
    胖子程:@泡小泡 常来啊:stuck_out_tongue_winking_eye:
  • GaryHuang:挺详细的。我加上证书搞了半个月,不过单推,你做过吗?
    胖子程:@上善_若水 就加一句话就行了
    GaryHuang:是的。还有不同类型的用户。
    胖子程:@上善_若水 单推?是指给某一个设备推送?
  • Mr_Alpha:辛苦了,写得太好
    胖子程:@Mr_Alpha 能帮到大家少走点坑就行:blush:
  • 给你快乐:如果有需要再来请教你可以吗?
    胖子程:@给你快乐 可以的:smile:
  • 给你快乐:深有感触,有时候大牛觉得特别简单的一点就是阻碍我们成为大牛的绊脚石,作者好榜样,写东西写清楚,尤其是要给别人看的时候!
    胖子程:@给你快乐 嗯嗯,一起努力!
  • 精灵物联网:赞一个,很不错,学习了!谢谢
    胖子程:@woofer :stuck_out_tongue_closed_eyes:
  • 晨曦之光nl:不错,收藏了
    胖子程:@晨曦之光nl 赞一个呗
  • 0a87cf525a60:谢谢分享,太棒了
    胖子程:@寂静的雷声 有问题可以留言哈,一起进步
  • xudehuai001:写的很详细,正准备集成极光推送,为楼主赞一个
    胖子程:@xudehuai001 因为我看没人写详细的步骤,我就写一篇造福一下大家。有问题可以来问我哈
  • 胖子程:被编辑推荐是怎么样的一种体验呢? :scream: @简书编辑
  • 花前月下:不错、,支持下。码这么多字,也是挺辛苦的。不过,不得不说,这些只是基础的集成,推送还是有不少逻辑要处理的。
    花前月下:@胖子程 没。现在这项目暂时没有用到推送。之前的那些资料没集中
    胖子程:@花前月下 是的,推送后面的逻辑你那有文档之类的吗?
  • 再见远洋:我要赞一个 支持你
    胖子程:@再见远洋 你懂我! :smiley:

本文标题:程胖出品——极光推送(手把手教你啊)

本文链接:https://www.haomeiwen.com/subject/uglplttx.html