これが私のマニフェストです:
<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
1. なぜこのようなことが起こるのでしょうか?
FCM (Firebase Cloud Messaging) には 2 種類のメッセージがあります。
- 表示メッセージ: これらのメッセージは、
onMessageReceived()
アプリがフォアグラウンドにある場合にのみコールバックをトリガーします。 - データメッセージ: これらのメッセージは、アプリがフォアグラウンド/バックグラウンド/終了状態であっても
onMessageReceived()
コールバックをトリガーします。
注意:
data-messages
Firebase チームはまだデバイスに送信するための UI を開発していません。このタイプの送信にはサーバーを使用する必要があります。
2. 方法は?
POST
これを実現するには、次の URL にリクエストを実行する必要があります。
ヘッダー
- キー:
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}"]
}
注: JSON キーを追加していないことを確認してください
notification
。注:サーバー キーを取得するには、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
}