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

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

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

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

  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"
    }
}
circle-info
  • В методе onNewToken необходимо отправить полученный токен на мобильный бекенд.

  • В методе onMessageReceived необходимо отобразить полученное data-сообщение и отправить на сервер i-Digital информацию о статусе уведомления для отслеживания статусов доставки.

  • При отправке запроса со статусом уведомления необходимо использовать WorkManager, так как существуют ограничения на время выполнения метода onMessageReceived в фоне.

Подробнее о получении и отображении уведомлений вы можете найти в следующей Android и Firebase документации:

Отслеживание статусов доставки

При получении уведомления вам необходимо передавать на наш сервер информацию об идентификаторе сообщения на нашей платформе и статусе уведомления. Для этого в методе onMessageReceived отправляйте следующий HTTP-запрос:

В ответ наш сервер должен вернуть 204 No Content.

Отправка уведомлений

При отправке уведомлений используется ключ сервисного аккаунта в формате.json для авторизации на сервере Firebase, который вам нужно передать в i-Digital. Ключ можно создать в консоли Google Cloud, предварительно создав роль с разрешением на отправку сообщений в Firebase Cloud Messaging.

Как создать роль с разрешением на отправку сообщений в Firebase Cloud Messaging?

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

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

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

  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 ACCOUNTarrow-up-right.

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

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

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

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

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

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

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

Отправьте письмо на [email protected] с темой "Подключение PUSH i-digital direct", указав в теле письма название вашей организации и прикрепив к письму скачанный json-файл ключа.

Последнее обновление