[解決済み] Firebaseでアプリがバックグラウンドにあるときの通知を処理する方法
2022-03-18 06:50:25
質問
以下は私のマニフェストです。
<service android:name=".fcm.PshycoFirebaseMessagingServices">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".fcm.PshycoFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
アプリがバックグラウンドにあるときに通知が届くと、デフォルトの通知が来て、私のコードである
onMessageReceived
.
以下は私の
onMessageReceived
というコードがあります。これは、私のアプリがフォアグラウンドで実行されている場合に呼び出され、バックグラウンドで実行されている場合には呼び出されません。アプリがバックグラウンドで動作しているときにもこのコードを実行するにはどうしたらよいでしょうか。
// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// TODO(developer): Handle FCM messages here.
// If the application is in the foreground handle both data and notification messages here.
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
data = remoteMessage.getData();
String title = remoteMessage.getNotification().getTitle();
String message = remoteMessage.getNotification().getBody();
String imageUrl = (String) data.get("image");
String action = (String) data.get("action");
Log.i(TAG, "onMessageReceived: title : "+title);
Log.i(TAG, "onMessageReceived: message : "+message);
Log.i(TAG, "onMessageReceived: imageUrl : "+imageUrl);
Log.i(TAG, "onMessageReceived: action : "+action);
if (imageUrl == null) {
sendNotification(title,message,action);
} else {
new BigPictureNotification(this,title,message,imageUrl,action);
}
}
// [END receive_message]
解決方法は?
1. なぜこのようなことが起こるのでしょうか?
FCM(Firebase Cloud Messaging)には、2種類のメッセージがあります。
-
メッセージの表示
: これらのメッセージは
onMessageReceived()
にあるときだけコールバックされます。 フォアグラウンド -
データメッセージ
: これらのメッセージは
onMessageReceived()
コールバック も にある場合、アプリは フォアグラウンド/バックグランド/キルド
NOTE Firebase チームでは
data-messages
を は、まだあなたのデバイスの このタイプの送信には、サーバーを使用する必要があります。
2. どのように?
これを実現するためには
POST
を以下のURLにリクエストしてください。
POST
https://fcm.googleapis.com/fcm/send
ヘッダー
-
キー
Content-Type
, 値です。application/json
-
キーです。
Authorization
, 値です。key=<your-server-key>
トピックを使用した本文
{
"to": "/topics/my_topic",
"data": {
"my_custom_key": "my_custom_value",
"my_custom_key2": true
}
}
また、特定のデバイスに送りたい場合は
{
"data": {
"my_custom_key": "my_custom_value",
"my_custom_key2": true
},
"registration_ids": ["{device-token}","{device2-token}","{device3-token}"]
}
NOTE 必ず を追加しない JSONキー
notification
NOTE サーバーキーを取得するには、firebaseのコンソールで確認することができます。Your project -> settings -> Project settings -> Cloud messaging -> Server Key
3. プッシュ通知メッセージはどのように処理するのですか?
受信したメッセージはこのように処理されます。
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
String myCustomKey = data.get("my_custom_key");
// Manage data
}
関連
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
ジャークとして。起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりません アクティビティ起動中のエラー
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
アンドロイドのエリプサイズを使用する
-
Androidプロセス生存のためのソリューション
-
Android Bluetooth 開発の基本プロセス
-
Androidカスタムドロップダウンリストボックスコントロール
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する
-
[解決済み】アプリがバックグラウンドにあるとき、Firebase onMessageReceivedが呼ばれない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android.mk:7: *** セパレータがありません。
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
ActivityはOnFragmentInteractionListenerを実装しなければならないに関する質問
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
WeChatとQQは、他のアプリのオープンリストに自分のアプリを追加し、ファイルパスを取得することができます
-
アンドロイドシェイプ、グラデーション、角丸、ボーダーラインの設定
-
アプリの実行エラー。ターゲットデバイスが見つからない問題
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する