8

Я отправляю уведомления Firebase через свой собственный веб-сервис с PHP, как показано ниже.Уведомления Firebase (FCM) не появляются, когда приложение android удалено из последнего лотка

$url = 'https://fcm.googleapis.com/fcm/send'; 
     $fields = array(
      'registration_ids' => $tokens, 
      'data' => $message 
      ); 
     $headers = array(
      'Authorization:key = SERVER_KEY ', 
      'Content-Type: application/json' 
      ); 

1.Notifications приходит, когда приложение находится в переднем плане и фоне без каких-либо проблем, но если я удалил приложение из недавнего подноса то уведомления не приходят, я должен иметь, чтобы справиться с этим каким-либо решением для этого? (например, Whatsup-уведомления показывают все сценарии, даже я принудительно остановил это приложение из настроек)

2.Once Мне было получено уведомление от «onMessageReceived», как передать это сообщение, содержимое тела для моей активности/фрагментов?

3.В некоторых случаях я хочу отправлять уведомления всем, вместо того, чтобы добавлять все маркеры в массив. любой другой способ обработки, как «отправить ALL», что-то вроде этого?

public class MyFirebaseMessagingService extends FirebaseMessagingService { 
    private static final String TAG = "MsgService"; 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Log.d(TAG, "From: " + remoteMessage.getFrom()); 
     Log.d(TAG, "Data Payload : " + remoteMessage.getData()); 
     sendNotification(remoteMessage.getData().get("message")); 
    } 
    private void sendNotification(String messageBody) { 
     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); 
     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle("Firebase Push Notification") 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 
     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(0, notificationBuilder.build()); 
    } 
} 

Неудачные устройства: (Уведомления не приходят после удалены из Recent лотка)

  • MI редми Примечание 2 (5.0.2 Lollipop)
  • Huawei честь 5с (5.1.1 Lollipop)

Succeed устройство: (Уведомления пришествия после удалены из Recent лотка)

  • HTC One X (4,2 Jelly Bean)
  • Samsung Галактика Гранд штрих (4,4 Kitkat)
+0

Я не думаю, что это проблема версии ОС (Lollipop vs Jelly Bean и т. Д.), Скорее всего, проблема в том, разрешено ли службам Google Play запускать приложения, которые были уволены с пользователей. Некоторые производители регулируют это поведение. Я предлагаю подать вопрос с поддержкой firebase, чтобы команда FCM могла глубже проникнуть в устройства, которые не работают должным образом. https://firebase.google.com/support/ –

+0

У меня также проблема с сообщениями данных. И насколько я могу судить, он не работает ни для какой версии Android. Я тестировал на Marshmallow и Lollipop. – rGun

+1

lava Irish x1 также –

ответ

5

1.Notifications приходит, когда приложение находится в переднем плане и фоне без каких-либо проблем, но если Я удалил приложение из последнего лотка, а затем уведомления не поступают, мне, должно быть, нужно обработать это решение для ? (Например, уведомление WhatsUp показывает все сценарии даже я силой остановил это приложение от настроек)

В соответствии с вашим кодом вы должны получать исключения нулевого указателя на remoteMessage.getNotification().getBody() как вы не посылаете уведомления, вместо этого вы отправляете данные полезную нагрузку от вашего запроса на завивание. Согласно моему личному опыту, проблема, о которой вы только что упомянули, особенно заметна в Android Kitkat или ниже устройств. На Lollipop или выше Firebase push, похоже, работает нормально.

2.Once Получено уведомление от «onMessageReceived», как передать это сообщение, содержимое тела моей деятельности/фрагменты?

Вы можете оформить трансляцию с onMessageReceived() и зарегистрировать приемник Braodcast в своей деятельности и отправить данные в своем намерении трансляции.Пример кода:

активность

private BroadcastReceiver receiver; 

@Overrride 
public void onCreate(Bundle savedInstanceState){ 

    // your oncreate code 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction("SOME_ACTION"); 

    receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String message = intent.getStringExtra("message"); 
    } 
    }; 
    registerReceiver(receiver, filter); 
} 

@Override 
protected void onDestroy() { 
    if (receiver != null) { 
    unregisterReceiver(receiver); 
    receiver = null 
    } 
    super.onDestroy(); 
} 

FirebaseMessagingService

public class MyFirebaseMessagingService extends FirebaseMessagingService { 
    private static final String TAG = "MsgService"; 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Log.d(TAG, "From: " + remoteMessage.getFrom()); 
     Log.d(TAG, "Notification Message Body: " + remoteMessage.getData()); 

     Intent intent=new Intent(); 
     intent.setAction("SOME_ACTION"); 
     intent.putExtra("message", remoteMessage.getNotification().getBody()); 
     sendBroadcast(intent); 
    } 
} 

3.In некоторые случаи, которые я хочу, чтобы отправить уведомление всем, Вместо добавления всех маркеров в массив. любой другой способ обработки как «отправить ALL» что-то в этом роде?

Там нет ничего, как «Отправить ALL» в Firebase API, единственный способ сделать это с помощью Firebase консоли, которые имеют свои собственные проблемы, чтобы справиться, как белый вопрос значок и копирования пользовательских Params вашего уведомления.

+0

О вопросе 3: Я думаю, что можно «отправить все», если вы зарегистрируете каждого пользователя в «теме», нет ?! –

+0

@Hisham Я только что отредактировал свое сообщение с проверенными устройствами. В моем случае устройства pre-lollipop работают нормально, что означает, что уведомления появляются после удаления приложения из последнего лотка, но в ** уведомления о Lollipop-устройстве не приходят ** при удалении приложения Any подскажите об этом? Также отредактирован 'sendNotification (remoteMessage.getData(). Get (" message "));' – Chandrahasan

1

У меня была проблема с FCM на точно Mi Phone и телефоне Huawei! Оказывается, это не проблема с FCM или вашим приложением, а на уровне их устройств.

У них есть настройки приложения на уровне устройства, которые отключают уведомления или даже блокируют блокировку, поэтому onMessageReceived() не запускается, когда приходит сообщение. После того, как я изменил настройки (в основном разрешить уведомления & отключить оптимизацию батареи для моего приложения), все работает отлично!

См. Firebase cloud messaging not received when app in background.

-1

Эта проблема требует реализации на заднем плане. Позвольте мне обсудить, как я преодолею этот недостаток.

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

Поэтому, возвращая приложение, я вызываю вспомогательную службу, которая регистрирует моего клиента. Задний конец теперь начинает отправлять сообщения из очереди с новым токеном клиента для моего устройства.

Смежные вопросы