1

Я пытаюсь использовать Firebase для push-уведомлений для Android. Но я столкнулся с очень странной проблемой. Все в порядке, когда я отправляю push на передний план. Все нормально, когда я посылаю push в фоновом режиме (я отправляю только данные), пока я не вернусь на передний план, а затем обратно на задний план.FirebaseMessagingService не вызывается после второго фона

Мой FirebaseMessagingService не вызывается, когда у меня есть приложение, которое возвращается во второй раз. Кроме того, обратите внимание, что я использую эмулятор Android. Код:

public class MyAndroidFirebaseMsgService extends FirebaseMessagingService { 
    private static final String TAG = "MyAndroidFCMService"; 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Log.d(TAG, "From: " + remoteMessage.getFrom()); 
    } 
} 

//... 

public class MyAndroidFirebaseInstanceIdService extends FirebaseInstanceIdService { 

    private static final String TAG = "MyAndroidFCMIIDService"; 

    @Override 
    public void onTokenRefresh() { 
     //Get hold of the registration token 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     //Log the token 
     Log.d(TAG, "Refreshed token: " + refreshedToken); 
    } 
    private void sendRegistrationToServer(String token) { 
     //Implement this method if you want to store the token on your server 
    } 
} 

AndroidManifest.xml:

<service android:name=".MyAndroidFirebaseMsgService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
      </intent-filter> 
     </service> 
     <service android:name=".MyAndroidFirebaseInstanceIdService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
      </intent-filter> 
     </service> 

Сервер:

curl -H "Content-type: application/json" -H "Authorization:key=<MYKEY>" -X POST -d '{"to": "<MYTOKEN>","data": {"hello": "This is a Firebase Cloud Messaging Device Group Message!"}}' https://fcm.googleapis.com/fcm/send 

Как я могу решить эту проблему?

ответ

0

Это работает по назначению, уведомления отправляются на ваш обратный вызов onMessageReceived только тогда, когда ваше приложение находится на переднем плане. Если ваше приложение находится в фоновом режиме или закрыто, в центре уведомлений отображается уведомление, и любые данные из этого сообщения передаются в намерение, которое запускается в результате нажатия пользователем на уведомление.

Вы можете указать click_action, чтобы указать намерение, которое должно быть запущено при прослушивании уведомления пользователем. Основное действие используется, если не указано значение click_action.

Когда цель запуска вы можете использовать

getIntent() getExtras(). , чтобы получить набор, который будет включать в себя любые данные, отправленные вместе с уведомлением.

Более подробную информацию о сообщении уведомления https://firebase.google.com/docs/cloud-messaging/android/receive#sample-receive

+0

FirebaseMessagingService не зайдет на фоне –

+0

если (.! GetIntent() getExtras() = NULL) { для (String ключ:.. GetIntent() getExtras() Keyset ()) { Значение объекта = getIntent(). GetExtras(). Get (ключ); Log.d ("MainActivity:", "Key:" + key + "Value:" + value); } } –

+0

вы можете получить данные с объекта цели –