这两天后台反应说iOS这边百度推送报错说证书过期,然后就开始了漫长的填坑之旅.....
1.证书过期咋办
- 首先去开发者中心看看发布证书或者开发证书还在不在,如果发现不在了,那就是苹果给你删了(现在到期会自动删),然后重新生成一个就好了。如果快过期了,
先
重新生成一个,然后再把原来那个revoke
- 搞完证书之后,检查在App IDs里面,对应的AppID是否开启了推送,完整流程可以看这篇文章。
2.更新证书和SDK
- 上面的pem文件导出后,去到百度推送官网,更新证书。
- 下载最新的SDK,然后到工程里面替换掉,旧版SDK会有一个
BPushCerResource.bundle
,新版已经不需要了,删了就行。广告标志符
就选idfaversion
里面的Bpush.h、libPush.a
)两个版本的文件夹里面都有一个test.caf
,这个是百度的demo用来播放声音的,忽略就好。拉倒工程后记得去检查Build Phases
里面的Link Binary With Libraries
里面有没有那个.a
文件。
3.坑.....
我在替换完文件之后,发现在[Bpush register...]
方法会直接崩溃
Other Linker Flags
里添加-all_load
或者是-Objc
,一般来说添加-Objc
就可以了,-all_load
有时候会报错。这两个字段的差异,可以去找其他文章看看。
4.总结
- 按照官方demo的顺序调用SDK的方法,比如
registerDeviceToken
要在bindChannelWithCompleteHandler
之前等等这些。 - 检查自己生成的pem文件是否能正常使用,打开终端,进入到pem文件目录。
开发pem
测试命令:openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert 开发pem文件名.pem
发布pem
测试命令:openssl s_client -connect gateway.push.apple.com:2195 -cert 发布pem文件名.pem
输入命令之后,会冒出一堆东西,然后终端会提示让你输入东西,这时候你随便输入什么,然后回车,就会显示closed
,这时候pem就是好的,能正常使用。如果不对,那么就得重新去生成pem文件。
6.问题
最开始我没想到要替换成最新版的SDK,但是在使用以前的SDK的时候,网络畅通,bindChannelWithCompleteHandler
方法会报错,error code 10002 网络问题
,查了一下,有人说把BPushCerResource.bundle
添加到Copy Bundle Resources
就能解决,试了下没用,希望有解决过的朋友可以回复一下。