Функционал SDK
Предварительно вам необходимо настроить SDK для работы с вашим приложением. Подробная инструкция находится здесь
SDK разделён на модули: core (авторизация, события), push, target (цели), profile и in-app. Каждый модуль подключается отдельной зависимостью и доступен через свой объект — AltcraftSDK.auth, AltcraftSDK.push, AltcraftSDK.target, AltcraftSDK.profile, AltcraftSDK.inApp.
Core: авторизация
AltcraftSDK
└─ val auth: AuthAPI
// Установить поставщика JWT-токенов (null — снять)
├─ fun setJWTProvider(provider: JWTInterface?): Unit
// Аутентифицировать текущего пользователя SDK
├─ fun authenticate(context: Context): Unit
// Выйти из профиля (возврат к анонимной сессии)
├─ fun logOut(context: Context): Unit
// Проверить, авторизован ли текущий пользователь
└─ suspend fun isAuthenticated(context: Context): Boolean
Функции авторизации:
fun setJWTProvider()— устанавливает реализациюJWTInterface, через которую SDK получает JWT-токены. Чтобы снять провайдера, передайтеnull. Для работы без JWT используйте rToken из конфигурации.fun authenticate()— аутентифицирует текущего пользователя: отправляет на сервер запрос с JWT-токеном и привязывает устройство к профилю пользователя. Метод работает только при JWT-авторизации — матчинг профиля передаётся в полезной нагрузке JWT, поэтому при авторизации ролевым токеном аутентификация недоступна. После успешной аутентификации пользователь получает доступ к персонализированным In-App уведомлениям.fun logOut()— завершает текущую сессию аутентификации и переводит устройство в анонимный режим. В анонимном режиме недоступны персонализированные In-App уведомления и управление подпиской.suspend fun isAuthenticated()— возвращаетtrue, если текущий пользователь SDK авторизован, иfalseв противном случае.
Вызывайте authenticate() только тогда, когда пользователь действительно выполняет вход в приложение и известен для клиента (например, после успешной авторизации через форму логина, OAuth или другой механизм аутентификации вашего приложения). С logOut() — аналогично: только при реальном выходе пользователя.
Пример установки JWT-провайдера:
class App : Application() {
override fun onCreate() {
super.onCreate()
AltcraftSDK.auth.setJWTProvider(JWTProvider(applicationContext))
// инициализация SDK
}
}
Пример проверки статуса авторизации:
CoroutineScope(Dispatchers.IO).launch {
val authenticated = AltcraftSDK.auth.isAuthenticated(context)
}
Очистка данных SDK
AltcraftSDK
// Полная очистка данных SDK (БД, SharedPreferences, фоновые задачи)
└── fun clear(
context: Context,
onComplete: (() -> Unit)? = null
): Unit
Функция выполняет полную очистку данных SDK: отменяет ожидающие фоновые задачи WorkManager, удаляет записи БД Room и очищает SharedPreferences. Необязательный параметр onComplete вызывается после завершения очистки.
Сброс запрета на retry-операции при инициализации SDK
При инициализации SDK выполняется запуск фоновых задач, выполняющих контроль и повторную отправку запросов, связанных с push-уведомлениями, целями, а также проверку и выполнение запроса на обновление push-токена устройства. Выполнение данной функции ограничено одним запуском в пределах одного жизненного цикла процесса приложения. Иногда может возникнуть необходимость сброса этого ограничения.
AltcraftSDK
// Разрешить переинициализацию фоновых задач в текущей сессии
└── fun unlockInitialOperationsInThisSession(): Unit
Функция сбрасывает флаг запрета на повторный запуск фоновых задач контроля и повторной отправки запросов.
Core: события SDK
// API событий SDK
AltcraftSDK
└── val sdkEvents: SDKEvents
// Доступ к подписке на события SDK
└── val subscription: Events.Subscription
// Подписка на события SDK (заменяет существующего подписчика)
├── fun subscribe(
│ newSubscriber: (Event) -> Unit
│ ): Unit
// Отписка от событий
└── fun unsubscribe(): Unit
В приложении может быть только один активный подписчик на события SDK.
Типы событий SDK:
- Event — общее событие (информация, успешные запросы);
- Error — событие об ошибке;
- RetryError — событие об ошибке при выполнении запроса, для которого предусмотрен автоматический повтор на стороне SDK.
Каждое событие содержит поля:
- function — имя функции, вызвавшей событие;
- event — тип события SDK (
SDKEvent, список см. в таблице ниже); - eventMessage — сообщение события;
- eventValue — дополнительные данные, добавляемые к некоторым событиям;
- date — время события;
- internal — флаг, указывающий, является ли событие внутренним.
Подписка на события
fun subscribe(newSubscriber: (Event) -> Unit): Unit
Функция подписывает приложение на события SDK. При возникновении события SDK она вызывает переданный newSubscriber и передаёт в него экземпляр Event (или его наследника).
Пример использования:
AltcraftSDK.sdkEvents.subscription.subscribe { event ->
// Обработка события
}
Классы событий SDK
open class Event(
val function: String,
val event: SDKEvent? = null,
val eventMessage: String? = null,
val eventValue: Map<String, Any?>? = null,
val date: Date = Date(),
val internal: Boolean = false
)
open class Error(
function: String,
event: SDKEvent? = null,
eventMessage: String? = null,
eventValue: Map<String, Any?>? = null,
date: Date = Date(),
) : Event(function, event, eventMessage, eventValue, date)
class RetryError(
function: String,
event: SDKEvent? = null,
eventMessage: String? = null,
eventValue: Map<String, Any?>? = null,
date: Date = Date(),
) : Error(function, event, eventMessage, eventValue, date)
Отписка от событий
fun unsubscribe(): Unit
Отменяет доставку событий SDK. Подписчик остаётся назначенным, но события больше не передаются.
Пример использования:
AltcraftSDK.sdkEvents.subscription.unsubscribe()
Список всех событий SDK
Список событий по модулям
События SDK доступны через объекты модулей: AltcraftSDK.moduleEvents (core), AltcraftSDK.push.moduleEvents, AltcraftSDK.target.moduleEvents, AltcraftSDK.profile.moduleEvents, AltcraftSDK.inApp.moduleEvents. Каждый элемент — объект SDKEvent со строковым сообщением (message).
Core:
| Значение | Сообщение |
|---|---|
configIsSet | SDK configuration is installed |
sdkCleared | SDK data has been cleared |
notAuthenticatedError | User is not authenticated |
userLogOut | User logged out. Anonymous session started. |
roomMigrationError | Room database migration failed. The local SDK database will be recreated. |
authenticateSuccessful | successful request: profile/authenticate |
pushStatusRequestFailed | failed request: push/status |
Push:
| Значение | Сообщение |
|---|---|
invalidConfig | Invalid push configuration: unsupported push provider. Available providers: android-firebase, android-huawei, android-rustore. |
configIsNull | push configuration is null |
invalidCustomFields | invalid custom fields: not all values are primitives |
eventRetryLimit | push event retry limit |
eventRequestDataIsNull | push event request data is null |
eventRequestSuccessful | successful request: event/push |
eventRequestFailed | failed request: event/push |
pushUidIsNull | push uid is null |
subscribeRetryLimit | push subscribe retry limit |
subscribeRequestDataIsNull | push subscribe request data is null |
subscribeRequestSuccessful | successful request: push/subscribe |
subscribeRequestFailed | failed request: push/subscribe |
suspendRequestSuccessful | successful request: push/suspend |
suspendRequestFailed | failed request: push/suspend |
unsubscribeRequestSuccessful | successful request: push/unsubscribe |
unsubscribeRequestFailed | failed request: push/unsubscribe |
tokenUpdateRequestDataIsNull | token update request data is null |
tokenUpdateRequestSuccessful | successful request: push/update |
tokenUpdateRequestFailed | failed request: push/update |
pushTokenIsNull | push token is null |
notUpdated | push token not updated |
pushProviderSet | push provider set - |
invalidPushProvider | Invalid push provider. Available providers: android-firebase, android-huawei, android-rustore. |
statusRequestDataIsNull | subscription status request data is null |
statusRequestSuccess | successful request: push/status |
statusRequestFailed | failed request: push/status |
unSuspendRequestDataIsNull | unsuspend request data is null |
unSuspendRequestSuccessful | successful request: push/unsuspend |
unSuspendRequestFailed | failed request: push/unsuspend |
pushDataIsNull | push data is null |
notificationErr | notification error |
channelNotCreated | notification channel not created |
pushPermissionDenied | notification permission denied |
pushIsPosted | push notification is posted |
acPush | Altcraft push notification received |
notAcPush | received a notification unrelated to the Altcraft Platform |
receiverRedefined | push receiver redefined |
errorImgLoad | error loading push image |
successImgLoad | push image loaded successfully |
Target:
| Значение | Сообщение |
|---|---|
partsIsNull | target request parts is null |
retryLimit | target request retry limit |
invalidPayload | invalid target payload: not all values are primitives |
requestDataIsNull | target request data is null |
requestSuccessful | successful target request: event/post |
requestFailed | failed target request: event/post |
Profile:
| Значение | Сообщение |
|---|---|
requestDataIsNull | profile update request data is null |
retryLimit | profile update retry limit |
requestSuccessful | successful request: profile/update |
requestFailed | failed request: profile/update |
In-App:
| Значение | Сообщение |
|---|---|
subscribeRetryLimit | in-app subscribe retry limit |
subscribeRequestDataIsNull | in-app subscribe request data is null |
subscribeRequestSuccessful | successful request: inapp/subscribe |
subscribeRequestFailed | failed request: inapp/subscribe |
unsubscribeRequestSuccessful | successful request: inapp/unsubscribe |
unsubscribeRequestFailed | failed request: inapp/unsubscribe |
invalidCustomFields | invalid custom fields: not all values are primitives |
statusRequestDataIsNull | in-app status request data is null |
statusRequestSuccessful | successful request: inapp/status |
statusRequestFailed | failed request: inapp/status |
eventRetryLimit | in-app event retry limit |
eventRequestDataIsNull | in-app event request data is null |
smidIsNull | send message ID is null |
eventRequestSuccessful | successful request: inapp/event |
eventRequestFailed | failed request: inapp/event |
placementsRequestDataIsNull | in-app placements request data is null |
placementsRequestSuccessful | successful request: inapp/placements |
placementsRequestFailed | failed request: inapp/placements |
maxPlacementsInvalid | Invalid in-app configuration: maxPlacements must be >= 1 |
requestIntervalInvalid | Invalid in-app configuration: placementsRequestInterval must be > Duration.ZERO |
placementsLimitExceeded | in-app placements limit exceeded |
invalidStaticField | invalid in-app static field |
inAppStaticErrorLoad | error loading in-app notification static resources |
inAppContentErrorLoad | error loading in-app notification content |