我们正在使用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的设备发送推送通知?
答案 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.