Рубрики
Без рубрики

Интеграция Push-уведомлений с Firebase Java API

Интеграция Push-уведомлений с Firebase Java API Firebase является одной из самых универсальных… Помечено firebase, java, android, notification.

Firebase – одна из самых универсальных платформ для разработки приложений, доступных на рынке прямо сейчас.

Эта статья была первоначально опубликована по адресу: Эта статья была первоначально опубликована по адресу:

То, что начиналось как независимая компания, было приобретено Google еще в 2014 году, и с тех пор им не приходилось оглядываться назад. Сегодня Firebase может похвастаться 18 различными продуктами, которые удовлетворяют самые разные потребности как мобильных, так и веб-приложений. Сегодня мы рассмотрим, как мы можем реализовать push-уведомления в нашем приложении для Android с помощью Firebase Cloud Messaging, широко известного как FCM. Этот учебник предполагает базовые знания программирования на Android и Firebase. Вы можете перейти к Firebase Console , чтобы узнать, как настроить свой проект.

подглядывать

Вот небольшой предварительный просмотр приложения, которое мы будем создавать. У нас есть два приложения, одно из которых будет отправлять push-уведомления, а другое – получать их. Отправитель отправляет уведомление в определенную тему, и все подписчики этой конкретной темы получат уведомление. Это также реализация популярного шаблона проектирования pub-sub в messaging.

У отправителя есть два поля: заголовок и текст сообщения, а также кнопка для отправки сообщения в тему. Мы создали тему под названием “предложения”, которая будет оповещать пользователей каждый раз, когда появляется новое предложение.

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

Код отправителя

Давайте сначала взглянем на код на стороне отправителя. Это та часть, которая немного сложна. Нам нужно кое-что сделать, прежде чем мы начнем. Сначала перейдите в консоль Firebase и получите Ключ сервера на вкладке Облачных сообщений в настройках проекта. Это будет необходимо для проверки подлинности ваших запросов, и его необходимо добавить в заголовок запроса.

Файл Констант

 public class Constants {
    public static final String SERVER_KEY = "ENTER YOUR SERVER KEY HERE";
    public static final String BASE_URL = "https://fcm.googleapis.com";
    public static final String CONTENT_TYPE = "application/json";
}

Просмотр Constants.java в контексте на/| Этот ИИ

Строка 1-5: Создайте класс с именем Constants и сохраните в нем все значения констант. Здесь у нас есть ключ сервера, тип содержимого и базовый URL-адрес для обмена сообщениями Firebase Cloud. Не забудьте заменить ключ сервера значением из вашей консоли Firebase.

Классы моделей

public class Notification {
    private String title;
    private String body;

    public Notification(String title, String body) {
        this.title = title;
        this.body = body;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getBody() {
        return body;
    }
    public void setBody(String body) {
        this.body = body;
    }
}

Просмотр Уведомления.java в контексте Quod AI

Строка 1-21: Теперь мы создадим все классы моделей. Тот, который требуется для данных уведомления, и тот, который требуется для ответа. Класс уведомлений, приведенный ниже, содержит поля, заголовок и тело, а также конструктор и средства получения/установки. Это довольно простой Java-код.

public class PushNotification {
    private Notification notification;
    private String to;

    public PushNotification(Notification notification, String to) {
        this.notification = notification;
        this.to = to;
    }
    public PushNotification(Notification data) {
        this.notification = data;
    }
    public Notification getNotification() {
        return notification;
    }
    public void setNotification(Notification data) {
        this.notification = data;
    }
    public String getTo() {
        return to;
    }
    public void setTo(String recipient) {
        this.to = recipient;
    }
}

Просмотр Пушнотификация.java в контексте по адресу Этот ИИ

Строка 1-24: Далее у нас есть класс Push-уведомлений, который является фактическим классом, который мы будем использовать для перехода к теме. Здесь у нас есть поле класса Notification и строковое поле “кому”, которое обозначает получателя или тему, на которую мы хотим отправить сообщение.

Теперь мы создадим интерфейс для вызова API. Мы будем использовать библиотеку Retrofit в Android для выполнения вызовов API. Retrofit – это легкий и очень простой в использовании HTTP-клиент, доступный для Android и Java. Все, что вам нужно, чтобы начать его использовать, – это добавить зависимость в файл build.gradle. Вы можете прочитать больше об этом на их официальном сайте, приведенном выше, чтобы получить более полное представление о библиотеке. Всегда рекомендуется читать документацию при использовании библиотеки для вашего приложения.

Давайте подробнее рассмотрим интерфейс API уведомлений.

public interface NotificationAPI {
    @Headers({"Authorization: key=" + Constants.SERVER_KEY, "Content-Type:" + Constants.CONTENT_TYPE})
    @POST("fcm/send")
    Call postNotification(@Body PushNotification data);
}

Просмотр NotificationAPI.java в контексте Quod AI

Строка 1-5: Давайте пройдемся строка за строкой. Первая строка @Headers переопределяет заголовки по умолчанию и добавляет ключ сервера, который мы получили ранее, и задает тип содержимого как application/json. @post аннотация означает, что это будет post-запрос, а значение в скобках показывает конечную точку. Затем у нас есть фактическое имя метода, которое возвращает объект ответа (определенный выше), когда мы передаем объект Pushnotification в теле на сервер.

Сведение всего этого воедино в Основной деятельности

public static final String TOPIC = "/topics/deals";


Button sendButton = findViewById(R.id.send);
EditText titleText = findViewById(R.id.title);
EditText contentText = findViewById(R.id.content);


sendButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        String title = titleText.getText().toString();
        String content = contentText.getText().toString();

