Невозможно сгенерировать уведомление от onMessageReceived FirebaseMessagingService в Android - PullRequest
0 голосов
/ 11 февраля 2020

Я отправляю уведомление только с данными из протокола HTTP Firebase Cloud Messaging. Я могу видеть, что уведомление поступает правильно в методе обратного вызова onMessageReceived FirebaseMessagingService в моем приложении Android. Проблема в том, что я не могу генерировать уведомления отсюда. Я написал код для создания уведомлений, но уведомления не появляются в области уведомлений моего телефона.

Ниже мой код:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

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

    String data = remoteMessage.getData().toString();
    Log.d("<<<>>>", "MyFirebaseMessagingService > onMessageReceived > data : " + data);

    String title = remoteMessage.getData().get("title");
    String body = remoteMessage.getData().get("body");

    showNotification(title, body);
}

private void showNotification(String title, String body) {

    Log.d("<<<>>>", "MyFirebaseMessagingService > showNotification() called !");

    Log.d("<<<>>>", "title : " + title);
    Log.d("<<<>>>", "body : " + body);

    Intent intent = new Intent(this, SplashScreenActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "NewsVault_Notification_Channel")
            .setSmallIcon(R.drawable.firebase_notification_icon)
            .setContentTitle(title)
            .setContentText(body)
            .setAutoCancel(true)
            .setContentIntent(pendingIntent);

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

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

}

Ниже мой вывод Logcat:

D/<<<>>>: MyFirebaseMessagingService > onMessageReceived > data : 
{channel_id=NewsVault_Notification_Channel, priority=high, body=Test body, key_1=Value for key_1,     
key_2=Value for key_2, title=Test title, content_available=true}
D/<<<>>>: MyFirebaseMessagingService > showNotification() called !
D/<<<>>>: title : Test title
D/<<<>>>: body : Test body

Я добавил следующие вещи в файл манифеста:

<service
        android:name=".Services.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

<meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="NewsVault_Notification_Channel" />

Ответы [ 4 ]

1 голос
/ 11 февраля 2020
        if (isAppIsInBackground(context)) {
        int res = Utility.getRandomId();
        PendingIntent pendingIntent;

        Intent intent = setActivityIntent(notifyDataModel);
        intent.putExtra(AppConstants.BOOKING_ID, id);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        pendingIntent = PendingIntent.getActivity(context, res, intent, 0);

        mBuilder.setContentTitle(notifyDataModel.getStrTitle())
                .setContentText(notifyDataModel.getStrMessage())
                .setNumber(1)
                .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setAutoCancel(true)
                .setColor(ContextCompat.getColor(context, R.color.colorAccent))
                .setContentIntent(pendingIntent);
        getManager().notify(res, mBuilder.build());

    } else {
        int res = Utility.getRandomId();
        PendingIntent pendingIntent;
        Intent intent = setActivityIntent(notifyDataModel);
        intent.putExtra(AppConstants.BOOKING_ID, id);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        pendingIntent = PendingIntent.getActivity(context, res, intent, 0);

        mBuilder.setContentTitle(notifyDataModel.getStrTitle())
                .setContentText(notifyDataModel.getStrMessage())
                .setNumber(1)
                .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setAutoCancel(true)
                .setColor(ContextCompat.getColor(context, R.color.colorAccent))
                .setContentIntent(pendingIntent);
        getManager().notify(res, mBuilder.build());

    }
0 голосов
/ 11 февраля 2020

PendingIntent pendingIntent = PendingIntent.getActivity (this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

    String channelId ="100";
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder =
            new NotificationCompat.Builder(this, channelId)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle(title)
                    .setContentText("demo")
                    .setAutoCancel(true)
                    .setSound(defaultSoundUri)
                    .setContentIntent(pendingIntent);

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

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(channelId,
                "test",
                NotificationManager.IMPORTANCE_DEFAULT);
        channel.enableLights(true);
        notificationManager.createNotificationChannel(channel);
    }
    notificationManager.notify(0, notificationBuilder.build());
0 голосов
/ 11 февраля 2020

Для Android версий> = Oreo (API-уровень 26) вам потребуется создать канал уведомлений, как показано ниже:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("General", "General notification", NotificationManager.IMPORTANCE_DEFAULT);
            channel.setVibrationPattern(new long[]{1000, 1000, 1000, 1000, 1000});

            AudioAttributes attributes = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                    .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
                    .build();

            channel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI, attributes);
            mNotificationManager.createNotificationChannel(channel);
        }
0 голосов
/ 11 февраля 2020

Вы добавили в свой AndroidManifest. xml? :

<service android:name="YOURPACKAGE.MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
</service>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...