Как показать пользовательский интерфейс для уведомления Firebase, когда приложение в фоновом режиме? - PullRequest
0 голосов
/ 01 июня 2018

Я использую этот класс для отображения уведомлений с моим собственным пользовательским интерфейсом (RemoteViews), полученным с консоли Firebase.Это прекрасно работает, когда приложение находится на переднем плане, но когда приложение находится в фоновом режиме, уведомление отображается в стиле устройства по умолчанию. Что мне делать, чтобы отобразить уведомление в моем собственном интерфейсе, даже если приложение находится на переднем плане или в фоновом режиме?

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "Mehdi";

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

        if (remoteMessage.getNotification() != null)
        {
            RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.payam_notification_layout);
            contentView.setTextViewText(R.id.payam,remoteMessage.getNotification().getBody());

            String channelId = "Default";
            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(this,channelId)
                            .setSmallIcon(R.drawable.status_icon_delivered)
                            .setLargeIcon(BitmapFactory.decodeResource( getResources(), R.mipmap.icon))
                            .setSound(Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/" + R.raw.notification))
                            .setCustomBigContentView(contentView)
                            .setContentTitle(remoteMessage.getNotification().getTitle())
                            .setContentText(remoteMessage.getNotification().getBody())
                            .setAutoCancel(true);

            NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(channelId, "Default channel", NotificationManager.IMPORTANCE_DEFAULT);
                manager.createNotificationChannel(channel);
            }
            manager.notify(0, mBuilder.build());
        }

    }

}

Примечание: спасибо за правильный ответ, я мог бы отправить уведомление со своим собственным пользовательским интерфейсом по этой ссылке, даже если приложение находится в фоновом режиме или на переднем плане: http://www.androiddeft.com/2017/11/18/push-notification-android-firebase-php/

1 Ответ

0 голосов
/ 01 июня 2018

Фактически тип буксирного груза, который мы используем при отправке уведомления,

Один - Уведомление Полезная нагрузка, а другой - Данные Полезная нагрузка.Уведомление полезной нагрузки управляет уведомлением автоматически, когда вы находитесь на переднем плане, они вызывают onMessageReceived из службы firebase, но когда вы находитесь в фоновом режиме, они не вызывают onMessageReceived,

Так что для целей решения просто отправьте данные в Данные Полезная нагрузка и удаление Уведомление Полезная нагрузка, чтобы вы могли получать уведомления в onMessageReceived в каждом штате и управлять этим пользовательским интерфейсом.

Проверьте приведенный ниже пример

function sendFCMNotification($message,$id) {
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array (
        'to' => $id,
        'data' => array (
                "body" => $message,
                "title" => "Title Text"
        )
);
$fields = json_encode ( $fields );
$headers = array (
        'Authorization: key=' . "Legcy Key",
        'Content-Type: application/json'
);
...