-
创建时间
20年12月8日
-
最后回复
21年4月2日
- 18
回复
- 142
浏览
- 3
用户
- 6
链接
您的开发环境具体是指什么?如果是指您的本地开发机器的话,通过 SDK 发推送信息,默认是往生产环境的 iOS 应用发的。具体可以参考文档。
通过xcode安装的app 处于测试环境,是指 prod 属性为 prod 的消息无法推送到「通过xcode安装的app」,只有 prod 属性为 dev 的消息才能推送到「通过xcode安装的app」。
离线消息推送时,默认全部往生产环境的应用发,并不会根据消息来源(来自测试环境的应用还是生产环境的应用)分别推送到对应的环境。
当然,这里开发者是指定推送目标的,详见 其他推送设置。
抱歉,之前没说清楚。_profile 适用于证书推送的情形。然后 token 方式是另一套机制。基于 token 推送时,离线消息会根据 Installation 中的数据决定推送到开发环境还是生产环境。Installation 中每个 iOS 设备对应的记录会有一个 apnsTopic 字段,这个字段对应 APNS 的相应 Topic,也就决定了是发往开发环境还是生产环境。通过 更新 Installation 可以改变这个行为。
不好意思,有点不太理解,首先问一下,APNS的相应Topic是什么意思,从哪里配置的??
我可能也没说清楚我的问题,我再描述一遍:
有两个设备A和B,A给B发送聊天消息,此时B处于离线状态,消息应该走APNS(Token Authentication方式),现在的问题就是B没有收到推送消息,具体的一些内容如下。
B在Installation表中的数据:
推送记录:
leancloud文档对invalidTokens的描述:
leancloud文档对prod的描述:
根据文档和推送记录说一下我的理解,B是通过xcode安装的设备,可以认为是在测试环境下,但是推送记录显示"prod":"prod",也就是往生产环境发推送,所以导致invalidTokens: 1,就收不到推送了。
正如一开始的提问,此时prod属性值为什么是"prod"呢?是根据什么推断出来的呢?
简单来说,prod 参数是通过 SDK 或 REST API 发推送时指定的参数,而离线消息是由系统自动推送的,系统自动推送离线消息时 prod 这个值永远是 prod ,没有任何推断过程。
所以使用 token 的情况下,控制离线消息推送到哪里,是通过 Installation 的 apnsTopic 字段,这个字段的值对应苹果那边的 apns-topic,需要在苹果那里设置。在苹果那里,apns-topic 对应了 bundle ID(Product Bundle Identifier),然后不同的 bundle ID 可以区分不同种类的设备,这个是由您自行定义的(Xcode 和 developer.apple.com 网站上都要配置) 。比如,上架的应用的 bundle ID 定为 com.example.product,通过 TestFlight 分发的 bundle ID 可以定为 com.example.product.beta,在 Xcode 上测试的 bundle ID 可以定为 com.example.product.debug。这样就通过 Installation 的 apnsTopic 自动分流。
更多 apns-topic 的信息可以参考 Apple 的官方文档: https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns/






