作为一名做了四年的独立iOS开发者,我从一开始做小工具就踩遍了应用授权签名的所有坑,前后花了好几千冤枉钱,还因为频繁掉签流失了大半早期用户,踩坑踩多了才摸出一套适合中小独立开发者的稳定授权方案,今天整理出来给大家做个参考。
先从最基础的设备授权原理说起,很多刚入行的朋友只知道要签名才能装APP,不知道背后的逻辑:iOS系统的内核层会对所有安装的应用做签名校验,只有经过苹果信任证书授权的应用才能正常打开运行,本质上就是苹果用非对称加密验证APP的合法性,而设备授权就是苹果通过证书绑定允许安装该应用的设备唯一识别码,也就是我们常说的UDID,只有UDID在证书允许列表里的设备,才能通过校验正常打开APP,这个底层逻辑搞懂了,很多坑就能提前避开。
首先说P12证书的使用规范,这是我最早踩坑的地方,我刚做开发那会,为了省事,把自己开发者账号的P12证书随便导出共享给签名服务商,还把密码存在公共文档里,结果不到半个月证书被泄露,被其他人拿去签违规应用,直接被苹果吊销,我当时所有用这个证书签名的APP全部失效,几百个用户一夜之间用不了,找都找不回来。 总结下来我整理的P12使用规范有这么几条:第一,P12证书必须加密存储,密码要单独设置,绝对不能和其他平台密码通用,更不能存在公共代码库或者共享文档里;第二,开发证书和发布证书绝对不能混用,我一开始拿开发证书做发布签名,不到一周就被苹果检测到异常,直接封了证书;第三,一个P12证书尽量只签一个APP,不要图省事一个证书签多个应用,只要其中一个APP被举报违规,整个证书都会被吊销,所有应用一起遭殃;第四,不要随便共享P12给第三方,哪怕是合作方也要单独生成子证书,自己掌握核心证书的控制权;第五,定期更换P12证书,每3-6个月换一次新证书,就算旧证书泄露也不会影响长期使用。
接下来讲不同证书分发方式的优劣,目前市面上主流的就是企业证书分发、个人开发者UDID证书分发、TF内测证书分发三种:企业证书分发的优势是不需要绑定UDID,理论上支持无限设备安装,用户下载就能用,操作最方便,劣势就是太容易掉签,苹果现在对违规使用企业证书对外分发查得非常严,只要你的应用有一点流量,不出三个月大概率会被吊销,而且现在稳定的独立企业证书一年租金要上万,共享证书也要几百一个月,掉签是家常便饭,用户体验极差。 个人开发者UDID证书分发的优势是苹果官方认可,稳定性比企业证书高很多,成本低,一年只要688的年费,劣势就是最多只能绑定100台设备,做不了大规模推广,适合小范围内测。 TF内测证书分发是苹果官方的TestFlight测试渠道,优势是官方认可,基本不会掉签,支持最多10000名外部测试员,足够中小独立开发者使用,劣势就是每90天需要续期一次,要做好外部测试员管理,刚好说到这里,就是今天的核心TF签名外部测试员管理,很多人用TF就是栽在管理上。
讲完证书分发,再讲UDID绑定实操,我自己做过完整的手动绑定流程,也做过自动绑定的服务,这里给大家说最实用的步骤:第一步,先登录自己的苹果开发者后台,提前创建好对应的APP ID,确认证书生成完成;第二步,添加用户UDID,这里最容易踩的坑就是手动输入UDID出错,很多用户复制UDID会带空格或者多余字符,绑定之后就会出现装不上的问题,我后来专门做了一个H5封装的UDID获取页面,用苹果官方的接口自动获取用户设备的UDID,直接回传到我的服务器,完全不用用户手动操作,既准确又方便,这里说一句,H5封装不光可以做获取UDID,很多原生过不了审的小工具,用H5封装成IPA之后,走TF内测审核通过率非常高,更新也方便,不用每次重新发包审核,非常适合独立开发者。 第三步,绑定完所有UDID之后,重新生成包含新UDID的描述文件,再用P12证书给IPA做重签名,整个UDID绑定就完成了,这里提醒大家,个人开发者账号每年可以重置一次设备名额,绑定满100台之后,可以删掉不用的旧设备重置名额,不用重新买账号,我第一年不知道这个规则,白白多花了688买新账号,这个坑一定要避开。
接下来聊一聊我用过的不同渠道的价格体验,我前后试过不下十个签名渠道,说一下真实感受:第一种是淘宝散户共享企业签名,单次签名二三十块,一个月才五六十,确实便宜,但是稳定性极差,我当时签完包第三天就掉了,找商家补发,商家说证书被吊销要等新的,等了三天才弄好,这三天我直接流失了一半用户,而且很多散户用的都是黑证书,哪天证书被封连商家都找不到,钱也白花了。 第二种是超级签名渠道,按设备收费,一般一个设备3块到5块不等,我当时推了一千个用户,算下来花了四千多,成本真的不低,而且我还碰到过黑心渠道偷偷改我的IPA包,加了赌博广告,还是用户告诉我我才发现,差点把我的口碑搞臭,所以用第三方超级签名一定要自己再查一遍包。 第三种是TF签名渠道,一般按年收费,万人群的TF一年也就四五百块,包上架包管理,掉签补发,平均下来一个月才几十块,我用了一年多,成本比企业签和超级签低太多,稳定性还好。 第四种是AppStore上架,成本就是每年688的开发者年费,如果能过审,后续没有任何成本,是最稳定的,但是审核真的太严了,我前后五个工具,只有两个过审,剩下三个改了十几次都被拒,折腾了两个多月放弃了。
接下来重点说我现在用的稳定方案,踩了这么多坑,我现在总结下来就是分场景选择:如果你的应用能过AppStore审核,那绝对优先上AppStore,这是最稳定的,用户直接在应用商店下载,不会掉签,也不用担心用户流失,这是最优解。 如果你的应用过不了AppStore审核,那我强烈推荐TF内测结合定期失效补发的方案,这是目前中小独立开发者最稳定的方案,我现在三个过不了审的工具都放在TF上,最长的已经稳定运行了一年半,从来没有掉过签,只有每90天续期一次就好,操作也不麻烦。 这里一定要重点说TF签名外部测试员管理的避坑点,我当时刚用TF就踩了坑:第一,苹果对短时间添加测试员有风控,我当时做推广一天加了两千个测试员,直接触发苹果风控,后台不让加新测试员,封了三天,错过了推广最佳时间,后来我才知道,一天最多加三百到五百个,分批添加就不会触发风控;第二,TF外部测试员上限是10000人,满了之后要清理不活跃的测试员腾出位置,清理的时候也不要一次性删几百个,分批删,每天删几十个就好,一次性删太多也会触发风控;第三,测试链接过期之后,只要重新发布一个新版本就能续期,原来的用户只要点更新就能继续用,不用重新邀请,非常方便。
这里再把要求的几个点补全:H5封装是很多独立开发者常用的开发方式,开发快成本低,封装成IPA之后做IPA授权走TF上架,只要内容不违规,基本都能过,比原生APP容易太多;IPA授权本质就是我们说的给IPA包做签名授权,不管是哪种分发方式,核心都是拿到苹果官方的授权,让iOS系统能识别运行;失效补发不管用哪种方案都要提前准备,我现在的做法是用自己的域名做下载页,不管签名怎么变,下载地址不变,用户只要记住域名就能重新下载,同时APP接入推送通知,证书失效第一时间通知用户,和服务商也约定好24小时内补发,一般几个小时就能搞定,不会耽误用户使用。
我现在算下来,一年的授权成本也就一千多块,比之前用企业签一年花一万多还不稳定好太多,作为独立开发者,我们的用户都是一点点积累来的,一次掉签可能就把几个月的积累白费,所以选授权方案,稳定永远比便宜重要,我把这些坑整理出来,就是希望刚入行的朋友不用再走我走过的老路,少花冤枉钱,多留存用户。