0

バージョン8.0以降FCMを使用していますが、notificationのデータは、のフォアグラウンドでのみ受信されますが、dataキーのデータは両方の状況で受信した場合、アプリがフォアグラウンドかバックグラウンドかに関係なく問題ありません。FCMがレガシーキーの後にバックグラウンドに入っていない

以下

は、通知を受信する通知

$path_to_firebase_cm = 'https://fcm.googleapis.com/fcm/send'; 
     $fields = array(
      'to' => $token, 
      'notification' => array('title' => 'Title', 'body' => $message,'vibrate'=>"1",'sound'=>"mySound"), 
      'data' => array('message' => $message) 
     ); 

Androidのコード/クラスを送信するサーバでPHPスニペットです。

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = "MyFirebaseMsgService"; 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 

     Log.d(TAG, "From: " + remoteMessage.getFrom()); 

     // Check if message contains a data payload. 
     if (remoteMessage.getData().size() > 0) { 
      Log.d(TAG, "Message data payload: " + remoteMessage.getData().get("message")); 
      sendNotification(remoteMessage.getData().get("message")); 
     } 

     // Check if message contains a notification payload. 
     if (remoteMessage.getNotification() != null) { 
      Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
      sendNotification(remoteMessage.getNotification().getBody()); 
     } 
    } 
} 

コンパイル 'com.google.firebase:firebaseメッセージング:10.0.1'

プラグイン、クラスパス、およびサービスmanifiestですでに要件ごとに

apply plugin: 'com.google.gms.google-services'を追加します

classpath 'com.google.gms:google-services:3.0.0'

<service android:name=".fcm.MyFirebaseMessagingService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
      </intent-filter> 
     </service> 
     <service android:name=".fcm.MyFirebaseInstanceIDService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
      </intent-filter> 
     </service> 

問題

アプリケーションがフォアグラウンドにある、データペイロード及び通知ペイロード両方のログが表示され、アプリケーションがログのバックグラウンドなしにあるときに表示なってきています。

古いプロジェクトでうまくいっていますが、新しいFirebaseアプリケーションを作成するときに問題が発生し、通知を送信するために新しいLEGACY SERVER KEYが発行されます。

+0

レガシーキーはメッセージの配信に影響を与えません。将来の読者を助けるタイトルから離れてください。 –

+0

それは影響を与えるべきではありませんが、Googleがサーバーのキーを更新した後にのみ、この問題に直面しています。 –

+0

あなたが説明したのは、通知メッセージの正しい動作です(ドキュメントを参照)。 FCMが開始されて以来の行動は変わらなかった。サーバーコードが変更される可能性があります。 –

答えて

2

jsonではdataオブジェクトのみを使用する必要があります。 thisを参照してください。 あなたのjsonはこのようにする必要があります

$fields = array(
      'to' => $token, 
      'data' => array('message' => $message, 'title' => 'Title', 'body' => $message,'vibrate'=>"1",'sound'=>"mySound") 
     ); 
+0

私は試してみることができますが、以前はこのコードでもうまくいきました。両方のフィールドが異なる場合は、配列内に余分なフィールドを追加しても問題が発生しないと思います。 –

+0

これはうまくいきましたが、以前はうまく動作していなかった理由がわかりません。キーに基づいた値ごとに機能している可能性があります。 –