0

私は、プッシュ通知を受け取るためにfirebaseメッセージングサービスを使用するアプリを持っています。アプリが破棄されたときにfirebaseを使用してプッシュ通知を表示する方法

通知情報をFCM送信サーバーに送信する際に、「通知」または「データ」の使用の違いを既に検索しました。

アプリが破棄されたときは、フォアグラウンドまたはバックグラウンドのときにのみ通知が表示されません。

私のサーバーは、毎回(約1週間に2回ほど)毎回プッシュ通知をデバイスに送信する必要がありますが、アプリケーションは閉じている間に通知を表示できる必要があります。

どうすればいいですか?これは私がFCM送信側サーバーに送信しています私の通知JSONエンコードされた文字列です:アプリがバックグラウンドまたはフォアグラウンドにある間

{ 
"to":"d_kQKDkq5V4:APA91bG4hIyqbr2a_24nUIe6jVbySS90FMnVKwwuTfG1dV3OooeAc_555XkB2e_h_oWzEOMde8uIt2ESvv_Thl1J1sEXDHWPsLCE7EdMXkZ_AS6xlVq8uJIjVojz1WPxqiUjWZm65Ypf", 
"data":{ 
      "title":"App in background again", 
      "body":"asdsad" 
     } 
} 

だから、通知が表示されますが、それは破壊されている間、それは表示されません。アプリが破棄されている間に通知を受信して​​表示できるようにするにはどうすればよいですか?私はこのアプローチは、カスタムOSの携帯電話上では動作しません見てきました

public void onMessageReceived(RemoteMessage remoteMessage) { 
     /*String title = remoteMessage.getNotification().getTitle(); 
     String message = remoteMessage.getNotification().getBody(); 
      */ 
     Log.e("REG_TOKEN",remoteMessage.getData().get("title")); 
     Map<String,String> data = remoteMessage.getData(); 
     String title = data.get("title"); 
     String message = data.get("body"); 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 

     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this); 
     notificationBuilder.setContentTitle(title) 
       .setContentText(message) 
       .setSmallIcon(R.mipmap.ic_launcher_round) 
       .setAutoCancel(true) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(0, notificationBuilder.build()); 


    } 

答えて

0

これは私のonMessageRecieved()メソッドです。

0

メッセージが受信されたときにデバイスがDozeまたはスタンバイモードになっていることが原因で発生している可能性があります。

デフォルトで

、通知メッセージが高で送信されます。the documentationで説明したように、データ・メッセージを送信しているので、あなたがしたい場合、デバイスは、あなたのメッセージを受け取るために、すぐに目覚めなければ、あなたは高い優先度でそれを送信する必要があります優先度、および データメッセージが通常の優先度で送信されます。通常の優先度は をクライアントアプリケーションのバッテリ消費を最適化し、 の即時配信が必要でない限り使用する必要があります。通常の優先度のメッセージの場合、 アプリは、不特定の遅延でメッセージを受信することがあります。

それはあなたのメッセージに1行追加です:

{ 
"to": "d_kQKDkq5V4:APA91bG4hIy...qiUjWZm65Ypf", 
"priority": "high", 
"data":{ 
      "title":"App in background again", 
      "body":"asdsad" 
     } 
} 

優先度の高いメッセージを送信する場合には役立ちませんが、その後、アプリを置く携帯電話のモデルの一つでテストすることができますStopped State(最近のタスクリストからスワイプするなど)で特定の方法で強制終了された場合。詳細は、this answerを参照してください。

+0

私は優先度を追加しましたが、何も変わっていません。私はまだ通知を受け取ることができません。私は停止状態の質問を見て、ここでstackoverflowで答え始めますが、私は実際にこの作業をするために必要なクラスを取得していないようです。 BroadcastRecieverを使用する必要がありますか? –

+0

アプリを終了したら、_Settings_> _App Manager_に行きます。アプリを見つけ、アプリ情報を見てください。 _Force Stop_ボタンは有効または無効ですか?無効にすると、アプリは停止状態になり、FCMメッセージを開くことでユーザーが停止状態から解除するまで、FCMメッセージは受信されません。 –

+0

力の停止が無効ではない、私はまだそれをクリックすることができます。つまり、それは停止状態ではないということですか? –

関連する問題