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”