Конфигурация SDK
Предвари тельные условия
- В приложении добавлен класс, расширяющий Application.
- В проекте должен быть подключён репозиторий Maven Central.
- Добавлена зависимость библиотеки в файл
build.gradle.ktsуровня приложения (app level):
dependencies {
implementation("com.altcraft:android-sdk:1.0.1")
}
Подготовка приложения
Настройка JWT-интерфейса (опционально)
JWTInterface — интерфейс запроса JWT-токена. Предоставляет актуальный JWT-токен из приложения по запросу SDK. Реализация данного интерфейса требуется, если используется JWT-аутентификация API-запросов. JWT подтверждает, что пользовательские идентификаторы аутентифицированы приложением.
Реализация JWT-аутентификации обязательна, если используется тип матчинга отличный от push-данных из подписки (например, идентификатор пользователя — email или телефон).
Интерфейс SDK:
interface JWTInterface {
fun getJWT(): String?
}
Реализация на стороне приложения
import android.content.Context
import com.altcraft.sdk.interfaces.JWTInterface
class JWTProvider(): JWTInterface {
override fun getJWT(): String? {
// код, возвращающий JWT-токен
}
}
Регистрация провайдера в Application.onCreate()
import android.app.Application
import com.altcraft.sdk.AltcraftSDK
class App : Application() {
override fun onCreate() {
super.onCreate()
AltcraftSDK.setJWTProvider(JWTProvider(applicationContext))
}
}
getJWT() — синхронная функция. Поток выполнения SDK будет приостановлен до получения JWT. Рекомендуется, чтобы getJWT() возвращал значение немедленно — из кэша (in-memory, SharedPreferences или EncryptedSharedPreferences) — это ускорит выполнение запросов. Желательно подготовить актуальный JWT как можно раньше (на старте приложения) и сохранить его в кэш, чтобы при обращении SDK токен был доступен без задержек. При отсутствии значения допустимо вернуть null.
Подготовка к работе с push-провайдерами
Для предварительной подготовки приложения к работе в провайдерами push, необходимо:
- Интегрировать SDK push-провайдеров в проект;
- Реализовать интерфейсы SDK для передачи и удаления push-токена;
- Расширить сервисы push-провайдеров;
- Зарегистрировать сервис push-провайдера в
AndroidManifest.xml.
Firebase Cloud Messaging
Интеграция FCM SDK в проект
Статья по интеграции FCM доступна здесь.
Реализация интерфейса Altcraft SDK
FCMInterface — интерфейс запроса и удаления push-токена FCM:
- Передает токен FCM в SDK Altcraft
- Удаляет токен FCM по запросу SDK Altcraft
Интерфейс SDK:
interface FCMInterface {
suspend fun getToken(): String?
suspend fun deleteToken(completion: (Boolean) -> Unit)
}
Рекомендуемая реализация на стороне приложения
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
class FCMProvider : FCMInterface {
override suspend fun getToken(): String? = try {
Firebase.messaging.token.await()
} catch (_: Exception) {
null
}
override suspend fun deleteToken(completion: (Boolean) -> Unit) {
try {
FirebaseMessaging.getInstance().deleteToken().addOnCompleteListener {
completion(it.isSuccessful)
}
} catch (_: Exception) {
completion(false)
}
}
}
Регистрация провайдера в Application.onCreate()
import android.app.Application
class App : Application() {
override fun onCreate() {
super.onCreate()
AltcraftSDK.pushTokenFunctions.setFCMTokenProvider(FCMProvider())
}
}
Реализация сервиса провайдера
Рекомендуемая реализация FCMService с передачей уведомления в функцию takePush():
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.
*
* @param message The received [RemoteMessage].
*/
override fun onMessageReceived(message: RemoteMessage) {
super.onMessageReceived(message)
AltcraftSDK.PushReceiver.takePush(this@FCMService, message.data)
}
}
Регистрация сервиса push-провайдера в AndroidManifest.xml
<service
android:name="<your_package_name>.FCMService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Huawei Mobile Services
Интеграция HMS SDK в проект
Статья по интеграции HMS доступна здесь.
Реализация интерфейса Altcraft SDK
HMSInterface — интерфейс запроса и удаления push-токена HMS.
Интерфейс SDK:
import android.content.Context
interface HMSInterface {
suspend fun getToken(context: Context): String?
suspend fun deleteToken(context: Context, complete: (Boolean) -> Unit)
}
Рекомендуемая реализация на стороне приложения
import android.content.Context
import com.altcraft.sdk.interfaces.HMSInterface
import com.huawei.agconnect.AGConnectOptionsBuilder
import com.huawei.hms.aaid.HmsInstanceId
import com.huawei.hms.api.HuaweiApiAvailability
private const val APP_ID = "client/app_id"
private const val TOKEN_SCOPE = "HCM"
class HMSProvider : HMSInterface {
override suspend fun getToken(context: Context): String? = try {
val availability = HuaweiApiAvailability.getInstance()
.isHuaweiMobileServicesAvailable(context)
if (availability != com.huawei.hms.api.ConnectionResult.SUCCESS) return null
val appId = AGConnectOptionsBuilder().build(context).getString(APP_ID)
HmsInstanceId.getInstance(context).getToken(appId, TOKEN_SCOPE)
} catch (e: Exception) {
null
}
override suspend fun deleteToken(context: Context, complete: (Boolean) -> Unit) {
try {
val appId = AGConnectOptionsBuilder().build(context).getString(APP_ID)
HmsInstanceId.getInstance(context).deleteToken(appId, TOKEN_SCOPE)
complete(true)
} catch (e: Exception) {
complete(false)
}
}
}
Регистрация провайдера в Application.onCreate()
import android.app.Application
class App : Application() {
override fun onCreate() {
super.onCreate()
AltcraftSDK.pushTokenFunctions.setHMSTokenProvider(HMSProvider())
}
}