项目要做简单的推送,于是很愉快的集成了极光推送。拿自己跟同事的手机测试一下很happy,都能收到通知.
但客户产品一直说,他们都收不到推送,纳尼? 什么鬼???
这个就花了狗了,居然连通知都没有
下面是我跟客户的截图
好,抽根烟冷静一下...
第一:客户没必要欺骗我,所以这是真的.
第二:是否是证书原因?,还是特定机型iPhone8,出现特定的bug?
否决一下,我能收到,排除证书原因,那iPhone8,她的手机别的app可以收到推送,pass掉是手机原因...
仿佛进入了一个死循环...
好吧,不废话了,我问了几个大佬,其中有个大佬说:
你这样思考问题的思路不对...你应该从客户的角度,把自己当成客户那样去操纵,去复现问题,这样才能发现问题,解决问题.
突如其来的神助攻,让我茅塞顿开,对啊,我跟同事的手机都是通过Xcode跑一遍安装的,而客户是通过蒲公英去安装的.这两者肯定有区别. 查了一下,蒲公英对包动手脚,只是一个分发
我自己也尝试安装了我打出来的包,发现包的确安装不上...
好吧,我产品你是对的!
那是什么原因????
是debug跟release的原因吗?
抽根烟,冷静下...
用Xcode在真机上运行调试时可以正常收到推送消息,但是将项目打包测试包出来后安装到真机上无法收到推送,猜想问题肯定是出在证书上,因为iOS推送有一个开发证书和一个生产证书,用Xcode在真机运行肯定是开发环境 收不到推送,很有可能打包测试ipa包用的是生产证书。
现在回顾一下Xcode打包iPa四个选项的具体区别
1. Save for iOS App Store Deployment
保存到本地 准备上传App Store 或者在越狱的iOS设备上使用
2. Save for Ad Hoc Deployment
苹果的官方解释是:To distribute your app to users with designated devices, select “Save for Ad Hoc Deployment.” The app will be code signed with the distribution certificate.(保存到本地 准备在账号添加的可使用设备上使用(具体为在开发者账户下添加可用设备的udid),该app包是发布证书编译的)
3. Save for Enterprise Deployment 生成企业包
这种主要针对企业级账户下 准备本地服务器分发的app,也可直接发给你的客户或测试人员安装,无需在帐号中添加设备的udid。注意:此证书为299$的企业证书
4. Save for Development Deployment
苹果的官方解释是:To distribute your app for internal testing, select “Save for Development Deployment.” The app will be code signed with your development certificate. (针对内部测试使用,主要给开发者的设备(具体也为在开发者账户下添加可用设备的udid)。该app包是开发证书编译的)至于Save for Ad Hoc Deployment和Save for Development Deployment两个选项的区别,官方给出的解释是证书的区别,但是对于我们来说,还不是特别清楚具体的用处。其实最早当我们选择Save for Ad Hoc Deployment来生成ipa包的时候,我们是可以选择开发证书的,但是现在,它需要我们使用发布证书。我们最早在做程序真机测试的时候,大部分时候是用的开发证书,并没有发布证书,所有我认为,Save for Development Deployment是我们前期用开发证书,给测试人员发包测试的时候使用的,而到程序开发的后期,我们为了发布,生成了发布证书,此时,我们给client或者tester的时候,应该选择Save for Ad Hoc Deployment,使用发布证书打包, 而官方对Ad Hoc的解释是:Ad Hoc模式的包,和将来发布到App Store的包在各种功能测试上是一样的,只要Ad Hoc模式下测试(推送,内购等)没有问题,发布到App Store也是没有问题的。
ok,看了上面,重点来了.
我之前都是选择的AdHoc,那么我现在选择第四个就解决问题了...
经测试的确没问题了...实际上,问题还不是这里.
而是极光推送后台,有一个选项,是否将生产证书用于开发环境...
我当时点了一个是,实际上就出现这些乌龙了..
反省:
第一,出现问题了,我只看我的手机,及同事的手机可以收到推送,就没有第一时间理会.
第二,客户报出这个问题,没有第一时间,站在客户的角度去复现问题.
第三,大佬的思路是正确的,我跟大佬的差距,就在于思考问题的方式思维(就是脑子不如大佬♀️)
第四,没能将问题很明确的描述出来,导致走了这么多弯路.
实际上问题应该这么描述:
用Xcode跑一遍安装的应用,能收到极光的推送.用蒲公英分发的包,却收不到应用.
如果我一开始就这样描述清楚了,那么是不至于走这么弯路的..
谨记:把问题描述清楚, 比解决问题更加重要.