[iOS] 能否同时向Debug版与Ad Hoc版构建发送推送通知?
我之前也碰到过几乎一模一样的情况,Apple的生产级Apple Push Services证书确实支持同时向沙箱(Debug版)和生产(Ad Hoc版)环境推送,问题大概率出在Salesforce的配置细节上。下面是一步步的解决思路:
确认你的APNS证书是双环境兼容的
打开Keychain Access,找到你的Apple Push Services证书,查看证书详情里的「Extended Key Usage」字段,确认它同时包含Apple Push Service (Sandbox)和Apple Push Service (Production)。如果只有生产环境,说明你生成的是旧版证书,需要重新在Apple Developer Portal生成新的生产证书(现在Apple默认生成的生产证书都是双环境兼容的)。在Salesforce中配置双环境推送端点
Salesforce的推送服务默认可能会把生产证书绑定到生产APNS端点,但你需要手动配置沙箱端点来支持Debug设备:- 登录Salesforce后台,进入「Setup」>「Mobile Push Certificates」。
- 上传你的Apple Push Services生产证书(注意要导出包含私钥的.p12文件,并且设置正确的密码)。
- 创建两个独立的推送配置:
- 一个命名为「Sandbox Push(Debug版)」,选择APNS沙箱端点:
gateway.sandbox.push.apple.com:2195 - 另一个命名为「Production Push(Ad Hoc版)」,选择APNS生产端点:
gateway.push.apple.com:2195
- 一个命名为「Sandbox Push(Debug版)」,选择APNS沙箱端点:
区分设备令牌并匹配对应环境
Debug版设备获取的推送令牌是沙箱环境专属的,Ad Hoc版的是生产环境令牌。你需要在Salesforce中存储设备信息时,标记清楚该设备是Debug还是Ad Hoc类型,发送推送时选择对应的配置即可。
另外,部分新版本的Salesforce推送服务支持自动路由——它会根据令牌的前缀自动判断应该用沙箱还是生产端点,你可以检查是否开启了这个功能(在推送配置的高级选项里)。测试验证
分别用Debug和Ad Hoc设备注册推送,获取令牌后在Salesforce中手动触发推送测试:- 给Debug设备令牌用「Sandbox Push」配置发送,确认能收到通知
- 给Ad Hoc设备令牌用「Production Push」配置发送,确认能收到通知
如果还是有问题,可以检查Salesforce的推送日志(Setup > Monitoring > Push Notification Logs),看看有没有错误提示,比如证书无效、端点连接失败或者令牌不匹配的问题。
内容的提问来源于stack exchange,提问作者Schwak

