2017-08-02 12 views
2

バックグラウンドデータを画面に渡すことができません。バックグラウンドでは、アプリケーションは画面を正しく呼び出していますが、この画面に必要なデータは通知内の「データ」(データオブジェクトのID)に収められていません。 前景で私は正しく "データ"を得ました。バックグラウンドでAndroid:バックグラウンドデータを通過するFCMプッシュ通知

通知JSON

{ 
    "to" : "akshih890uhnkjh389jfkn3...", 
    "priority" : "normal", 
    "time_to_live" : 0, 
    "data" : { 
     "type" : "my_type", 
     "id" : "my_id" 
    }, 
    "notification" : { 
     "body" : "Test body", 
     "title" : "Test title", 
     "click_action" : ".MyActivity" 
    } 
} 


public void onMessageReceived(RemoteMessage remoteMessage) { 
     super.onMessageReceived(remoteMessage); 

      String title = remoteMessage.getNotification().getTitle(); 
      String body = remoteMessage.getNotification().getBody(); 
      String clickAction = remoteMessage.getNotification().getClickAction(); 

       Map<String, String> data = remoteMessage.getData(); 
       Gson gson = new Gson(); 
       MyObject myObject = new MyObject(data.get("id"), data.get("type"), remoteMessage.getNotification().getTitle(), 
        remoteMessage.getNotification().getBody()); 

       Intent intent = new Intent(myObject.getClickAction()); 
       intent.putExtra("id", myObject.getId()); 

       PendingIntent contentIntent = PendingIntent.getActivity(
         this, 0, intent, 
         PendingIntent.FLAG_UPDATE_CURRENT); 

       sendFCMNotification(title, body, contentIntent); 

     } 

MyActivity

if(getIntent() != null) { 

      Bundle extras = getIntent().getExtras(); 
      code = extras.getString("id"); 

     } 
+0

こんにちは..私はあなたも通知にadditiotionで渡さなければならないと考えています(通知は、背景のforforegroundメッセージです) –

+0

[アプリがバックグラウンドであるかどうかにかかわらずプッシュ通知が正しく動作しません](https: /stackoverflow.com/questions/37876257/push-notification-works-incorrectly-when-app-is-on-background-or-not-running) –

答えて

0

、あなたは、特定のアクティビティを呼び出したい場合は、データのclick_action属性で指定する意図エクストラからデータを取得することができます

を参照:

Firebase Server reference

Firebase Push

1
int id = Integer.valueOf(remoteMessage.getData().get("id")); 

あなたがremoteMessage.getData()を使用しているので、あなたが全体dataオブジェクトではなく、内部data JSONを持つオブジェクトを取得し、あなたのフィールドで実際のdata JSONを取得します。

String data = remoteMessage.getData(); 
Gson gson = new Gson(); 
MyObject myObject = gson.fromJson(data, MyObject.class); 
+0

よろしくお願いします。しかし、私はまだデータオブジェクトからIDを取得する方法を理解していません。 これはフォアグラウンドでのみ機能します。 click_actionの結果として呼び出されるアクティビティは、すでにidを期待していますが、バックグラウンドでnullになります。 – user6505882

+0

@ user6505882独自の意図でカスタム通知を作成します。カスタムアクションを作成する必要はありません。あなた自身の行動を定義すると、firebaseはあなたのものではなく、自分の扱いを行います。 '' click_action ''を削除する必要があります: ".MyActivity" ' –

+0

click_actionを削除すると、バックグラウンドではアプリケーションは対応する画面をフォアグラウンドでのみ開きます。このデータオブジェクトモデルがiOSと連携して採用され、アプリが正常に機能する場合既に上記のオブジェクトは、郵便配達員のAndroidテストの作業に近づいたものです。しかし、バックグラウンドでは、IDをデータで取得できません。 – user6505882

1

アプリがバックグラウンドの場合、FirebaseはonMessageReceived()を起動しません。なぜ.....?何も思いつきません。このような状況では、FirebaseMessagingServiceを実装する際に何の問題もありません。

文書によれば、バックグラウンドメッセージの到着を処理したい場合は、メッセージと共に「click_action」を送信する必要があります。 Firebaseのコンソールからメッセージを送信することはできませんが、Firebase API経由でのみ可能です。それはマーケティングの人々がそれを使用できるようにするためにあなた自身の "コンソール"を構築​​する必要があることを意味します。だから、これはFirebaseコンソールもまったく役に立たない!

この新しいツールの背後にある本当に良い、有望なアイデアはありますが、ひどく実行されました。

私は新しいバージョンと改善/修正を待つ必要があると思います!

+0

*なぜ?ペイロードに通知キーがあるからです。 –

0

サーバーが私に日付を見ることができないバックグラウンドで通知オブジェクトを送信するときに問題が見つかりました。しかし、サーバーがIDのみを送信すると、タイトルと本文データなしで通知を作成する方法はありますか?

+0

あなたは身体とタイトルをデータ、または自分のコンビネーションに送ります。何かをデータに送ることができます。ほぼ.. –

関連する問題