缘由:
过去项目中的一些包括推送都是好用的。今天给公司一个同事安装测试版本的APP,用的是xcode自动管理证书,然后一直显示"xcode count connect net",就是连接不上网络,并且他的手机设备号不在调试证书的设备列表中。
我有不好意思不装,没办法,就去开发者管理证书中管理,结果出现了悲剧.
- 1.我删除了非常多的无用的设备号
- 2.此时所有的
描述文件
都不好使了,然后我去更新描述文件. - 3.下载描述文件,更新到
xcode
中。
推送的流程我有点没有改。 然后项目就不好使了,一脸懵逼~
在我的印象中,并且确实存在的事实:
- 1.
描述文件 = appId + cer + device
- 2.
推送证书 = appId + crt (个人电脑从keychain中请求的,任意电脑都行)
。推送只和appId
和每个手机的deviceToken
有关系,和其他的描述文件啥的没有任何关系,也就是说,无论描述文件,device列表,或者cer文件的改变都不会影响到线上或者测试的推送 - 3.使用推送了,无论那个推动的平台或者是IM的推送,只要将推送证书导出
.p12
格式上传到相应的位置就好,可以推送了。如果是重新生成了推送证书
,执行这一步就好了。
我的排插步骤:
- 1.画了流程图,发现就是我说的这个逻辑,而且没毛病。
- 2.特意去看看是不是手机的推送没有开启,发现
设置-推送-沃德股市
的推送是开启的。 - 3.去appstore下载app,看看是不是有正常的,然后发现,也他妈的不好使。(我是用的是自己的手机,主要是那自己的手机作为主要的测试工具,还有一个ipad)
结果:
我特意去找朋友问了这个问题,最后给我的答案都是没毛病
.但是我说了appstore也不好使,推送开着,接不到推送什么鬼?
最后一个女孩说的挺对,就是你的推送证书没问题,有可能是你的代码逻辑出现了什么问题。
我没记得改过什么啊?然后我开始怀疑自己的印象
了。
- 1.回退到几天前的版本。测试的。运行===好使了竟然好使了!!!(后来才想到今天上午,在
appDelegate中删除了第三方推送的无用打印,真的是无用的,都是打印,但是不知到为什么会直接影响到推送,后来不这些无关紧要的加回去了,好了~
) - 2.执行
release
版本,然后运行,还是不好使,才意识到线上版本的推送只有打出一个ADHoc
包才行,所以这个不算数,忽略不计,看3 - 3.去苹果商店下载,运行,=== (拿自己的手机当做主测试机测试)还是不好使。一脸懵逼
- 4.测试一下ipad的推送 === 好使了~ 太神奇了
- 5.怀疑是手机版本太高了,导致正式不好使,但是测试版本的好用,这个假设不成立.pass
- 6.突然找到了项目中有个
设置页面
,有是否接受推送的页面,专门和后台关联,若是关闭状态,后台不会给予推送。并且这个按钮,不知道为啥是关闭状态
,因为IM的推送和这个是绑定的,所以IM也接受不到推送。所以就不好使了
正确的排除推送流程:
- 1.
推送证书 = appId + crt
,和设备的deviceToken
有关系,和其他因素无关(描述文件),不要怀疑人生。可以去看看注册的流程,返回deviceToken没有 - 2.在第三方推送平台是否提交了
p12
文件 - 3.看看手机的
设置-推送
是否开启,确定app中有无推送设置
这中页面,确保其中的推送是开启状态。平时我们使用网络的时候,都会有两个判断,1.手机是否开启网络;2.是否允许该app使用网络。很多的权限,如照片库,手机联系人都是有两个判断,所以到时候一定要去确保这些选择都是开启的,再去做以后的判断,否则很可能被坑到
- 4.多拿几个测试机测试一下,排除一个手机特殊情况的干扰(iphone的设置页面设置成不接受推送,但是ipad接受)
后记
后来我们又出现了一个问题,就是用的“个推”,然后项目使用apns的时候,点击屏幕上面的弹出框,但是获取不到后台给添加的在apns数据中的字典,只能收到apns固定的数据,最后才发现,推送不能超过2k,然后让后台给个推服务器发送东西的时候,少发点就行了