2016-12-23 9 views
0

にあるとき、私は以下のようになり、アプリに通知をプッシュするサーバからの出力例を持っているデータを保存します。Firebaseは、アプリがバックグラウンド

{ 
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", 
    "notification" : { 
     "body" : "great match!", 
     "title" : "Portugal vs. Denmark", 
     "icon" : "myicon" 
    }, 
    "data" : { 
     "Nick" : "Mario", 
     "Room" : "PortugalVSDenmark" 
    } 
    } 

アプリがでているとき、私はデータの内容を保存するにはどうすればよいです背景がonMessageReceivedの場合は、アプリがフォアグラウンドにあるときにのみトリガーされます。

+0

通知が届いていますか? –

+0

あなたはどのデバイスを使用していますか? –

+0

私は通知を受けています。しかし、onMessageReceivedは呼び出されません。アプリケーションがフォアグラウンドにあるときだけ呼び出されます – John

答えて

1

あなたのアプリが通知およびデータペイロードメッセージのフォアグラウンドまたはバックグラウンドである場合、onMessageReceived()がトリガーされます。アプリがバックグラウンドのときは、通知トレイに通知メッセージが表示されます。しかし、データペイロードメッセージは通常通り(onMessageReceived()経由で)受信されます。問題はありません。その前に、クライアントアプリケーションにメッセージ処理ロジックを実装する必要があります。

check the documentation

+0

私は 'onMessageReceived()'にいくつかのprint文を入れようとしましたが、私のアプリがフォアグラウンドにあるときにだけトリガします。 – John

+0

はい。この段階でもログは機能しません。 Googleはいくつかのトリックを行います。 FireBaseクラスの検証時に情報を取得できます。 – Noorul

+0

この文書を参照してください:https://firebase.google.com/docs/notifications/android/console-audience#backgrounded – Noorul

1

あなたはgetIntentを()getExtras()を使用することができます。インテントを取得するために起動中にインテントをフェッチするためのものです。

詳細here

例:

Bundle bundle = getIntent().getExtras(); 
    if (bundle != null) { 
     if (bundle.containsKey("data")) { 
     Intent intent = new Intent(mContext, ExpectedActivity.Class) 
     intent.putExtras("PUSH_KEY",bundle.get("data").toString()); 
     startActivity(intent) 
    } 
    } 

あなたのランチャーに入れ、このコードをactivity.Andこれはアプリが殺されたり、バックグラウンドである場合でも、あなたの期待される活性にあなたをナビゲートします。

はまた、あなたは私が解決策を見つけたこの

{ 
"data" : { 
"body" : "great match!", 
"title": "Portugal vs. Denmark" , 
"icon : "myicon," 
"Nick" : "Mario", 
"Room" : "PortugalVSDenmark" 
}, 
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..." 
} 
+0

は、jsonの通知タグを削除したようですが、そのトリックを行いました。ソース:https://code.google.com/p/android/issues/detail?id=219084 – John

+0

通知が複数ある場合はどうなりますか? @sunil – John

+0

@John Sryさん、私は休暇中でした。あなたは複数の通知をどのように処理したいですか? PendingIntentで試すことができます。 –

0

のようなあなたのJSONを変更してみてください。ローカルサーバーからfirebaseサーバーに送信するときに、jsonのnotification部分を削除する必要があるようです。アプリがバックグラウンドにある場合はonMessageReceivedが表示されます。

出典:私の私の通知を作成し、手動でJSONからの通知タグを削除していたので、私はやったhttps://code.google.com/p/android/issues/detail?id=219084

。次に、@ sunilの方法を使ってランチャー活動からそれを検索します。

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    System.out.println("Remote Message: " + remoteMessage.toString()); 
    System.out.println("Token: " + FirebaseInstanceId.getInstance().getToken()); 
    System.out.println("From: " + remoteMessage.getFrom()); 
    sendNotification(remoteMessage.getData().toString()); 
    Log.d(TAG, "Message Data payload" + remoteMessage.getData()); 
} 

private void sendNotification(String messageData) { 
    Intent intent = new Intent(this, HomeActivity.class); 
    intent.putExtra("data", messageData); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle("DeliveryOptions") 
      .setContentText("Test") 
      .setAutoCancel(true) 
      .setDefaults(Notification.DEFAULT_SOUND) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0, notificationBuilder.build()); 
} 
関連する問題