Thanks to visit codestin.com
Credit goes to developers.mindbox.ru

3.1. Android: ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° push-notifications Ρ‡Π΅Ρ€Π΅Π· Firebase

🚧

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ эти шаги Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ:

πŸ‘

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ шага Β«ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° push-notifications Π½Π° Android Ρ‡Π΅Ρ€Π΅Π· FirebaseΒ»:

Push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ отправляСтся ΠΈΠ· Mindbox ΠΈ отобраТаСтся Π½Π° устройствС. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ push-увСдомлСния ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой инструкции.

πŸ“˜

1. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ вашСго прилоТСния с Firebase

Π˜Π·Β ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ инструкции ΠΏΠΎ добавлСнию FirebaseΒ Π½ΡƒΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹:

  • Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Firebase;
  • ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎ инструкции Ρ„Π°ΠΉΠ»Β google-services.json;
  • ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ БСрвисы Google Π² своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅;
  • Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅Β firebase-messagingΒ Π² gradle;
  • ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Firebase Server Key.
dependencies {
    implementation platform('com.google.firebase:firebase-bom:33.7.0')
    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.firebase:firebase-messaging-ktx'
   ...

}

2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Mindbox SDK явно Π² build.gradle

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Mindbox SDK Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Β build.gradleΒ (ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ app).

πŸ“˜

Начиная с вСрсии 2.10.0 Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ firebase явно. ВмСсто этого слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π΅Π· вСрсии:

implementation 'cloud.mindbox:mindbox-firebase'

dependencies {
		...
    implementation 'cloud.mindbox:mindbox-firebase' # since 2.10.0
		...
}
dependencies {
		...
    implementation 'cloud.mindbox:mobile-sdk:{послСдняя Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ вСрсия}'
    implementation 'cloud.mindbox:mindbox-firebase:{послСдняя Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ вСрсия}'
		...
}

3. ΠŸΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π² SDK Firebase-Ρ‚ΠΎΠΊΠ΅Π½

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ kotlin-класс с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌΒ MindboxFirebaseMessagingService.
  2. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ этот класс наслСдником ΠΎΡ‚Β FirebaseMessagingService().
  3. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Β onNewToken.
import android.util.Log
import cloud.mindbox.mobile_sdk.Mindbox
import cloud.mindbox.mindbox_firebase.MindboxFirebase
import com.google.firebase.messaging.*

class MindboxFirebaseMessagingService: FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        // ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ‚ΠΎΠΊΠ΅Π½Π° Π² Mindbox SDK
        Mindbox.updatePushToken(applicationContext, token, MindboxFirebase) // since 2.8.2
        // Mindbox.updatePushToken(applicationContext, token) Π΄ΠΎ вСрсии 2.8.2
    }
}

4. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ

4.1. ΠŸΡ€ΠΈΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ id, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ описаниС ΠΊΠ°Π½Π°Π»Π° для push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΈ ΠΌΡ‹ создадим собствСнный ΠΊΠ°Π½Π°Π» для ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ. Для Π½Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ вмСстС с ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚ΠΎΠ»ΠΎΠ³ΠΎΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ описаниС. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ ΠΊΠ°Π½Π°Π»Ρ‹ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π½Π° Android ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ для вашСго прилоТСния строкой.

class MindboxFirebaseMessagingService: FirebaseMessagingService() {

		...
    override fun onMessageReceived(remoteMessage: RemoteMessage) {

        val channelId = "< Π˜Π”Π•ΠΠ’Π˜Π€Π˜ΠšΠΠ’ΠžΠ  ΠšΠΠΠΠ›Π >" // "my_android_app_channel"
        val channelName = "< ΠΠΠ—Π’ΠΠΠ˜Π• ΠšΠΠΠΠ›Π >" // "Π Π΅ΠΊΠ»Π°ΠΌΠ½Ρ‹Π΅ рассылки"
        val channelDescription = "< ΠžΠŸΠ˜Π‘ΠΠΠ˜Π• ΠšΠΠΠΠ›Π >"  // "Рассылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ"
				val pushSmallIcon = "< ИКОНКА Π”Π›Π― Π£Π’Π•Π”ΠžΠœΠ›Π•ΠΠ˜Π™ >" // R.mipmap.ic_launcher
    }
}

4.2. Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ для отрисовки push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ

