Невозможно отобразить уведомление Android Heads Up с FCM - PullRequest
0 голосов
/ 21 марта 2019

Я работаю с Firebase для отправки уведомлений пользователю. Я могу отправить базовое уведомление совершенно нормально. Однако у меня возникли проблемы с превращением этого уведомления в уведомление. Я пробовал несколько решений от StackOverflow, но ни одно из них не работало со мной.

Ниже приведен соответствующий класс для получения push-уведомлений.

public class MyFirebaseMessagingService extends FirebaseMessagingService {

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

        NotificationManager mNotificationManager = getSystemService(NotificationManager.class);
        NotificationChannel channel = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            channel = new NotificationChannel("channel",
                    "Channel description",
                    NotificationManager.IMPORTANCE_HIGH);
            mNotificationManager.createNotificationChannel(channel);
        }

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(getApplicationContext(), "channel")
                        .setSmallIcon(R.drawable.googleg_standard_color_18)
                        .setContentTitle(message.getNotification().getTitle())
                        .setContentText(message.getNotification().getBody())
                        .setDefaults(Notification.DEFAULT_ALL)
                        .setPriority(Notification.PRIORITY_HIGH);

        mNotificationManager.notify(0, mBuilder.build());
    }
}

1 Ответ

1 голос
/ 21 марта 2019

Вы должны добавить службу прослушивания, как в стандартной реализации GCM.Вот учебник с использованием первого, который может быть полезен для вас, поскольку он включает в себя регистрацию FCM, а также включение этой информации в шаги вашего приложения для Android

public class MyGcmListenerService extends GcmListenerService {

    private static final String TAG = "MyGcmListenerService";

    /**
     * Called when message is received.
     *
     * @param from SenderID of the sender.
     * @param data Data bundle containing message data as key/value pairs.
     *             For Set of keys use data.keySet().
     */
    // [START receive_message]
    @Override
    public void onMessageReceived(String from, Bundle data) {
        String message = data.getString("message");
        Log.d(TAG, "From: " + from);
        Log.d(TAG, "Message: " + message);

        if (from.startsWith("/topics/")) {
            // message received from some topic.
        } else {
            // normal downstream message.
        }

        // [START_EXCLUDE]
        /**
         * Production applications would usually process the message here.
         * Eg: - Syncing with server.
         *     - Store message in local database.
         *     - Update UI.
         */

        /**
         * In some cases it may be useful to show a notification indicating to the user
         * that a message was received.
         */
        sendNotification(message);
        // [END_EXCLUDE]
    }
    // [END receive_message]

Выполнить код snippetExpand snippet

Затем зарегистрируйте приемник в теге AndroidManifest.xml для прослушивания входящих уведомлений:

<!-- [START gcm_listener] -->
<service
    android:name="gcm.play.android.samples.com.gcmquickstart.MyGcmListenerService"
    android:exported="false" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</service>
<!-- [END gcm_listener] -->

Таким образом - вам не придется обрабатывать входящие сообщения отдельно в тех случаях, когда приложение находится на переднем плане противфон.

...