首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从ADB向设备发送FCM (firebase cloud messaging)推送通知

如何从ADB向设备发送FCM (firebase cloud messaging)推送通知
EN

Stack Overflow用户
提问于 2016-10-28 00:38:44
回答 4查看 8.7K关注 0票数 21

我们正在使用firebase云消息来获取推送通知到android应用程序中。

目前,为了测试推送通知,我们需要将消息发送到FCM服务器,并等待消息到达设备。大部分时间设备需要很长时间才能收到来自FCM服务器的通知。

我可以在下面看到一些链接,它们解释了使用adb广播命令向设备发送推送通知(这个示例解释了使用GCM框架发送消息,但我们使用FCM) Is it possible to simulate a GCM receive from the adb shell / am command line? I'm getting an error

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

EN

回答 4

Stack Overflow用户

发布于 2020-03-02 14:48:45

通过adb发送有效载荷是可能的。

虽然权限com.google.android.c2dm.permission.SEND确实是个问题,但还是有解决办法的。

gradle将FirebaseInstanceIdReceiver添加到合并的清单中。解决方法是将自己的拷贝添加到清单中,并使用tools:replace="android:permission"android:permission="@null"覆盖权限

代码语言:javascript
运行
复制
<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>

然后发出

通过终端的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 )

票数 10
EN

Stack Overflow用户

发布于 2018-08-17 23:13:26

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

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

  • adb root /com.google.firebase.iid.FirebaseInstanceIdReceiver为了获得广播权限
  • adb shell am broadcast \ -n /com.google.firebase.iid.FirebaseInstanceIdReceiver\ -a "com.google.android.c2dm.intent.RECEIVE“\-es "title”"Title“\ --es "body”"Body"`

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

代码语言:javascript
运行
复制
{
  "data": {
    "title": "Title",
    "body": "Body"
  },
  "to" : ""
}
票数 7
EN

Stack Overflow用户

发布于 2019-03-11 03:59:33

无法从adb命令发送推送通知。因此您的进程需要以下权限才能通过adb发送广播。但谷歌不允许设置com.google.android.c2dm.permission.SEND权限。

代码语言:javascript
运行
复制
If you run below command and try to grant send permission to your package.
./adb shell pm grant com.example.hunted "com.google.android.c2dm.permission.SEND"

您将得到以下异常

操作eration not allowed: java.lang.SecurityException: Package com.example.hunted has not requested permission com.google.android.c2dm.permission.SEND

即使您将此权限添加到您的包中

代码语言:javascript
运行
复制
./adb shell pm grant  com.example.hunted com.google.android.c2dm.permission.SEND
Operation not allowed: java.lang.SecurityException: Permission com.google.android.c2dm.permission.SEND is not a changeable permission type.

最后当你用adb发送广播时。您将得到以下异常。

代码语言:javascript
运行
复制
BroadcastQueue: Permission Denial: broadcasting Intent { flg=0x400010 cmp=com.example.hunted/com.google.firebase.iid.FirebaseInstanceIdReceiver (has extras) } from null (pid=32279, uid=2000) requires com.google.android.c2dm.permission.SEND due to receiver com.example.hunted/com.google.firebase.iid.FirebaseInstanceIdReceiver
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40289999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档