Настройка Android приложения#

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

Для получения и отображения push-уведомлений выполните следующие шаги:

  1. Добавьте Firebase SDK в приложение, следуя инструкциям из статьи Add Firebase to project.

  2. Реализуйте класс-наследник 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?#

  1. Перейдите в Google Cloud Console и выберите нужный проект.

  1. В навигационном меню слева наведите курсор на IAM & Admin и выберите вкладку Roles.

  1. На открывшейся странице нажмите кнопку CREATE ROLE.

  1. Введите название и ID роли, в выпадающем списке Role launch stage выберите General Availability и нажмите кнопку ADD PERMISSIONS.

  1. Во всплывающем окне в поле Enter property name or value введите cloudmessaging.messages.create, отметьте найденное разрешение и нажмите кнопку ADD.

  1. Нажмите кнопку CREATE.

Как создать сервисный аккаунт и ключ?#

  1. В меню IAM & Admin слева выберите вкладку Service accounts, затем нажмите кнопку CREATE SERVICE ACCOUNT.

  1. На открывшейся странице ведите имя аккаунта и нажмите кнопку CREATE AND CONTINUE.

  1. В выпадающем списке выберите роль, созданную ранее и нажмите кнопку CONTINUE, затем кнопку DONE.

  1. Выберите созданный сервисный аккаунт, на странице аккаунта перейдите на вкладку KEYS.

  1. Нажмите кнопку ADD KEY и выберите Create new key.

  1. Во всплывающем окне выберите тип ключа JSON и нажмите кнопку CREATE.

  1. После этого у вас скачается ключ сервисного аккаунта в формате .json .

Как передать созданный JSON ключ в i-Digital?#

Отправьте письмо на support@i-dgtl.ru с темой «Подключение PUSH i-digital direct», указав в теле письма название вашей организации и прикрепив к письму скачанный json-файл ключа.