Почему клик по уведомлению FCM в трее не запустил мое приложение? - PullRequest
0 голосов
/ 02 июня 2018

Мое сообщение с данными уведомления, как показано ниже:

{data=
    {"sender_username":null,
        "image":null,
        "is_background":false,
        "payload":{"post_id":"1"},
        "userId":2,
        "title":"ABC",
        "message":"Someone liked your post!",
        "timestamp":"2018-06-02 10:46:50"
    }
}

Это сообщение получено, когда приложение находится на переднем плане, оно получено в onMessageReceived(RemoteMessage message). Я также знаю, что мое это сообщение принимается только когда приложение вforeground.

Проблема

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

Вот мой код:

AndroidManifest.xml

<!-- Firebase service -->
     <service
        android:name=".services.FirebaseMessagingService"
        android:enabled="true"
        android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
    </service>
    <service
        android:name=".services.FirebaseInstanceIDService"
        android:enabled="true"
        android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
    </service>

Вот как я обработал уведомление:

public void showNotificationMessage(final String title, final String message, final String timeStamp, Intent intent, String imageUrl) {
    // Check for empty push message
    if (TextUtils.isEmpty(message))
        return;


    // notification icon
    final int icon = R.drawable.logo;

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    final PendingIntent resultPendingIntent =
            PendingIntent.getActivity(
                    mContext,
                    0,
                    intent,
                    PendingIntent.FLAG_CANCEL_CURRENT
            );

    final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            mContext);

    final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
            + "://" + mContext.getPackageName() + "/raw/notification");

    if (!TextUtils.isEmpty(imageUrl)) {

        if (!imageUrl.equalsIgnoreCase(null) && imageUrl.length() > 4 && Patterns.WEB_URL.matcher(imageUrl).matches()) {

            Bitmap bitmap = getBitmapFromURL(imageUrl);

            if (bitmap != null) {
                showBigNotification(bitmap, mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
            } else {
                showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
            }
        }
    } else {
        showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
        playNotificationSound();
    }
}

private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {

    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();

    inboxStyle.addLine(message);

    Notification notification;
    notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
            .setAutoCancel(true)
            .setContentTitle(title)
            .setContentIntent(resultPendingIntent)
            .setSound(alarmSound)
            .setStyle(inboxStyle)
            .setWhen(getTimeMilliSec(timeStamp))
            .setSmallIcon(R.mipmap.ic_launcher)
            .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
            .setContentText(message)
            .build();

    NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(AppConfig.NOTIFICATION_ID, notification);
}

Мой код работает хорошо до 'com.google.firebase:firebase-messaging:10.2.4', проблема возникает, когда я обновляюсь до 'com.google.firebase:firebase-messaging:17.0.0'.

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

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

Спасибо.

1 Ответ

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

Я могу дать лучшую идею, если вы скажете мне Откуда вы вызываете это сообщение showNotification и где находится ваш класс FirebaseMessagingService ()?

Но, насколько я понимаю, намерение, которое вы передаетев качестве параметра следует указать, какую деятельность вы хотите открыть, что-то вроде этого:

    val intent = Intent(this@MyFirebaseMessagingService, MainActivity::class.java)// here i want to open the MainActivity on notification click
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    val pendingIntent = PendingIntent.getActivity(this@MyFirebaseMessagingService, 0, intent, PendingIntent.FLAG_ONE_SHOT)

Я получу четкое представление, если вы сможете показать мне свой класс, где вы расширяете класс FirebaseMessagingService ().

Надеюсь, это поможет.

...