В этой статье будет полное описание действий по интеграции вашего Android приложения c Firebase и подключения Firebase Cloud Messaging. Разберем немного теории.
Зачем нам вообще нужен Firebase?
Firebase – это платформа для разработчиков, предоставляющая им множество различных возможностей и функций. С помощью этой платформы, вы можете добавить, например, аналитику, отправку пуш уведомлений, подключение удаленной базы данных и тому подобное, в зависимости от ваших нужд. Подключение Firebase Cloud Messaging и позволяем нам создавать рассылку уведомлений, обычных пуш уведомлений, так и уведомлений внутри приложения.
Чтобы подключить пуши, вначале нам надо интегрировать приложение с обычным Firebase.
- Переходим по ссылке Firebase | Google’s Mobile and Web App Development Platform.
Рис. 1 Главная страница Firebase
2. Нажимаем начать (Get started) и видим все свои проекты. Нажимаем кнопку Создать проект (Add project). Теперь нам нужно указать имя нашего проекта, и отключить Google Analytics. Ждем создания нашего нового проекта.
Рис. 2 Имя нового проекта
3. Когда проект создан, мы попадаем на главную страницу нашего проекта. Здесь нам предлагают выбрать, для какой платформы мы будем добавлять приложение. Выбираем андроид платформу.
Рис. 3 Главная страница нашего проекта
4. Нам обязательно нужно указать пакет нашего приложения (com.package.example), а также опционально добавить название и сертификат sha-1. После этого для нашего приложения будет сгенерирован специальный файл, поэтому пакет приложения указывайте очень внимательно. Если укажете неправильно (даже указав один лишний пробел), то вся интеграция работать не будет.
Рис. 4 Регистрация приложения
5. Скачиваем созданный файл и добавляем его в папку app, нашего проекта.
Рис. 5 Добавление файла google-services.json
6. Добавляем все зависимости, которые Firebase указывает для нас и ждем, когда Android Studio все скачает.
7. Добавляем новый сервис в файле Android Manifest
<service>
android:name="com.gidbet.dice.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
8. И теперь создаем в нашем проекте сам сервис:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// ...
// TODO(developer): Handle FCM messages here.
// Not getting messages here? See why this may be: https://goo.gl/39bRNJ
System.out.println("From: " + remoteMessage.getFrom());
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
System.out.println("Message Notification Body: " + remoteMessage.getNotification().getBody());
}
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
sendNotification(remoteMessage.getFrom(), remoteMessage.getNotification().getBody());
sendNotification(remoteMessage.getNotification().getBody());
}
private void sendNotification(String from, String body) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyFirebaseMessagingService.this.getApplicationContext(), from + " -> " + body,Toast.LENGTH_SHORT).show();
}
});
}
private void sendNotification(String messageBody) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
String channelId = "My channel ID";
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("My new notification")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Since android Oreo notification channel is needed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(channelId,
"Channel human readable title",
NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
}
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
}.
9. После сборки приложения, мы можем протестировать пуш уведомления просто создав и запустив кампанию. Через некоторое время на телефон должно прийти наше пуш уведомление
Теперь мы владеем навыком подключения Firebase и пушей к нашим Android приложениям. С помощью Firebase мы, или кто-то другой, у кого есть доступ, можем запускать кампании по рассылке пуш уведомлений и указывать для них различный текст.
А про различные интеграции и улучшения ваших приложений читайте на нашем Телеграмм-канале: https://t.me/quantummedia1