Настройка и подключение SDK для партнеров
Операционная система (ОС) Салют ТВ построена на базе ОС Android. SDK для интеграции с Салют ТВ предоставляется в виде библиотеки в формате AAR.
Добавление библиотеки в проект:
- скопируйте файл
partner_sdk.aar
в директорию проекта; - при использовании Gradle добавьте следующую зависимость в файле
build.gradle
.
dependencies {
implementation "ru.sberdevices.smartapp:sdk:1.2.0"
implementation files('../partner_sdk.aar')
}
После синхронизации в проекте будут доступны файлы библиотек.
Проверка совместимости функций и ОС
С версии 1.1.1 методы классов SDK отмечены аннотацией @SinceVersion
. Аннотация указывает версию aidl-сервиса, начиная с которой поддерживается метод. Такой подход позволяет избежать использования неактуальных методов, которые не поддерживаются в StarOS. Рассинхронизация в поддержке методов возникает из-за разницы релизных циклов SDK и StarOS.
Чтобы проверить версию сервиса, начиная с которой поддерживается метод, используйте метод getVersion()
.
Проверяйте совместимость методов при имплементации интерфейсов:
Analytics
;PublicDeviceInfoManager
;PartnerTokenApi
.
Получение DeviceID
Начиная с версии прошивки 1.83 имеется возможность использовать метод для получения открытого идентификатора DeviceID. Пример вызова представлен ниже:
private val deviceInfo = PublicDeviceInfoFactory.create(
context = context,
binderHelperFactory2 = BinderHelperFactory2Impl(),
coroutineDispatchers = CoroutineDispatchers
)
fun retrieveDeviceId() {
deviceInfo.registerDeviceInfoListener(object : PublicDeviceInfoListener {
override fun onPublicDeviceInfo(publicDeviceInfo: PublicDeviceInfo) {
publicDeviceInfo.deviceId
Log.d("retrieveDeviceId", "deviceId = ${publicDeviceInfo.deviceId}")
}
})
}
retrieveDeviceId()
Хранение ID устройства
{
publicDeviceInfo.deviceId
}
Для сохранения совместимостей необходимо вызывать метод, реализованный для конкретной прошивки.
В случае, если новый метод не возвращает идентификатор, необходимо использовать метод для предыдущей прошивки соответственно.
Оповещение о полном отказе от предыдущего метода будет направлено за полтора месяца до его обновления.
Получение партнерского токена
<manifest>
<uses-permission android:name="ru.sberdevices.permission.BIND_ACCOUNT_LINKING_SERVICE" />
</manifest>
Получение токена доступно исключительно для заранее сконфигурированных Application ID. Вызов данного метода вернет токен только для партнеров, для других приложений вернет ошибку
private val partnerToken = PartnerTokenFactory.create(
context = context,
binderHelperFactory2 = BinderHelperFactory2Impl(),
coroutineDispatchers = CoroutineDispatchers
)
fun retrievePartnerToken() {
val coroutineScope = CoroutineScope(CoroutineDispatchers.ui)
coroutineScope.launch {
val token =
partnerToken.getPartnerToken().getOrNull()?.token ?: "couldn't get partner token"
Log.d("retrievePartnerToken", "partnerToken = $partnerToken")
}
}
retrievePartnerToken()
Хранение партнерского токена при успешном получении
{
partnerToken.getPartnerToken().getOrNull()?.token ?: "couldn't get partner token"
}
Получение статуса прелогина
Для прошивки 1.88 реализован метод для получения статуса прелогина. Пример кода:
val partnerTokenImpl = PartnerTokenFactory.create(
context = this,
coroutineDispatchers = CoroutineDispatchers,
binderHelperFactory2 = BinderHelperFactory2Impl()
)
coroutineScope.launch {
val version = partnerTokenImpl.getVersion()
if (version != null && version >= 2) {
partnerTokenImpl.isPrelogin().fold(onSuccess = { isPrelogin ->
// Статус прелогина успешно получен.
}, onFailure = {
// Произошла ошибка при получении статуса прелогина.
})
} else {
// Текущая версия сервиса, которая не поддерживает получение статуса прелогина.
}
}
Отправка аналитики
Пример кода:
private val analytics = AnalyticsFactory.create(context)
fun sendAnalytics(tag: String, value: String) {
analytics.send(tag, value)
Log.d("sendAnalytics", "analytics successfully sent")
}
sendAnalytics("Example TAG", "Example value")
Проверка признака запуска приложения на устройстве Sber
import ru.sberdevices.services.published.environment.info.EnvironmentInfoHelper
if (EnvironmentInfoHelper.isSberDevice(context)) {
// Устройство выпущено Sber
} else {
// Устройство не выпущено Sber
}
Метод передачи виджетов postPartnerWidgets
Партнерские приложения могут публиковать виджеты в ТВ-вертикали (раздел лончера) после того, как пользователь выбрал их приоритетными провайдерами. Для реализации данного функционала необходимо применить класс ExternalWidgetManager из PartnerSDK. Заранее необходимо запросить и согласовать выдачу ID выделенной галереи (galleryId в примере ниже).
Пример кода:
val manager = ExternalWidgetsManagerFactory.create(context = this, coroutineDispatchers = CoroutineDispatchers)
val result = manager.postPartnerWidgets(
galleryId = galleryId,
listOf(
ExternalWidget(
id = widgetId,
type = ExternalWidgetType.WIDE_MEDIUM,
deeplink = deeplink,
title = "Тестовый виджет PartnerSDK, заголовок",
subtitle = "Тестовый виджет PartnerSDK, подзаголовок",
imageModelUrl = "https://static.okko.tv/images/v2/14072006" +
"?width=442&scale=2&quality=80&mediaType=webp",
backdropImageModelUrl = "https://static.okko.tv/images/v2/13793163?width=1966" +
"&scale=2&quality=80&mediaType=webp",
)
)
)
if (result) {
// Виджет успешно добавлен
} else {
// Произошла ошибка
}
Выходные параметры
Параметр | Описание | Пример |
type | Тип виджета
| wide_medium_type |
title | Главный текст виджета | Мистика |
subtitle | Дополнительный текст виджета | "Фильмы" |
deeplink | Диплинк для перехода при нажатии | 24tv://ag.tv.a24h/live |
id | Обязательное наличие в каждом приложении префикс названия приложения и префикс ИД галереи. | "titanik_best_films_week_24TV" |
imageModelUrl | Картинка виджета | https://static.okko.tv/images/v2/14072006?width=442&scale=2&quality=80&mediaType=webp |
backdropImageModelUrl | Картинка на фон | https://static.okko.tv/images/v2/13793163?width=1966&scale=2&quality=80&mediaType=webp |
backdropLogoImageModelUrl | Логотип на фоне | https://static.okko.tv/images/v2/13039516?width=1568&scale=2&quality=80&mediaType=webp&trimBorder=true |
backdropLogoText | Текст, если не будет логотипа в виде картинки | |
backdropTitle | Заголовок и описание на фоне | "2020 - Приключения - 2 ч 16 мин - Rus - 16+" |
backdropDescriptionText | ||
backdropPrerollUrl | Ссылка на видео ролик, который будет проигрываться на фоне |