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

时间:2016-10-27 16:38:44

标签: android firebase google-cloud-messaging firebase-cloud-messaging adb

我们正在使用firebase云消息传递将推送通知导入Android应用程序。

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

  • import { stuff } from 'jquery-ui'; ->为了获得adb root权限

  • com.google.android.c2dm.intent.RECEIVE

其中 -n <YOUR.APP.PACKAGE>/com.google.firebase.iid.FirebaseInstanceIdReceiver \ -a "com.google.android.c2dm.intent.RECEIVE" \ --es "title" "Title" \ --es "body" "Body"``` 字段与--es节点内的字段相对应:

data

答案 1 :(得分:3)

可以通过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>

然后发布

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进行

答案 2 :(得分:1)

这在模拟器上对我有用: 只需将其粘贴到您的Android Studio终端中:

  adb shell am broadcast -a com.google.android.c2dm.intent.RECEIVE -n MyCOM.MyCOMPANY.MyAPP/com.google.firebase.iid.FirebaseInstanceIdReceiver --es "title" "Congradulation", --es "message" "this is your message", --es "isThisWorking" "yes"

MyCOM.MyCOMPANY.MyAPP位替换为您的应用包名称

答案 3 :(得分:0)

无法通过adb命令发送推送通知。因此,您的进程需要以下权限才能通过adb发送广播。 但是google不允许设置var selectedCell = 0 class ListController: UIViewController, UITableViewDelegate, UITableViewDataSource{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { selectedCell = indexPath.row print("Tapped on \(selectedCell)") } } class ExamplesController: UIViewController{ @IBOutlet weak var chapterTitle: UILabel! override func viewDidLoad() { super.viewDidLoad() chapterTitle.text = "\(chapterTitles[selectedCell])" } } 权限。

com.google.android.c2dm.permission.SEND

您将收到以下异常

Op 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

最后,当您使用adb发送广播时。您将收到以下异常。

./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.