基于UMeng消息推送测试-demo教程(iOS版)
眼看着就要过年了(2017本命年终于快过去了临来崭新的2018大发年),每个人的心里就像飞了一样,这个时候能够在办公间待下来的,每个人都是精英,突然想起了那首张含韵的歌《放假了》。
今天是2017年腊月25距离2018年仅有5天,依旧在外拼搏着,马路俩边的商铺陆陆续续关门(有钱没钱回家过年!!!)
好了,进入正题~~~
前年写个一篇《基于UMeng第三方分享(新浪)测试-demo教程》教程,感兴趣的可以看一下,由于时间比较老旧可能有些操作流程更新了,但是不要紧,大体流程依旧在。
由于要做带有推送的app, 最终商量决定运用UMeng的SDK推送,这里的需求就是我们app自己的服务器通过umeng-sdk去推消息。
而不是通过Umeng的官网后台去编辑消息进行推送。这里需要安卓,iOS,以及我们的app java server 都需要进行umeng-sdk的集成。而今天这篇教程是通过Umeng的官网后台去编辑消息进行推送,后续再陆续进行更新以上需求教程
1.集成sdk
1.1.下载iOS端的umeng-sdk
下载后的文件是如下这样的:
其中:Common // 公共组件是所有友盟产品的基础组件,必选
push // Push组件
1.2.添加依赖库
基础依赖库
CoreTelephony.framework 获取运营商标识
libz.tbd 数据压缩
libsqlite.tbd 数据缓存
SystemConfiguration.framework 判断网络状态
可选依赖库
SecurityEnvSDK.framework 金融风控组件
UTDID.framework 设备标识ID组件
上述的可选依赖库在thirdparties文件夹里
笔者在添加可选依赖库后,运行报错,我就把它给删除了(不添加可选依赖库)
1.3.选择SDK功能组件并下载,解压.zip文件得到相应组件包(例如:UMCommon.framework, UMPush.framework这来个库必须添加进来)。
XcodeFile —> Add Files to "Your Project",在弹出Panel选中所下载组件包->Add。(注:选中“Copy items if needed”)
添加依赖库,在项目设置target -> 选项卡General ->Linked Frameworks and Libraries 如下以及效果:
1.4.打开推送开关
点击项目---->TARGET---->Capabilities,将这里的Push Notification的开关打开,效果如图所示:
同时点击项目---->TARGET---->Capabilities-->Background Modes--->Remote notifications也要勾选上,如下:
至此工程的配置已经完成了,接下来就是代码的编写,但是这之前还需要进行证书的配置。
2.iOS证书配置指南
是为了在umeng官网上传自己的p12证书,注意需要测试证书和生产证书,都需要上传,已经你导出p12时设置的密码
使用消息推送功能前,需要严格按照此文档配置相关证书。否则将会影响消息推送组件的正常使用。
本文档包括:
创建APP ID // 类似于身份证标示
创建并配置CSR文件 // CSR是Cerificate Signing Request的英文缩写,即证书请求文件,在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件
创建并配置开发调试证书 // Certificates
创建并配置Provisioning Profiles // 配置概要文件
2.1创建APP ID
登录Apple Member Center :https://developer.apple.com/membercenter,选择certificates,identifiers&profiles 选项,如下图所示:
选择identity中的APP IDs,如下图所示:
注意:创建Explicit App ID时,要注意此时设置的Bundle ID要与APP以后的Bundle ID一致,如下图所示:
选择Push Notification 来开通Push功能,如下图所示:
点击下方的register 按钮,几秒钟之后下方会变成一个Done ,表示APP ID已经创建完成,如下图所示:
注意: 创建的APP ID要与自己项目的Bundle ID保持一致。如果已经有APP ID,请确保自己的APP ID已经开通了Push功能,如果没有开通,可以点击APP ID,在其底部有一个Edit按钮,点击后选中Push服务并创建,如下图所示:
至此,APP ID创建完毕
2.2.创建CSR文件
如果你已经有CSR文件,请继续进行下一步的设置。(跳过2.2步骤的操作)
CSR是Cerificate Signing Request的英文缩写,即证书请求文件。证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件。证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。
在电脑中找到钥匙串----->钥匙串访问------>证书管理------>从证书颁发机构请求证书,如下图所示:
设置完证书信息后,点击“继续”,然后选择存储位置(保存到桌面),点击存储,至此,CSR文件创建成功。
文件如下:PushTestCertificateSigningRequest.certSigningRequest
2.3.创建开发调试证书
如果你已经有开发调试证书,请继续进行下一步的设置。(跳过2.3步骤的操作)
选择Development(如果是发布上线,需要选择Distribution),如下图所示:
之后,你将看到如下四个证书。这一步,我们选择iOS App Development证书,如下图所示:
在choose file...中选择本地的CertificateSigningRequest(CSR)文件,然后点击继续,如下图所示:
点击Download,将证书下载到本地,双击下载的开发调试证书(文件名为:iOS_development.cer),就可以在钥匙串访问中的我的证书中找到。(这里必须要注意的是:必须要双击下,否则,后面的推送会出现
状态:失败
消息:device-token全部失败
的情况自己不注意的坑)
下载后的文件如下:
至此,开发调试证书设置完毕
2.4. 添加测试设备
测试推送需要添加测试设备,添加方法如下所示:
2.5.创建Provisioning Profiles文件 (配置概要文件)
选择Development,创建开发环境的Provisioning Profiles(如果是发布上线,需要选择Distribution),如下图所示:
创建新的Provisioning Profiles,并选择之前生成好的App ID。如下图所示:
选中创建的证书:
选中测试设备:
把创建的Provisioning Profiles,调试证书,推送证书下载下来(文件名:umengpushtestdemo.mobileprovision)以后双击证书
文件如下:umengtestdemo.mobileprovision
2.6.创建推送证书
选择Apple Push Notification service SSL(Sandbox)
注意:推送证书分为开发环境和生产环境,如果需要生成生产环境的推送证书请选择: Apple Push Notification service SSL (Sandbox&Production),如下图所示:
选中APP ID后,点击continue,直到上传CRS文件,如下图所示:
点击Download,将证书下载到本地后,双击下载的开发环境推送证书(文件名为:aps_development.cer),就可以在钥匙串访问中的我的证书中找到。
文件如下:aps_development.cer
2.6.导出推送证书的P12文件
注意:在钥匙串访问(KeyChain)的我的证书中选择刚刚导入的证书,选择导出,注意不要选中私钥,并设置相应密码即可。
错误的导出方式如下:
注意:此步骤所设置的密码将在之后在U-Push后台上传推送证书时所使用,且密码只能包含大小写(a-z,A-Z ),数字(0-9),特殊字符(.-_),其他元素将会被过滤。
生产环境的推送证书也是以同样的方式导出。
至此,P12证书导出完毕。
2.7. 在U-Push后台上传P12推送证书
点击应用进入应用信息选项,即可上传已被导出的P12证书,如下图所示:
然后以同样的上述方式,配置成产的证书,并导出p12文件设置密码,上传到umeng官网后台的生产证书项里
3.工程代码的编写
4.在umeng官网后台的操作
,上述步骤中- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{里会打印device token 的值64位的字符,添加到umeng官网后台的测试设备里
然后就是官网后台发送推送的操作,可以用单播的形式:
最终实现的效果图:
下面说一下关于umeng推送过程中遇到的坑:如下图:
这里一系列的原因:umeng官方并没有给出具体的解决方案,联系客户又是那么费时费力
解决方案1:
添加测试机设备的DeviceToken无效或者失败,报红色或者黄色都是不行的,
解决方案2:
配置证书时选的appID 必须和x-code里的Bundle Identifier相同,这是最大的一个坑,详细参见:http://bbs.umeng.com/thread-16274-1-2.html