如何从ADB向设备发送FCM(firebase云消息传递)推送通知

yot*_*ain 16 android adb firebase google-cloud-messaging firebase-cloud-messaging

我们正在使用firebase云消息传递将推送通知发送到Android应用程序.

目前,为了测试推送通知,我们需要将消息发送到FCM服务器并等待消息到达设备.大多数时候设备需要很长时间才能从FCM服务器获取通知.

我可以看到下面的一些链接解释了使用adb broadcast命令向设备发送推送通知(此示例说明使用GCM框架发送消息,但我们使用FCM) 是否可以从adb shell/am命令行模拟GCM接收?我收到了一个错误

有没有类似的方法使用adb向具有FCM的设备发送推送通知?

小智 10

可以通过 adb 发送 FCM 负载。

虽然权限com.google.android.c2dm.permission.SEND确实存在问题,但有一个解决方法。

gradle 将 加入FirebaseInstanceIdReceiver合并的清单中。解决办法是增加你自己的副本到清单和使用覆盖许可tools:replace="android:permission"android:permission="@null"

<receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
        android:exported="true"
        android:permission="@null"
        tools:replace="android:permission">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="your.package.name" />
        </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

然后发出

adb shell "am broadcast -n your.package.name/com.google.firebase.iid.FirebaseInstanceIdReceiver -c your.package.name -a com.google.android.c2dm.intent.RECEIVE ... 通过终端

(PS - 我强烈建议仅在调试版本中通过 gradle 的清单占位符或调试/开发版本中的单独 AndroidManifest.xml 执行此操作)


Mig*_*cia 7

它在模拟器上为我工作(您不需要服务器密钥也不需要客户端令牌)。

在AS终端上运行以下命令:

  • adb root->为了获得com.google.android.c2dm.intent.RECEIVE许可

  • adb shell am broadcast \
      -n <YOUR.APP.PACKAGE>/com.google.firebase.iid.FirebaseInstanceIdReceiver \
      -a "com.google.android.c2dm.intent.RECEIVE" \
      --es "title" "Title" \
      --es "body" "Body"```
    
    Run Code Online (Sandbox Code Playgroud)

其中--es字段与data节点内的字段相对应:

{
  "data": {
    "title": "Title",
    "body": "Body"
  },
  "to" : ""
}
Run Code Online (Sandbox Code Playgroud)