Skip to main content
Documentation for version v73

Быстрый старт

В статье приведен пример быстрой интеграции 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)
}
}
)
}
}