如何快速自动发送 FCM 或 APNS 消息?

Posted

技术标签:

【中文标题】如何快速自动发送 FCM 或 APNS 消息?【英文标题】:How do I Quickly Automate Sending FCM or APNS Messages? 【发布时间】:2018-10-30 03:57:55 【问题描述】:

我正在开发一种通过 FCM 或 APNS 向移动应用发送推送通知的后端服务。我想创建一个可以在一分钟内运行并验证服务器可以成功发送通知的自动化测试。请注意,我不一定需要检查通知是否已送达,只需检查 FCM 或 APNS 是否已成功处理发送消息的请求即可。

我知道理论上我可以使用 appium 之类的工具自动执行此测试,并使用测试挂钩从应用程序中检索注册/设备令牌,但使用 appium 测试后端是否可以发送消息似乎很麻烦。我也尝试使用硬编码的注册令牌,但注册和设备令牌很容易轮换,因此测试可能会突然停止通过。还有其他选择吗?

【问题讨论】:

【参考方案1】:

首先,我会考虑我们想要涵盖什么场景。

    也许,我们想检查我们是否在需要时向 FCM 发送了请求。这种情况可能会在单元级别上完成,其中模拟类负责发送推送。 如果您想专门测试 FCM 调用是否成功,那么您实际上不需要用户设备的正确 Firebase 令牌。根据文档,如果一切配置正确,并且您使用不正确的令牌(甚至没有令牌)向用户发送消息,您仍然会得到 http 代码200。因此,您可以使用通常的集成测试来调用 Firebase API 并检查成功代码 (200) 和错误字段 (MissingRegistration / InvalidRegistration / NotRegistered),如果您得到这样的一对 - 您的请求是成功的。没有太多需要使用正确的用户设备令牌对其进行测试,因为如果其他一切都正确,结果将是相同的(但实际上是传送到手机上的)。 Firebase docs 如果您仍想使用实际令牌,您可以为您的 QA 创建一个特殊的构建类型,它会在每次应用启动时将他们的 Firebase 令牌发送到您服务器上的一个特殊端点。因此,您将始终在服务器上存储一个最近的 Firebase 令牌,以用于测试目的。当然,该测试可能仍然不稳定,但这是一个很好的起点。

【讨论】:

【参考方案2】:

Appium 是用于黑盒测试的自动化框架,因此在您的情况下,它允许检查通知是否在设备上弹出。就是这样。

Appium 无法访问您的应用程序代码,您可以通过它发送adb 命令,但基本上,除非您将令牌公开给应用程序的 UI 层,否则无法使用令牌。

此外,Firebase 不支持 Appium。

我建议查看Espresso,您可以在其中编写可以直接访问应用程序代码的测试。

【讨论】:

我实际上是在尝试测试后端,而不是应用程序本身。目标是测试后端是否可以在没有移动应用的情况下发送通知。 就是这样:appium 只允许 e2e UI 测试,无法测试应用后端【参考方案3】:

您可以在firebase中编写云函数来实现这一点,可以使用本地系统的firebase CLI推送。这个云函数可以用Nodejs编写。 你可以去这个文档编写云函数。https://firebase.google.com/docs/functions/ 这些云函数可以在一些事件上触发,比如实时数据库的变化,用户注册等,你可以得到来自移动应用程序的令牌使用注册侦听器上的回调,我们可以使用它们将通知推送到应用程序。您可以通过以下简单项目。 https://aaronczichon.de/2017/03/13/firebase-cloud-functions/

【讨论】:

以上是关于如何快速自动发送 FCM 或 APNS 消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用firebase自动发送FCM消息?

直接运行代码以响应接收到 APNS 消息

Python - 通过 FCM / APNs 向 IOS 或 Android 设备推送通知

Flutter:如何使用 fcm 以编程方式发送推送通知

Firebase FCM - 为啥会收到:有效负载错误,无效的“android”(或“apns”)属性

是否需要在FCM中修剪设备?