Быстрый старт
В статье приведен пример быстрой интеграции Altcraft mSDKv2 с Firebase Cloud Messaging (FCM). После выполнения указанных шагов ваше приложение сможет получать push-уведомления Altcraft.
Для использования Huawei Mobile Services или RuStore необходимо добавить соответствующие SDK в проект и реализовать их интерфейсы, используя тот же подход, что показан для Firebase.
Шаг 0. Предварительные условия
- SDK push-провайдеров интегрированы в проект приложения (см. инструкции по интеграции push провайдеров);
- В приложение добавлен класс, расширяющий
Application()
; - Все необходимые сущности (ресурс, кампания, шаблон, база профилей) заранее созданы в платформе Altcraft;
- Для отправки push-уведомлений на устройствах с Android 13 (Tiramisu) требуется явное разрешение пользователя.
Шаг 1. Интеграция Altcraft mSDK в приложение
- Добавьте зависимость библиотеки в файл
build.gradle.kts
уровня приложения (app level).
dependencies {
implementation("com.altcraft:android-sdk:0.0.1")
}
- Выполните синхронизацию изменений Gradle.

Шаг 2. Реализация JWTInterface
Выполните реализацию интерфейса SDK, предназначенного для предоставления JWT-токена.
В модуле приложения создайте класс, реализующий JWTInterface
, и переопределите getJWT()
:
import com.altcraft.sdk.interfaces.JWTInterface
class JWTProvider(private val context: Context /** добавьте свойство context если это необходимо*/) : JWTInterface {
override fun getJWT(): String?{
//ваш код возвращающий актуальный JWT токен
}
}
getJWT()
— синхронная функция. Поток выполнения SDK будет приостановлен до получения JWT;- Рекомендуется, чтобы
getJWT()
возвращал значение немедленно из кэша (in-memory
,SharedPreferences
илиEncryptedSharedPreferences
). Это ускорит выполнение запросов; - Желательно подготовить актуальный JWT как можно раньше, например, на старте приложения, и сохранить его в кэш, чтобы при обращении SDK токен был доступен без задержек. При отсутствии значения допустимо вернуть
null
.
Пример реализации с использованием suspend-функции получения токена
import android.content.Context
import com.altcraft.sdk.interfaces.JWTInterface
import kotlinx.coroutines.runBlocking
class JWTProvider(private val context: Context /** добавьте свойство context если это необходимо*/) : JWTInterface {
private suspend fun fetchJwt(context: Context): String? {
//ваш код возвращающий актуальный JWT токен
return jwt
}
override fun getJWT(): String? = runBlocking {
fetchJwt(context)
}
}
Шаг 3. Регистрация провайдера JWT
Зарегистрируйте провайдера JWT в Application.onCreate()
:
import android.app.Application
import com.altcraft.sdk.AltcraftSDK
class App : Application() {
override fun onCreate() {
super.onCreate()
AltcraftSDK.setJWTProvider(JWTProvider(/** добавьте свой ство context если это необходимо*/))
}
}
Шаг 4. Реализация интерфейса FCM
В модуле приложения создайте класс, реализующий FCMInterface
:
Пример реализации
import com.altcraft.sdk.interfaces.FCMInterface
import com.google.firebase.Firebase
import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await
/**
* FCM implementation for managing Firebase Cloud Messaging tokens.
*
* Provides methods to retrieve and delete FCM tokens via the Firebase SDK.
*/
class FCMProvider : FCMInterface {
/**
* Retrieves the current FCM token.
*
* Returns `null` if an error occurs during retrieval.
*
* @return The FCM token or `null` on failure.
*/
override suspend fun getToken(): String? {
return try {
Firebase.messaging.token.await()
} catch (e: Exception) {
null
}
}
/**
* Deletes the current FCM token.
*
* Invokes [completion] with `true` if successful, `false` otherwise.
*
* @param completion Callback with the result of the deletion.
*/
override suspend fun deleteToken(completion: (Boolean) -> Unit) {
try {
FirebaseMessaging.getInstance().deleteToken().addOnCompleteListener {
completion(it.isSuccessful)
}
} catch (e: Exception) {
completion(false)
}
}
}
Шаг 5. Создание сервиса, расширяющего FirebaseMessagingService()
В модуле приложения создайте класс, расширяющий FirebaseMessagingService
, и реализуйте в нём метод onMessageReceived()
с вызовом AltcraftSDK.PushReceiver.takePush()
для передачи данных push-уведомления в SDK:
Пример создания сервиса
import com.altcraft.sdk.AltcraftSDK
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
/**
* FCM service for handling push tokens and messages.
*/
class FCMService : FirebaseMessagingService() {
/**
* Called when a new FCM token is generated.
*
* @param token The new FCM token.
*/
override fun onNewToken(token: String) {
super.onNewToken(token)
}
/**
* Called when a push message is received.
*
* Forwards the message to all receivers with additional metadata.
*
* @param message The received [RemoteMessage].
*/
override fun onMessageReceived(message: RemoteMessage) {
super.onMessageReceived(message)
AltcraftSDK.PushReceiver.takePush(this@FCMService, message.data)
}
}
Шаг 6. Регистрация сервиса FCM в манифесте приложения
Зарегистрируйте сервис Firebase Cloud Messaging в AndroidManifest.xml
приложения:
<!-- FCM service -->
<service
android:name="<your_package_name>.FCMService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Шаг 7. Регистрация провайдера FCM в Application.onCreate()
Зарегистрируйте провайдера Firebase Cloud Messaging в Application.onCreate()
import android.app.Application
import com.altcraft.fcm.FCMProvider
import com.altcraft.sdk.AltcraftSDK
class App : Application() {
override fun onCreate() {
super.onCreate()
AltcraftSDK.pushTokenFunctions.setFCMTokenProvider(FCMProvider())
}
}
Шаг 8. Инициализация SDK
В Application.onCreate()
создайте переменную конфигурации и выполните инициализацию с помощью функции initialization()
.
Обратите внимание — функция initialization()
должна выполняться после регистрации всех используемых провайдеров (и JWT-провайдера, и провайдеров push-токенов).
Подробнее об инициализации
AltcraftSDK
// Инициализация SDK и установка конфигурации
└── fun initialization(context: Context, configuration: AltcraftConfiguration, complete: ((Result<Unit>) -> Unit)? = null): Unit
fun initialization(context: Context, configuration: AltcraftConfiguration, complete: ((Result<Unit>) -> Unit)? = null): Unit
Пример инициализации:
import android.app.Application
import com.altcraft.sdk.AltcraftSDK
import <your_package_name>.FCMProvider
import com.altcraft.sdk.config.AltcraftConfiguration
class App : Application() {
override fun onCreate() {
super.onCreate()
AltcraftSDK.setJWTProvider(JWTProvider(applicationContext))
AltcraftSDK.pushTokenFunctions.setFCMTokenProvider(FCMProvider())
val config = AltcraftConfiguration.Builder(
apiUrl = "https://pxl-your-instance.altcraft.com",
icon = R.drawable.your_icon
).build()
//установите необходимые параметры конфигурации(см. README Android MSDKv2)
AltcraftSDK.initialization(context = this, configuration = config)
}
}
Шаг 9. Выполнение подписки на push-уведомления
С помощью функции pushSubscribe()
выполните подписку на push-уведомления в любом удобном для вас месте кода, например, после предоставления разрешения на отправку уведомлений:
AltcraftSDK
└── val pushSubscriptionFunctions: PublicPushSubscriptionFunctions
// Подписка на пуш уведомление(status = SUBSCRIBED)
├─ fun pushSubscribe(
│ context: Context,
│ sync: Boolean = true,
│ profileFields: Map<String, Any?>? = null,
│ customFields: Map<String, Any?>? = null,
│ cats: List<DataClasses.CategoryData>? = null,
│ replace: Boolean? = null,
│ skipTriggers: Boolean? = null
│ ): Unit
Пример выполнения подписки:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
NotificationPermissionHandler.isGranted(
activity = this,
onGranted = {
if(isUnsubscribed()){
AltcraftSDK.pushSubscriptionFunctions.pushSubscribe(context = this)
}
}
)
}
}