SDK Обновление приложений для Unreal (версия 6.1.0)
Общие сведения
RuStore In-app updates SDK поддерживает актуальную версию приложения на устройстве пользователя. Это помогает пользователю увидеть обновления, оценить улучшение производительности и результат исправления ошибок.
Пример реализации
Используйте RuStore In-app updates SDK для реализации различных способов обновлений. В настоящий момент поддерживаются: отложенное, тихое (без UI от RuStore) и принудительное обновление.
Ознакомьтесь с приложением-примером чтобы узнать, как правильно интегрировать SDK обновлений.
Пользовательские сценарии
- Отложенное обновление
- Принудительное обновление
- Тихое обновление



Подключение в проект
Для подключения выполните следующие шаги.
- Скопируйте содержимое папки
Pluginsиз официального репозитория RuStore на gitflic в папкуPluginsвнутри своего проекта. - Перезапустите Unreal Engine.
- В списке плагинов (Edit > Plugins > Project > Mobile) отметьте плагины RuStoreAppUpdate и RuStoreCore.
- Подключите модули модули
RuStoreCoreиRuStoreAppUpdateв файлеYourProject.Build.csв спискеPublicDependencyModuleNames. - В настройках проекта (Edit > Project Settings > Android) установите параметр
Minimum SDK Versionна уровень не ниже24и параметрTarget SDK Versionне ниже31.
Создание менеджера обновлений
Перед вызовом методов библиотеки необходимо создать менеджер обновлений.
Инициализация
Перед вызовом методов библиотеки необходимо выполнить её инициализацию.
URuStoreAppUpdateManager::Instance()->Init();
Все операции с объектом менеджера также доступны из Blueprints. Ниже преставлен пример инициализации.
Вызов Init привязывает объект к корню сцены, и если дальнейшая работа с объектом больше не планируется, для освобождения памяти необходимо выполнить метод Dispose. Вызов метода Dispose отвяжет объект от корня и безопасно завершит все отправленные запросы.
Деинициализация
URuStoreAppUpdateManager::Instance()->Dispose();
Проверка инициализации
Если вам нужно проверить факт инициализации библиотеки, используйте метод GetIsInitialized. Мето д возвращает значение типа bool:
true— если библиотека инициализирована;false— еслиInitеще не был вызван.
bool bIsInitialized = URuStoreAppUpdateManager::Instance()->GetIsInitialized();
Проверка наличия обновлений
Прежде чем запрашивать обновление, проверьте, доступно ли обновление для вашего приложения. Для проверки наличия обновлений вызовите методGetAppUpdateInfo. При вызове данного метода проверяются следующие условия.
- На устройстве пользователя установлена актуальная версия RuStore.
Пользователь и приложение не должны быть заблокированы в RuStore.
.- Приложению RuStore разрешена установка приложений.
- Пользователь авторизован в RuStore.
FURuStoreAppUpdateInfo, который будет содержать в себе информацию о необходимости обновления. Запросите этот объект заранее и закэшируйте его, чтобы запросить у пользователя запуск скачивания обновления без задержки и в удобный для пользователя момент времени.
Каждый запрос GetAppUpdateInfo возвращает requestId, который уникален в рамках одного запуска приложения. Каждое событие возвращает requestId того запроса, который запустил это событие.
long requestId = GetAppUpdateInfo(
[](long requestId, TSharedPtr<FURuStoreAppUpdateInfo, ESPMode::ThreadSafe> response) {
// Process response
},
[](long requestId, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe> error) {
// Process error
}
);
Уведомление обратного вызов (callback) Success возвращает структуру FURuStoreAppUpdateInfo в параметре Response. Структура содержит набор параметров, необходимых для определения доступности обновления.
USTRUCT(BlueprintType)
struct RUSTOREAPPUPDATE_API FURuStoreAppUpdateInfo
{
GENERATED_USTRUCT_BODY()
FURuStoreAppUpdateInfo()
{
updateAvailability = EURuStoreUpdateAvailability::UNKNOWN;
installStatus = EURuStoreInstallStatus::UNKNOWN;
availableVersionCode = 0;
}
UPROPERTY(BlueprintReadOnly)
EURuStoreUpdateAvailability updateAvailability;
UPROPERTY(BlueprintReadOnly)
EURuStoreInstallStatus installStatus;
UPROPERTY(BlueprintReadOnly)
int64 availableVersionCode;
};
-
updateAvailability— доступность обновления:UNKNOWN (uint8 = 0)— по умолчанию;UPDATE_NOT_AVAILABLE (uint8 = 1)— обновление не нужно;UPDATE_AVAILABLE (uint8 = 2)— обновление требуется загрузить или обновление уже загружено на устройство пользователя;DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS (uint8 = 3)— обновление уже скачивается или установка уже запущена.
-
installStatus— статус установки обновления, если пользователь уже устанавливает обновление в текущий момент времени:UNKNOWN (uint8 = 0)— по умолчанию;DOWNLOADED (uint8 = 1)— скачано;DOWNLOADING (uint8 = 2)— скачивается;FAILED (uint8 = 3)— ошибка;PENDING (uint8 = 5)— в ожидании.
-
availableVersionCode— код версии обновления.
Запуск скачивания обновления возможен только в том случае, если поле updateAvailability содержит значение UPDATE_AVAILABLE.
Failure возвращает структуру с информацией об ошибке. Структура ошибки описана в разделе Обработка ошибок.
Скачивание и установка обновлений
Использование слушателя
После подтверждения доступности запуска процесса обновления вы можете получить статус скачивания обновления в событии OnStateUpdatedInstanceEvent объекта URuStoreAppUpdateManager.
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FRuStoreOnStateUpdatedInstanceDelegate, int64, listenerId, FURuStoreInstallState, state);
UPROPERTY(BlueprintAssignable, Category = "RuStore AppUpdate Manager")
FRuStoreOnStateUpdatedInstanceDelegate OnStateUpdatedInstanceEvent;
FScriptDelegate Delegate;
Delegate.BindUFunction(YourUObjectPtr, FName("YourCallbackMethod"));
URuStoreAppUpdateManager::Instance()->OnStateUpdatedInstanceEvent.Add(Delegate);
UFUNCTION()
void YourCallbackMethod(int64 listenerId, FURuStoreInstallState state) {
// Process callback
}
Подписка на событие слушателя из Blueprint.
Событие OnStateUpdatedInstanceEvent возвращает объект FURuStoreInstallState в параметре state с описанием текущего статуса скачивания. Структура FURuStoreInstallState описана в разделе Проверка статуса скачивания обновления.
Интерфейс слушателя
Класс URuStoreAppUpdateManager реализует стандартный слушатель. Вы можете создать собственный класс слушателя используя интерфейс IRuStoreInstallStateUpdateListenerInterface.
UINTERFACE(Blueprintable)
class RUSTOREAPPUPDATE_API URuStoreInstallStateUpdateListenerInterface : public UInterface
{
GENERATED_BODY()
};
class IRuStoreInstallStateUpdateListenerInterface
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "RuStore InstallStateUpdate Listener Interface")
void OnStateUpdated(int64 listenerId, FURuStoreInstallState& state);
};
Событие OnStateUpdated возвращает объект FURuStoreInstallState в параметре state с описанием текущего статуса скачивания. Структура FURuStoreInstallState описана в разделе Проверка статуса скачивания обновления.
Вызов метода RegisterListener выполняет регистрацию слушателя.
Для стандартного слушателя URuStoreAppUpdateManager вызов RegisterListener не требуется.
int64 listenerId = URuStoreAppUpdateManager::Instance()->RegisterListener(YourListenerPtr);
YourListenerPtr — указатель на объект класса, реализующего интерфейс IRuStoreInstallStateUpdateListenerInterface.