class MindboxFirebaseMessagingService: FirebaseMessagingService() {

		...
    override fun onMessageReceived(remoteMessage: RemoteMessage) {

       Mindbox.handleRemoteMessage(
            context = applicationContext,
            message = remoteMessage,
            activities = mapOf(),
            channelId = channelId, 
            channelName = channelName,
            pushSmallIcon = pushSmallIcon, 
            defaultActivity = MainActivity::class.java,
            channelDescription = channelDescription
        )
    }
}

ΠœΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Β TRUE, Ссли push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ, ΠΈΒ FALSE, Ссли push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ. На этот статус Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π²ΡΠ·Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ push-увСдомлСния Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

import cloud.mindbox.mobile_sdk.Mindbox
import cloud.mindbox.mindbox_firebase.MindboxFirebase
import com.google.firebase.messaging.*

class MindboxFirebaseMessagingService: FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        // ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ‚ΠΎΠΊΠ΅Π½Π° Π² Mindbox SDK
        Mindbox.updatePushToken(applicationContext, token, MindboxFirebase) // с вСрсии 2.8.2
        // Mindbox.updatePushToken(applicationContext, token) Π΄ΠΎ вСрсии 2.8.2
    }

    override fun onMessageReceived(remoteMessage: RemoteMessage) {

        val channelId = "< Π˜Π”Π•ΠΠ’Π˜Π€Π˜ΠšΠΠ’ΠžΠ  ΠšΠΠΠΠ›Π >"      // "my_android_app_channel"
        val channelName = "< ΠΠΠ—Π’ΠΠΠ˜Π• ΠšΠΠΠΠ›Π >"         // "Π Π΅ΠΊΠ»Π°ΠΌΠ½Ρ‹Π΅ рассылки"
        val channelDescription = "< ΠžΠŸΠ˜Π‘ΠΠΠ˜Π• ΠšΠΠΠΠ›Π >"  // "Рассылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ"
        val pushSmallIcon = R.mipmap.ic_launcher

        // ΠœΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ boolen, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ„ΠΎΠ»Π±Π΅ΠΊ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
        val messageWasHandled = Mindbox.handleRemoteMessage(
            context = applicationContext,
            message = remoteMessage,
            activities = mapOf(),
            channelId = channelId, 
            channelName = channelName,
            pushSmallIcon = pushSmallIcon, 
            defaultActivity = MainActivity::class.java,
            channelDescription = channelDescription
        )

        if (!messageWasHandled) {
            // Если push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π½Π΅ ΠΎΡ‚ Mindbox ΠΈΠ»ΠΈ Π² Π½Π΅ΠΌ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΠΎΠ»Π±Π΅ для Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
        }
    }
}

4.3. ЗарСгистрируйтС сСрвис ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π² AndroidManifest.xml

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Ρ„Π°ΠΉΠ»Β AndroidManifest.xmlΒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹:

<application ...>
  ...

  <service android:name=".MindboxFirebaseMessagingService" android:exported="false">
    <intent-filter>
      <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
  </service>

  ...
</application>

5. Π”ΠΎΡ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ push-увСдомлСния ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ всСгда

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Application.onCreate Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Mindbox.initPushServices с MindboxFirebase.

Если Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅Ρ‚ этого класса, Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ:

  1. New β†’ Kotlin class.
  2. Π’ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΠΈΠΆΠ΅.
  3. ЗарСгистрируйтС класс Π² AndroidManifest.xml.
import cloud.mindbox.mindbox_firebase.MindboxFirebase
import cloud.mindbox.mobile_sdk.Mindbox
import cloud.mindbox.mobile_sdk.pushes.MindboxPushService
  
class MainApplication : Application(), ReactApplication {

	override fun onCreate() {
    super.onCreate()
    Mindbox.initPushServices(this, listOf(MindboxFirebase))
    // Mindbox.initPushServices(this, listOf(MindboxHuawei, MindboxFirebase)) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с двумя сСрвисами
  }
}
πŸ‘

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ шага Β«ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° push-notifications Π½Π° Android Ρ‡Π΅Ρ€Π΅Π· FirebaseΒ»:

Push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ отправляСтся ΠΈΠ· Mindbox ΠΈ отобраТаСтся Π½Π° устройствС. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ push-увСдомлСния ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой инструкции.