2017-02-09 10 views
1

По Firebase Documentation:Android Firebase: Huawei p8 push Notification не отображается в системе, когда приложение находится в фоновом режиме?

Когда приложение находится на переднем плане:

onMessageReceived называется, и я мог бы показать уведомление толчок и сделать любой процесс с данными (Нет проблем со мной в этом случае).

Когда приложение в фоновом режиме:

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

Моя проблема заключается в том, что система уведомлений не показывает уведомление, когда приложение находится в фоновом режиме.

Я НЕ использую консоль Firebase, потому что я не мог добавить данные в полезную нагрузку уведомления. Поэтому я использовал API-интерфейс RESTful, но это все та же проблема.

Запрос:

URL:https://fcm.googleapis.com/fcm/send 
Method type: POST 
Content-Type: application/json 
Authorization : key=AAAAFi0N5KM.... 
Body: 

    { 
    "priority" : "high", 
    "notification" : { 
     "body" : "This week’s edition is now available.", 
     "title" : "NewsMagazine.com", 
     "icon" : "new", 
     "click_action": "OPEN_ACTIVITY_1" , 
     "sound" : "mySound" 

    }, 
    "data": { 
     "title": "title " , 
     "body": "any vaslue " 
    }, 
    "registration_ids": ["fVNdKJsWtNQ:APA91bEJ...."] 
} 

Ответ:

{ 
"multicast_id": 6105324374411246344, 
"success": 1, 
"failure": 0, 
"canonical_ids": 0, 
"results": [ 
    { 
    "message_id": "0:1486655756341577%dc81f05ff9fd7ecd" 
    } 
    ] 
} 

этот метод работает, когда приложение находится на переднем плане, но когда в фоновом режиме он не работает

Android Код:

public void onMessageReceived(RemoteMessage remoteMessage) { 
    super.onMessageReceived(remoteMessage); 
    sendNotification(remoteMessage.getData().get("title"),remoteMessage.getData().get("body")); 
} 

private void sendNotification(String messageTitle,String messageBody) { 
    Intent intent = new Intent(this, SplashActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0 /* request code */, intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    long[] pattern = {500,500,500,500,500}; 

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

    NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.roshetta_logo_home) 
      .setContentTitle(messageTitle) 
      .setContentText(messageBody) 
      .setAutoCancel(true) 
      .setVibrate(pattern) 
      .setLights(Color.BLUE,1,1) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
} 

манифест

<service android:name=".Util.PushNotification.MyFirebaseMessagingService" 
     > 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
     </intent-filter> 
    </service> 
    <service android:name=".Util.PushNotification.MyFirebaseIDService"> 
     <intent-filter> 
      <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
     </intent-filter> 
    </service> 
+0

На каком устройстве вы тестируете? – Picci

+0

huawei p8 @Picci –

+0

onMessageReceiveived не будет вызываться в фоновом режиме, так как ваша полезная нагрузка имеет тег уведомления. Система Android по умолчанию должна обрабатывать уведомление самостоятельно. Может быть, это проблема с иконкой или звуком ... попробуйте это без этого – Kushan

ответ

2

Каждый раз, когда у нас были проблемы с телефонами Huawei, это было потому, что приложение не было «Защищенным приложением».

  1. Перейти к настройкам
  2. прокрутки вниз и нажмите на Дополнительные настройки
  3. Нажмите на Battery Manager
  4. Найти Защищенные приложения и выберите его
  5. Найти приложение и установить его защищенный
+0

Убирайтесь, чтобы сделать это в коде? –

+0

нет, только OS. – Picci

0

Попробуйте отправить уведомление с

to: 

вместо

registration_ids 

Документы советуют нам registration_ids только если есть больше чем один этом получатель.

registration_ids Строка массива
Этот параметр определяет список устройств (регистрационные маркеры, или идентификаторы) получение многоадресного сообщения. Он должен содержать не менее 1 и не более 1000 регистрационных токенов. Используйте этот параметр только для группового обмена сообщениями, а не для одиночных получателей. Многоадресные сообщения (отправка более 1 регистрационных токенов) разрешены только с использованием формата HTTP JSON.

Также, как вы заявили, onMessageReceived не будет вызываться, когда устройство находится в фоновом режиме, и в полезной нагрузке есть метка уведомления.

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

Если все в порядке, проверьте, находится ли устройство в режиме доза (api> = 23). сообщения с высоким приоритетом должны разбудить устройство от доза, но это может не сработать, если производитель устройства вмешался в orroid os или изменил его.

Если уведомление все еще не доставлено, это может быть ошибка конкретного устройства. проверьте другое устройство для подтверждения.

Если ничего не сделать следующее:

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

Только полезная нагрузка данных всегда будет работать как в фоновом режиме, так и в фоновом режиме. Он всегда будет вызывать onMessageReceived.