APNS远程推送模拟

如果想测试应用的消息推送的逻辑,在此之前我们只有一个选择,就是使用真实设备以及苹果推送服务进行测试。在真正的测试发送通知之前,我们需要将设备id添加到开发者后台,需要更新授权文件,需要配置推送证书,重新编译App安装到设备上以及获取设备的推送令牌。

这是让人难受的过程,尤其是对于一些共享开发帐号的情况——100个开发设备的名额很快就受限了。如果你是个新手,对推送不太了解,可能开发证书跟推送证书还不太明了,或者如果后端也是懵逼的,那难度系数还要+1。没有真机调试,相信这会是你难忘的调试经历。这不是我的经历,但现实确实是很多人会有困扰。

我通常使用Knuff或者一些Python库来测试推送,我现在也还会用,但现在我们有更好的选择了。

从Xcode 11.4开始,可以直接在模拟器中模拟远程推送通知。免去了繁杂的配置过程,也无需漫长的等待。

最好的方法是使用simctl命令行工具,该工具提供了以编程方式使用模拟器的界面。

推送的Payload数据是这样的:(官方文档

1
2
3
4
5
6
7
8
9
{
"aps" : {
"alert" : {
"title": "My title",
"body" : "This is a test",
}
},
"Simulator Target Bundle": "com.company.abc"
}

对于App的指定,可以在Payload中指定为APP_PRODUCT_BUNDLE_IDENTIFIER,或者在命令行中指定也是可以的。

推送的命令:

1
xcrun simctl push <device> [<bundle identifier>] (<payload json file> | -)

示例:

1
2
xcrun simctl push booted com.company.abc payload.json
xcrun simctl push booted payload.json // 如果在Payload中指定了target

也可以使用下面的命令,获取到已启动的

1
xcrun simctl list | egrep 'Booted'

Comments