结论先说:绝大多数情况下能用。签名改的是包里那层「谁为这个 App 背书」的信息,不会去动 App 的业务代码。真正让微信登录、Apple 登录(Sign in with Apple,苹果官方登录)失效的,是重签名过程中被顺手改掉或丢掉的几项权限配置。
一次第三方登录背后要经过多少道关
以微信登录为例:App 调起微信的 SDK(软件开发工具包)→ 跳转到微信 App → 用户在微信里确认 → 微信通过 URL Scheme(应用间跳转协议,一串自定义的跳转地址)把结果回调给你的 App → 你的服务端拿凭证去微信换用户信息。这条链路上有四个环节依赖包里的配置,任何一个被改掉都会断。
再比如 Apple 登录,它依赖的是开发者账号上的一项能力开关,签名时如果没把对应的授权声明写进包里,调用时就会直接返回不支持。
最容易被改坏的四项
- Bundle ID 变了。微信开放平台上登记的就是这个 ID,包里的 ID 和平台登记的对不上,微信会拒绝回调。这是最高频的原因。
- URL Scheme(应用间跳转协议)丢了。跳转协议写在 Info.plist(应用配置清单文件)里,重签名如果重新生成了清单而没有保留原有字段,回调就找不到回家的路。
- Keychain(钥匙串)访问组变了。登录态、令牌这类敏感数据存在钥匙串里,访问组一变,老用户会被当成新用户,表现为「登录成功但每次打开都要重新登录」。
- Associated Domains(关联域名)被去掉。Universal Link(通用链接,一种用普通网址唤起 App 的机制)依赖它,丢了之后网页唤起和部分第三方登录的跳转会失败。
为什么有的包签完能用、有的不能
差别在于签名方用的是「保留原有配置的重签」还是「按模板重新生成的重签」。前者会读取原包的授权清单并逐项保留,后者图省事套一份通用模板,把原包的个性化配置全丢掉。越是功能复杂、接了多家 SDK 的包,越不能用通用模板。
另外一个变量是证书类型:企业证书和个人/公司开发者证书能承载的能力项并不完全相同,某些能力在特定证书类型下受限制。送签前如果 App 依赖了比较少见的能力,值得提前问一句。
自查清单
送签前先确认这五件事:Bundle ID 保持不变;URL Scheme 保留;钥匙串访问组保留;关联域名保留;包内所有第三方 SDK 对应的平台登记信息(微信开放平台、苹果开发者后台)与实际一致。签完之后先自己装一遍,把所有登录入口点一遍,再对外分发。这一步跳过,问题会在用户那里集中爆发。
小结
第三方登录失效几乎都是配置丢失,不是签名这个动作本身的锅。把「包里有哪些个性化配置」列成一张清单交给签名方,是最省事的做法。
我是本期作者小思,想解决苹果企业签名、超级签名、TF签名问题?可以在微信公众号对话框找到我哦~(QQ:822404920 微信:A-mk5888)