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 执行此操作)
它在模拟器上为我工作(您不需要服务器密钥也不需要客户端令牌)。
在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)
| 归档时间: |
|
| 查看次数: |
3118 次 |
| 最近记录: |