Быстрый старт
В статье приведен пример быстрой интеграц ии Altcraft mSDK с 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:1.0.2")
}
- Выполните синхронизацию изменений 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)
}
}