Предложения и предложения по реализации в Push-уведомлениях в Android - PullRequest
0 голосов
/ 25 мая 2018

Я реализовал push-уведомление с использованием fcm, но я хочу, чтобы уведомление было похоже на Flipkart. Если я публикую некоторые какие-либо предложения и предложения для пользователя, пользователь должен перенаправить на эту страницу, если он нажмет на push-уведомление.Как я могу это реализовать?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Итак, прежде всего вам нужен уникальный тег, например.Notification_type или type и т. д. внутри полезной нагрузки, получаемой в уведомлении, этот тип используется для направления PendingIntent туда, куда его следует перенаправить. Итак, если вы знакомы с FirebaseMessagingService, вы управляете уведомлением внутри класса, который теперь распространяется внутри FirebaseMessagingService внутри этогокласс определяет объект PendingIntent здесь есть шаг

 private PendingIntent pendingIntent = null;

Обрабатывать уведомления вот так

 public void onMessageReceived(RemoteMessage remoteMessage) {
    // TODO(developer): Handle FCM messages here.
    // If the application is in the foreground handle both data and notification messages here.
    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See showChatNotification method below.

    //Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
    // Log.d(TAG, "From: " + remoteMessage.getFrom());

    //Logger.d(TAG + " getData: " + remoteMessage.getData().toString());
    //Logger.d(TAG + " getData: " + remoteMessage.getNotification().getBody());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        Map<String, String> data = remoteMessage.getData();
        setNotification(data);
    } else {
        Log.e(TAG, "Notificaiton");
    }
}

Здесь я создал метод setNotification(data); для обработки события при получении уведомления

 private void showOtherNotification(Map<String, String> data) {
    Date now = new Date();
    uniqueId = now.getTime();

        if (data.containsKey("type")) {
            switch (data.get("type")) {
                case "today_diss":
                    navigetToTodaysDisFragment(data);
                    break;
                case "questionnaire":
                    navigetToQuestionaire(data);
                    break;
                default:
                    navigateToHome();
                    break;
            }
        } else {
            navigateToHome();
        }



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


    NotificationCompat.Builder notificationBuilder;
    //Large Icon
    Bitmap remote_picture = null;
    try {
        if (data.containsKey("image")) {
            if (!data.get("image").isEmpty()) {
                remote_picture = BitmapFactory.decodeStream(
                        (InputStream) new URL(data.get("image")).getContent());

            }

        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    // this is a my insertion looking for a solution
    int icon = getNotificationIcon();
    if (data.containsKey("image") && remote_picture != null) {
        notificationBuilder = new NotificationCompat.Builder(this,"default")
                .setSmallIcon(icon)
                .setContentTitle(getResources().getString(R.string.app_name))
                .setStyle(new NotificationCompat.BigTextStyle().bigText(StringEscapeUtils.unescapeJava(data.get("message"))))
                .setContentText(StringEscapeUtils.unescapeJava(data.get("message")))
                .setAutoCancel(true)
                .setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary))
                .setContentIntent(pendingIntent)
                .setPriority(Notification.PRIORITY_MAX)
                .setLargeIcon(remote_picture)
                .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(remote_picture)
                        .setBigContentTitle(getString(R.string.app_name))
                        .setSummaryText(StringEscapeUtils.unescapeJava(data.get("message"))));
    } else {
        notificationBuilder = new NotificationCompat.Builder(this,"default")
                .setSmallIcon(icon)
                .setContentTitle(getResources().getString(R.string.app_name))
                .setStyle(new NotificationCompat.BigTextStyle().bigText(StringEscapeUtils.unescapeJava(data.get("message"))))
                .setContentText(StringEscapeUtils.unescapeJava(data.get("message")))
                .setAutoCancel(true)
                .setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary))
                .setContentIntent(pendingIntent)
                .setPriority(Notification.PRIORITY_MAX);
    }


    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify((int) uniqueId, notificationBuilder.build());


}

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

Теперь, если вы видите, что код спокойствия

  case "today_diss":
                    navigetToTodaysDisFragment(data);
                    break;
                case "questionnaire":
                    navigetToQuestionaire(data);
                    break;
                default:
                    navigateToHome();
                    break;

Это основное решение, которое вам нужно. Эти методы перенаправят вас также на экран, на который вы хотите перенаправить, поэтому здесь я приведу вам пример navigateToHome();

Этот метод перенаправит вас на HomeScreen.

   private void navigateToHome() {
    Intent intentToEventPage = new Intent(MyFirebaseMessagingService.this, DashActivity.class);
    intentToEventPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intentToEventPage.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    pendingIntent = PendingIntent.getActivity(this, (int) uniqueId /* Request code */, intentToEventPage, PendingIntent.FLAG_ONE_SHOT);
}

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

0 голосов
/ 25 мая 2018

Здравствуйте, @Tirumalesh kallepalli. Вы можете достичь этого, используя PendingIntent из вашего класса FirebaseMessagingService.

Пример

    public class FcmListenerService extends FirebaseMessagingService {
    private String msg;
    NotificationHelper notificationHelper;

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
    JSONObject object = null;
     try {
            Map<String, String> params = remoteMessage.getData();
            object = new JSONObject(params);
        } catch (Exception e) {

        }
        sendNotification(object);
  }

 private void sendNotification(JSONObject object) {

 //Here You can give your screen name whatever you want to open
 //Instead of HomeActivity.class you can replace your activity
        Intent intent = new Intent(this, HomeActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        try {
            msg = object.getString("message");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Uri defaultSoundUri = 
        RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new 
          NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_action_notification)
                .setContentTitle("Firebase Push Notification")
                .setContentText(msg)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());
}

Просто дайте имя активности в Pending Intent. Ничего другого, я надеюсь, что этотебе поможет.

...