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-ΡΠΎΠΊΠ΅Π½
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ kotlin-ΠΊΠ»Π°ΡΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌΒ
MindboxFirebaseMessagingService
. - Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΎΡΒ
FirebaseMessagingService()
. - Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Β
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
.
ΠΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π΅Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ:
- New β Kotlin class.
- ΠΠΏΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½ΠΈΠΆΠ΅.
- ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ ΠΊΠ»Π°ΡΡ Π²
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-ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
Updated 5 days ago