Как отправить 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