Firebase Cloudメッセージングを使用して、プッシュ通知をAndroidアプリに取り込みます。
現在、プッシュ通知をテストするには、メッセージをFCMサーバーに送信し、メッセージがデバイスに到着するのを待つ必要があります。ほとんどの場合、デバイスはFCMサーバーから通知を受け取るのに長い時間がかかります。
以下に、adbブロードキャストコマンドを使用してデバイスにプッシュ通知を送信する方法を説明するリンクをいくつか示します(この例では、GCMフレームワークを使用したメッセージの送信について説明していますが、FCMを使用しています) adbシェルからのGCM受信をシミュレートすることは可能ですか/ amコマンドライン?エラーが発生します
Adbを使用してFCMを備えたデバイスにプッシュ通知を送信する同様の方法はありますか?
それはエミュレーターで私のために働きました(あなたはサーバーキーもクライアントトークンも必要としません)。
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" : ""
}
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
可能です adb経由でFCMペイロードを送信します。
パーミッションcom.google.Android.c2dm.permission.SEND
が問題であることは事実ですが、回避策があります。
gradleはFirebaseInstanceIdReceiver
をmergedマニフェストに追加します。回避策は、自分のコピーをマニフェストに追加し、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を介して)