Желаемая активность не открывается при нажатии на уведомление FCM - PullRequest
0 голосов
/ 03 ноября 2018

Я делаю демонстрацию на FCM, где, если я нажимаю на уведомление, он должен перейти в класс уведомлений и показать сообщение уведомления. Но всякий раз, когда я нажимаю на уведомление, оно всегда перенаправляется к активности по умолчанию, т.е. к MainActivity. Я видел так много повторяющихся вопросов, как я, но не нашел правильного решения. Какое бы решение я не нашел, я пробовал и те, которые не работали. Пожалуйста, посмотрите код моего намерения и дайте мне знать, где я совершил ошибку, или мне не хватает чего-то еще, чтобы добавить что-либо в мой код.

Intent resultIntent = new Intent(mCtx, NotificationActivity.class);
resultIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(mCtx, 0, resultIntent,
        PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT);

mBuilder.setContentIntent(pendingIntent);

И в манифесте также я поставил как

  android:exported="true"

но все равно он перенаправляет на MainActivity каждый раз.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

Следуйте этому, удалите ненужный код из него. Это из активного проекта, может помочь вам, что не хватает.

fun createNormalNotification(notiId: Int, context: Context,
                                 toClass: Class<out Activity>,
                                 title: String, content: String,
                                 smallIcon: Int) {
        val intent = Intent(context, toClass)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        val pendingIntent = PendingIntent.getActivity(context, notiId
                , intent, PendingIntent.FLAG_UPDATE_CURRENT)
        val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as
                NotificationManager

        creatingNotificationChannel(notificationManager, P.getChannelId(context), P
                .getChannelName(context),
                P.getChannelDescription(context))
        val pattern = longArrayOf(500, 500, 500, 500, 500, 500, 500, 500, 500)
        val mBuilder = NotificationCompat.Builder(context, P.getChannelId(context))
                .setSmallIcon(smallIcon)
                .setContentTitle(title)
                .setContentText(content)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setContentIntent(pendingIntent)
                .setDefaults(Notification.DEFAULT_SOUND)
                .setVibrate(pattern)
                .setAutoCancel(true);

        val notification = mBuilder.build()
        notification.flags = Notification.FLAG_NO_CLEAR or Notification.FLAG_ONGOING_EVENT
        notificationManager.notify(notiId, mBuilder.build());
    }


@TargetApi(Build.VERSION_CODES.O)
private fun creatingNotificationChannel(notificationManager: NotificationManager,
                                            channelId: String, channelName: String,
                                            channelDescription: String) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            // Create the NotificationChannel, but only on API 26+ because
            // the NotificationChannel class is new and not in the support library
            val name: CharSequence = channelName;
            val description = channelDescription
            val channel = NotificationChannel(channelId, name, NotificationManager
                    .IMPORTANCE_DEFAULT);
            channel.description = description;
            // Register the channel with the system

            notificationManager.createNotificationChannel(channel);
        }
    }
0 голосов
/ 03 ноября 2018

Вы можете попробовать ниже код: -

public class MyFirebaseMessagingService extends FirebaseMessagingService {

private String TAG = getClass().getSimpleName();


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

    Log.e(TAG, "FROM>>" + remoteMessage.getFrom());

    if (remoteMessage.getData().size() > 0) {
        Log.e(TAG, "Message Body>>" + remoteMessage.getData());
    }

    if (remoteMessage.getNotification() != null) {
        Log.e(TAG, "Message Body>>" + remoteMessage.getNotification().getBody());
        Log.e(TAG, "Message title---------------->>" + remoteMessage.getNotification().getTitle());
        Log.e(TAG, "Message Body----------------->>" + remoteMessage.getNotification().getBody());
        sendNotification(remoteMessage.getNotification().getTitle(),remoteMessage.getNotification().getBody());
    }
}

private void sendNotification(String tital, String body) {
    Intent intent = null;


    Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)

            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Your Notification")
            .setContentText(body)
            .setSound(uri)
            .setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(body))
            .setAutoCancel(true);

    Log.e(TAG, "Message Body---" + body);
    Log.e(TAG, "Title--" + tital);
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(0, notificationBuilder.build());

 }
}
0 голосов
/ 03 ноября 2018

Это проблема с уведомлением, отправленным из бэкэнда. FCM откроет активность запуска по умолчанию, если прибудет полезная нагрузка data и полезная нагрузка notification заставит вас запустить пользовательскую активность. Прямо сейчас ваш onMessageReceived метод не вызывается. Для более подробного объяснения см. Этот ответ

...