Как отправить FCM (firebase cloud messaging) push-уведомление от ADB на устройство
Мы используем firebase cloud messaging для получения push-уведомления в приложении Android.
В настоящее время для тестирования push-уведомления нам нужно отправить сообщение на сервер FCM и дождаться появления сообщения на устройство. Большую часть времени устройство получает много времени, чтобы получить уведомление с сервера FCM.
Ниже перечислены некоторые ссылки, объясняющие отправку push-уведомления на устройство с использованием команды широковещания adb (в этом примере объясняется отправка сообщения с использованием среды GCM, но мы используем FCM)
Возможно ли смоделировать GCM-получение из командной строки adb shell/am? Я получаю сообщение об ошибке
Есть ли аналогичный способ отправки push-уведомления с помощью adb на устройство с FCM?
Ответы
Ответ 1
У меня это работало на эмуляторе (вам не нужен ни ключ сервера, ни клиентский токен).
Запустите эти команды на терминале 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"'''
где поля --es
соответствуют полям в узле data
:
{
"data": {
"title": "Title",
"body": "Body"
},
"to" : ""
}
Ответ 2
Невозможно отправить push-уведомление от команды adb. Таким образом, ваш процесс должен получить разрешение на отправку трансляции через ADB. Но Google не разрешает устанавливать разрешение com.google.android.c2dm.permission.SEND
.
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 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. вы получите следующее исключение.
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