【问题标题】:How to test FCM push notifications in Android如何在 Android 中测试 FCM 推送通知
【发布时间】:2018-07-11 15:49:32
【问题描述】:

我正在编写一个 FCM notification 集成,它运行良好。测试组件有没有办法模拟 RemoteMessage 对象?

通过模拟,我的意思是执行 Junit 测试用例。 任何建议!

【问题讨论】:

  • 打印输出令牌并使用 Firebase 控制台在令牌上推送通知。
  • 即处于工作状态。我担心执行测试用例。任何想法!
  • @SivakumarS 我正在寻找 Junit 测试。更新问题信息。

标签: android firebase junit firebase-cloud-messaging


【解决方案1】:

转到您的FirebaseMessagingService 子类并在onMessageReceived 方法上设置断点。像往常一样发送正常的推送通知。站在断点上检查 remoteMessage 对象。此对象的属性之一是Bundle。现在,您只需手动创建一个看起来相同的Bundle,然后使用该捆绑包创建RemoteMessage,例如:

val bundle = Bundle().apply {
    // System fields
    putString("google.delivered_priority", "high")
    putLong("google.sent_time", Date().time)
    putLong("google.ttl", 2419200)
    putString("google.original_priority", "high")
    putString("google.message_id", UUID.randomUUID().toString())
    putString("from", <your fcm project_number, from google-services.json>)

    // Custom fields
    putString("type", "my-type")
    putString("message", "Me message")
    ...
}
val remoteMessage = RemoteMessage(bundle)

【讨论】:

    【解决方案2】:

    目前无法模拟 FCM 中使用的 RemoteMessage 对象。 AFAIK,甚至没有办法在不使用实际服务的情况下测试 onMessageReceived() 方法。

    唯一有效的做法是测试您的 sendNotification()(或任何您命名的方法),它希望接受可能来自 RemoteMessage 对象的 Hashmap(当然,如果您只使用数据消息负载

    【讨论】:

      【解决方案3】:

      很遗憾,您不能,而且在不久的将来也没有支持它的迹象。

      您可以做什么:我们所做的是在您的服务器中构建一个 API 命令,它会向您发送测试推送。支持会很乏味,但已经足够了。

      更糟糕的是:假设进行测试是为了保证可靠性。如果失败了怎么办?您请求一个新令牌,但 FCM 会给您相同的令牌,可能......但它不起作用!如果您使令牌无效并请求令牌 - 会有所帮助吗?不确定。

      您的选择确实有限。

      【讨论】:

        猜你喜欢
        • 2020-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        相关资源
        最近更新 更多