        if(!title.isEmpty() && !content.isEmpty()){
            Notification message = new Notification(title, content);
            PushNotification data = new PushNotification(message, TOPIC);
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(Constants.BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

            NotificationAPI apiService =
                    retrofit.create(NotificationAPI.class);
            Call call = apiService.postNotification(data);
            call.enqueue(new Callback() {
                @Override
                public void onResponse(Call call, retrofit2.Response response) {
                    if (!response.isSuccessful()) {
                        Log.d(TAG, String.valueOf(response.code()));
                        return;
                    }
                    titleText.setText("");
                    contentText.setText("");
                    Toast.makeText(MainActivity.this, "Message Pushed", Toast.LENGTH_SHORT).show();
                }
                @Override
                public void onFailure(Call call, Throwable t) {
                    Log.d(TAG, t.getMessage());

Просмотр MainActivity.java в контексте на Этот ИИ

Строка 1: Мы создали тему под названием “сделки” в нашем коде, и считается хорошей практикой добавлять к ней слово “темы”.

Строка 3-5: Сначала нам нужно получить все текстовые поля и кнопку отправки, чтобы использовать их в приложении. Идентификатор упоминается в коде разработки XML, а findViewById, как следует из названия, используется для получения компонентов из соответствующего действия на основе i d.

Строка 7-8: Теперь мы установим OnClickListener на кнопку, а остальная логика, необходимая для программы, записана в этом прослушивателе.

Строка 9-12: Как только кнопка нажата, мы извлекаем значения внутри текстовых полей. Затем это используется для создания объекта, который нам нужно отправить в тему.

Строка 15-18: Далее мы создаем экземпляр Retrofit, который будет использоваться для выполнения вызова API. Мы устанавливаем baseUrl из нашего файла констант, устанавливаем фабрику конвертеров (в данном случае Gson) для преобразования из JSON в Java POJOs и наоборот.

Строка 20-21: Затем мы создаем экземпляр нашей службы API уведомлений, передавая его в модифицированный экземпляр, который мы только что создали.

Строка 22-36: При выполнении модифицированного вызова API мы можем использовать метод enqueue для асинхронного указания пользователю после получения ответа. В нашем случае мы получим сообщение о том, что сообщение было отправлено. Если произойдет сбой, в тосте будет показано исключение.

Код получателя

FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
.addOnCompleteListener(new OnCompleteListener() {
    @Override
    public void onComplete(@NonNull Task task) {
        String msg = ("Subscribed");
        if (!task.isSuccessful()) {
            msg = "Couldn't subscribe to topic";
        }
        Log.d(TAG, msg);
        Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
    }
});

Просмотр MainActivity (Приемник).java в контексте Quod AI

Строка 1-12: Получатель – это, по сути, пустое приложение для Android, подписанное на определенную тему. Он прослушивает тему, которую мы упомянули, и как только появляется новое сообщение, запускается прослушиватель и создается уведомление с использованием полезной нагрузки. Внутри Основного действия единственное, что нам нужно сделать, это подписаться на тему, которую мы создали ранее. Если все прошло успешно, мы просто выводим сообщение с надписью “Подписался”, в противном случае “Не удалось подписаться на тему”.

Класс обслуживания

    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getNotification().getBody());
        }
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }
        Notification notification = new NotificationCompat.Builder(this)
                .setContentTitle(remoteMessage.getNotification().getTitle())
                .setContentText(remoteMessage.getNotification().getBody())
                .setSmallIcon(R.mipmap.ic_launcher)
                .build();
        NotificationManagerCompat manager = NotificationManagerCompat.from(getApplicationContext());
        manager.notify(123, notification);

Просмотр MyFirebaseMessagingService.java в контексте на/| Этот ИИ

Строка 4: Теперь, чтобы создать класс обслуживания. Это класс, который расширяет класс службы обмена сообщениями Firebase. Нам нужно переопределить метод onMessageReceived, чтобы вызвать уведомление.

Строка 6-10: Если размер сообщения больше 0 и если поле уведомления не равно null, мы создаем новое уведомление. Заголовок и содержимое уведомления извлекаются из сообщения, которое было перехвачено прослушивателем.

Строка 12-16: Мы также можем использовать пользовательские значки в уведомлениях, но мы также использовали сам значок приложения для уведомления.

Строка 17-18: Наконец, мы используем NotificationManagerCompat, чтобы получить applicationcontext и вывести уведомление на экран.

Сделай что-нибудь большое!

Это только начало того, что вы можете сделать с помощью push-уведомлений на Android. С Firebase Cloud Messaging так легко начать, но сложные функции, такие как обмен сообщениями в пабах, которые вы только что видели, часто упускаются из виду. Представьте себе создание приложения, которое может отправлять push-уведомления пользователям в зависимости от их близости к ресторанам о предложениях, действующих в этот день. Возможности безграничны!

Ссылки на GitHub

Ссылки на GitHub

Оригинал: “https://dev.to/quod_ai/integrating-push-notifications-with-firebase-java-api-531”