1

Firebaseコンソールからプッシュ通知を受け取った後、アプリケーションデータベースを更新しようとしています。これは、アプリケーションが実行されているときに動作しますが、アプリケーションがバックグラウンドにあるときやプロセスが終了したときに、SharedPreferencesのデータを変更することはできません。FirebaseMessagingService - データベースまたはSharedPreferencesをバックグラウンドから更新する方法は?

しかし、NotificationManagerとの送信通知が機能しています。 Firebaseからプッシュ通知を取得する際にデータベースを更新する方法はありますか?

private void sendNotification(String messageBody) { 
    Intent intent = new Intent(this, EventListActivityDrawerNewMenu.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
      PendingIntent.FLAG_ONE_SHOT); 

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("FCM Message") 
      .setContentText(messageBody) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
} 

private void saveDataToPreferences(String data) { 
    Context context = this; 
    SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(UpdateDataService.MY_PREFS_NAME, MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putString(UpdateDataService.MY_PREFS_NAME, data); 
    editor.commit(); 
} 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    android.os.Debug.waitForDebugger(); 

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

    if (remoteMessage.getData().size() > 0) { 
     Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 
    } 

    if (remoteMessage.getNotification() != null) { 
     Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
     sendNotification(remoteMessage.getNotification().getBody()); 
    } 

    saveDataToPreferences(remoteMessage.getNotification().getBody()); 

} 

答えて

2

私は問題を販売しました。 Firebaseには、表示メッセージとデータメッセージという2種類のプッシュ通知があります。また、データメッセージだけがサービスを起動してデータベースを更新する可能性があります。あなたは、URLだけPOSTリクエストによって送信することができ、firebaseコンソールからのデータメッセージを作成することはできません。

https://fcm.googleapis.com/fcm/send 

はボディ:

{ 
"data": { 
    "data" : "some message", 
    "other_key" : true 
}, 
"registration_ids": ["here your user token", "another user token"]} 

ヘッダ:

  • キー:のContentタイプ:値:application/json

  • キー:認証、値:key = your-server-key

関連する問題