web-dev-qa-db-ja.com

FCM(Firebase Cloud Messaging)プッシュ通知をADBからデバイスに送信する方法

Firebase Cloudメッセージングを使用して、プッシュ通知をAndroidアプリに取り込みます。

現在、プッシュ通知をテストするには、メッセージをFCMサーバーに送信し、メッセージがデバイスに到着するのを待つ必要があります。ほとんどの場合、デバイスはFCMサーバーから通知を受け取るのに長い時間がかかります。

以下に、adbブロードキャストコマンドを使用してデバイスにプッシュ通知を送信する方法を説明するリンクをいくつか示します(この例では、GCMフレームワークを使用したメッセージの送信について説明していますが、FCMを使用しています) adbシェルからのGCM受信をシミュレートすることは可能ですか/ amコマンドライン?エラーが発生します

Adbを使用してFCMを備えたデバイスにプッシュ通知を送信する同様の方法はありますか?

16
yottabrain

それはエミュレーターで私のために働きました(あなたはサーバーキーもクライアントトークンも必要としません)。

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" : ""
}
7
Miguel Garcia

Adbコマンドからプッシュ通知を送信することはできません。したがって、adbを介してブロードキャストを送信するには、プロセスに次の許可が必要です。しかし、グーグルは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"

次の例外が発生します

Operation 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
0
Rajesh Garg

可能です adb経由でFCMペイロードを送信します。

パーミッションcom.google.Android.c2dm.permission.SENDが問題であることは事実ですが、回避策があります。

gradleはFirebaseInstanceIdReceivermergedマニフェストに追加します。回避策は、自分のコピーをマニフェストに追加し、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を介して)

0
steineron