Уведомления Firebase pu sh не запускаются onMessageReceive на Android при закрытии приложения - PullRequest
1 голос
/ 12 февраля 2020

Когда я не отправляю объект уведомления в запросе JSON в API Firebase, onMessageReceive запускается нормально, и мои уведомления работают, как предполагалось, но когда я использую уведомление или объект android в JSON, который я отправляю в качестве параметров, onMessageReceive не запускается, когда приложение находится в фоновом режиме.

Я пытался отладить это, но я не могу понять.

У меня есть простой класс на моем сервере, который использует Firebase API для отправки уведомлений pu sh.

В параметрах, которые я отправляю на сервер я отправляю следующие атрибуты.

"apns": {
    "title": title.nil? ? "Testing notification" : title,
    "body": body.nil? ? "This is a test push notification, liking it?" : body,
    "mutable_content": true,
    "sound": sound.nil? ? "enabled" : sound
  },
  "android": {
    "title": title.nil? ? "Testing notification" : title,
    "body": body.nil? ? "This is a test push notification, liking it?" : body,
    "sound": sound.nil? ? "enabled" : sound
  },

или следующие для кросс-платформ.

"notification": {
    "title": title.nil? ? "Testing notification" : title,
    "body": body.nil? ? "This is a test push notification, liking it?" : body,
    "mutable_content": true,
    "sound": sound.nil? ? "enabled" : sound
  },

Эта конфигурация предложена Google в следующей официальной документации

Документация Firebase Единственный способ, которым он на самом деле работает, - это когда Я НЕ ОТПРАВЛЯЮ объект или android и генерирую уведомление с данными Я себе в атрибуте data объекта JSON, отправленного в Firebase API

params = {
  "#{key}": to,
  # "apns": {
  #   "title": title.nil? ? "Testing notification" : title,
  #   "body": body.nil? ? "This is a test push notification, liking it?" : body,
  #   "mutable_content": true,
  #   "sound": sound.nil? ? "enabled" : sound
  # },
  # "android": {
  #   "title": title.nil? ? "Testing notification" : title,
  #   "body": body.nil? ? "This is a test push notification, liking it?" : body,
  #   "sound": sound.nil? ? "enabled" : sound
  # },
    "data": {
      "title": title,
      "body": body
    }
}.to_json

Уведомления, отправленные через консоль Firebase, также не работают.

¿Есть идеи?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Использование ниже Xml Код в манифесте andorid

  <service
            android:name=".services.MyFirebaseMessagingService"
            android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>

Создание класса MyFirebaseMessaginfService для получения уведомления Firebase при закрытии приложения.

   public class MyFirebaseMessagingService extends FirebaseMessagingService {

LocalBroadcastManager broadcaster;


@Override
public void onCreate() {
    broadcaster = LocalBroadcastManager.getInstance(this);

}
@Override
public void onNewToken(@NonNull String token) {
    Log.d(TAG, "Refreshed token: " + token);
    Const.FireBaseTokenID=token;
    Log.e(TAG, "onComplete:Service "+Const.FireBaseTokenID );
}

public MyFirebaseMessagingService() {
    getFireBaseID();
}

public static void getFireBaseID() {
    FirebaseInstanceId.getInstance().getInstanceId()
            .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                @Override
                public void onComplete(@NonNull Task<InstanceIdResult> task) {
                    if(!task.isSuccessful()){
                        Log.w(TAG, "getInstance ID Failed "+task.getException() );
                        return;
                    }
                    String token = task.getResult().getToken();
                    Log.e(TAG, "onComplete:Service Method "+token );

                }
            });
}

@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

    String call_api=remoteMessage.getData().get("callapi");
    String play_id=remoteMessage.getData().get("play_id");
    String clue_number=remoteMessage.getData().get("clue_number");
    String title=remoteMessage.getData().toString();
    Log.e(TAG, "onMessageReceived: callapi "+call_api );
    Log.e(TAG, "onMessageReceived: play_id "+play_id );
    Log.e(TAG, "onMessageReceived: clue number "+clue_number );
    Log.e(TAG, "onMessageReceived: title "+title );

    Intent intent= new Intent("remoteMessage");
    intent.putExtra("call_api", call_api);
    intent.putExtra("play_id", play_id);
    intent.putExtra("clue_number", clue_number);
    intent.putExtra("title", title);
    broadcaster.sendBroadcast(intent);
}

}

0 голосов
/ 12 февраля 2020

Вы должны отправить с данными формата, такими же:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...