Настройка Android приложения#
Настройка приложения для получения и отображения push-уведомлений#
Для получения и отображения push-уведомлений выполните следующие шаги:
Добавьте Firebase SDK в приложение, следуя инструкциям из статьи Add Firebase to project.
Реализуйте класс-наследник
FirebaseMessagingServiceи добавьте его вAndroidManifest.xml:
<service
android:name=".IDigitalFcmService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Пример реализации FirebaseMessagingService:#
class IDigitalFcmService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToBackend(token)
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
if (remoteMessage.data.containsKey("messageId")) {
showNotification(remoteMessage.data["text"] as String)
// For long-running tasks (10 seconds or more) use WorkManager.
sendReceivedStateCallback(remoteMessage.data["messageId"] as String)
}
}
private fun showNotification(text: String) {
val intent = Intent(this, ScrollingActivity::class.java)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
val pendingIntentFlags = if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
} else {
PendingIntent.FLAG_UPDATE_CURRENT
}
val pendingIntent = PendingIntent.getActivity(this, 0, intent, pendingIntentFlags)
val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Заголовок")
.setContentText(text)
.setSmallIcon(R.drawable.ic_notification_24)
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_HIGH)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createNotificationChannel(notificationManager)
}
notificationManager.notify(Random.nextInt(), notificationBuilder.build())
}
@RequiresApi(Build.VERSION_CODES.O)
private fun createNotificationChannel(notificationManager: NotificationManager) {
val notificationChannel = NotificationChannel(
CHANNEL_ID,
"NotificationChannel",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "NotificationChannelDescription"
}
notificationManager.createNotificationChannel(notificationChannel)
}
companion object {
private const val CHANNEL_ID = "default_channel"
}
}
{% hint style=»info» %}
В методе
onNewTokenнеобходимо отправить полученный токен на мобильный бекенд.В методе
onMessageReceivedнеобходимо отобразить полученное data-сообщение и отправить на сервер i-Digital информацию о статусе уведомления для отслеживания статусов доставки.При отправке запроса со статусом уведомления необходимо использовать
WorkManager, так как существуют ограничения на время выполнения методаonMessageReceivedв фоне. {% endhint %}
Подробнее о получении и отображении уведомлений вы можете найти в следующей Android и Firebase документации:
Отслеживание статусов доставки#
При получении уведомления вам необходимо передавать на наш сервер информацию об идентификаторе сообщения на нашей платформе и статусе уведомления. Для этого в методе onMessageReceived отправляйте следующий HTTP-запрос:
POST <https://nativepush.i-dgtl.ru/notification-state>
Content-Type: application/json
{
"messageId": "MESSAGE_ID",
"state": "RECEIVED"
}
В ответ наш сервер должен вернуть 204 No Content.
Отправка уведомлений#
При отправке уведомлений используется ключ сервисного аккаунта в формате.json для авторизации на сервере Firebase, который вам нужно передать в i-Digital. Ключ можно создать в консоли Google Cloud, предварительно создав роль с разрешением на отправку сообщений в Firebase Cloud Messaging.
Как создать роль с разрешением на отправку сообщений в Firebase Cloud Messaging?#
Перейдите в Google Cloud Console и выберите нужный проект.
.png)
В навигационном меню слева наведите курсор на IAM & Admin и выберите вкладку Roles.
.png)
На открывшейся странице нажмите кнопку CREATE ROLE.
.png)
Введите название и ID роли, в выпадающем списке Role launch stage выберите General Availability и нажмите кнопку ADD PERMISSIONS.
.png)
Во всплывающем окне в поле Enter property name or value введите cloudmessaging.messages.create, отметьте найденное разрешение и нажмите кнопку ADD.
.png)
Нажмите кнопку CREATE.
.png)
Как создать сервисный аккаунт и ключ?#
В меню IAM & Admin слева выберите вкладку Service accounts, затем нажмите кнопку CREATE SERVICE ACCOUNT.
.png)
На открывшейся странице ведите имя аккаунта и нажмите кнопку CREATE AND CONTINUE.
.png)
В выпадающем списке выберите роль, созданную ранее и нажмите кнопку CONTINUE, затем кнопку DONE.
.png)
Выберите созданный сервисный аккаунт, на странице аккаунта перейдите на вкладку KEYS.
.png)
Нажмите кнопку ADD KEY и выберите Create new key.
.png)
Во всплывающем окне выберите тип ключа JSON и нажмите кнопку CREATE.
.png)
После этого у вас скачается ключ сервисного аккаунта в формате
.json.
Как передать созданный JSON ключ в i-Digital?#
Отправьте письмо на support@i-dgtl.ru с темой «Подключение PUSH i-digital direct», указав в теле письма название вашей организации и прикрепив к письму скачанный json-файл ключа.