跳到主要内容

1.0.0

注意

该门户网站正在开发中。文档的完整版本请看这里.

插件帮助保持用户设备上您的应用程序的最新版本。

当用户维持应用程序的最新状态时,他们可以体验新功能并利用性能改进和错误修复。

您可以使用RuStore In-app updates 来显示应用程序更新过程,该过程支持后台下载和安装更新以及状态控制。例如,您可以提醒用户您的应用程序有新版本并建议进行更新。用户在更新下载期间可以继续使用您的应用程序。

用户流程示例

插件正确运作的条件

RuStore In-app updates 运行需要满足以下条件:

  1. Android操作系统版本7.0或更高。
  2. 用户设备上必须安装了RuStore。
  3. 用户设备上的RuStoreApp版本必须是最新的。
  4. 用户必须在 RuStore 中获得授权。
  5. RuStore应用程序必须被授权安装应用程序。

在项目中集成

要进行集成,请执行以下步骤:

  1. 从RuStore的官方gitflic仓库复制*'Plugins'文件夹的内容到您项目中的'Plugins'*文件夹。重启Unreal Engine,在插件列表中 (Edit → Plugins → Project → Mobile) ,选择"RuStoreAppUpdate"和"RuStoreCore"插件。
  2. "YourProject.Build.cs" 文件中,将"RuStoreCore"和"RuStoreAppUpdate"模块添加到PublicDependencyModuleNames列表中。
  3. 在项目设置中 (Edit → Project Settings → Android) 设置 Minimum SDK Version 为不低于 24, Target SDK Version 为不低于31。

创建更新管理器

在调用库方法之前,需要创建一个更新管理器。

URuStoreAppUpdateManager::Instance()-\>Init();

有与管理器端的操作也可以通过Blueprints进行。初始化的示例:

调用Init()将对象绑定到场景的根部,如果之后不再计划使用该对象,为了释放内存,需要执行Dispose()方法。

调用 Dispose() 方法会将对象从根部解绑,并安全地完成所有已发送的请求。

反初始化

URuStoreAppUpdateManager::Instance()-\>Dispose();

blueprint实现:

如果您需要检查库的初始化情况,请使用 URuStoreBillingClient::Instance()->getIsInitialized()属性。如果库已初始化,其值为 true;如果尚未调用 Init,则为 false。

检查初始化情况

URuStoreAppUpdateManager::Instance()-\>getIsInitialized();

检查更新的可用性

在请求更新之前,请检查您的应用是否有更新可用。要检查更新的可用性,请调用 GetAppUpdateInfo() 方法。调用此方法时,将检查以下条件:

  1. 用户设备上必须安装了RuStore。
  2. 用户设备上的RuStoreApp版本必须是最新的。
  3. 用户必须在 RuStore 中获得授权。
  4. 用户和应用程序不应在RuStore中被封锁。
  5. RuStore应用程序必须被授权安装应用程序。

响应此方法时,您将获得一个 AppUpdateInfo 对象,其中包含有关更新需求的信息。请提前请求此信息,以便在用户方便的时间无延迟地请求用户启动更新下载。

调用方法 getAppUpdateInfo() 示例

long requestId = GetAppUpdateInfo(    \`\`\[\]( long requestId, TSharedPtr\<FURuStoreAppUpdateInfo, ESPMode::ThreadSafe\> response) {        \`\`// Process response    \`\`},    \`\`\[\]( long requestId, TSharedPtr\<FURuStoreError, ESPMode::ThreadSafe\> error) {        \`\`// Process error    \`\`});

blueprint实现:

Success回调返回AppUpdateInfo结构体,在Response参数中:

AppUpdateInfo 对象包含一组参数,这些参数是确定更新可用性所必需的:

  • updateAvailability - 更新的可用性:
    • UPDATE_NOT_AVAILABLE - 不需要更新。
    • UPDATE_AVAILABLE - 需要下载更新或用户设备上已下载更新。
    • DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS - 更新已在下载或安装已启动。
    • UNKNOWN - 默认状态。
  • installStatus - 如果用户当前正在安装更新,则为更新安装状态:
    • DOWNLOADED - 已下载。
    • DOWNLOADING - 正在下载。
    • FAILED - 错误。
    • INSTALLING - 正在安装。
    • PENDING - 等待中。
    • UNKNOWN - 默认状态。

有当 updateAvailability 字段包含 UPDATE_AVAILABLE值时,才能启动更新下载。

Failure 回调返回 FURuStoreError 结构体,包含错误信息,在Error参数中。更多信息可以在"可能的错误"部分找到。

获取AppUpdateInfo后,可以使用CheckIsImmediateUpdateAllowed()方法检查强制更新的可用性。

调用方法 CheckIsImmediateUpdateAllowed() 示例

bool available = URuStoreAppUpdateManager::Instance()-\>CheckIsImmediateUpdateAllowed();

blueprint实现:

下载更新

要启动应用程序更新的下载,请调用StartUpdateFlow()方法。

可用的三种更新流程:

EURuStoreAppUpdateOptions::DELAYED - 延迟更新。

EURuStoreAppUpdateOptions::SILENT - 无界面更新。

EURuStoreAppUpdateOptions::IMMEDIATE - 强制更新。

要重新调用StartUpdateFlow()方法,请再次使用GetAppUpdateInfo()方法请求AppUpdateInfo。

调用方法 startUpdateFlow() 示例

EURuStoreAppUpdateOptions appUpdateOptions = EURuStoreAppUpdateOptions::DELAYED;long requestId = StartUpdateFlow(    \`\`appUpdateOptions,    \`\`\[\]( long requestId, EURuStoreUpdateFlowResult response) {        \`\`// Process response    \`\`},    \`\`\[\]( long requestId, TSharedPtr\<FURuStoreError, ESPMode::ThreadSafe\> error) {        \`\`// Process error    \`\`});

blueprint实现:

Failure 回调返回 FURuStoreError 结构体,包含错误信息,在Error参数中。更多信息可以在"可能的错误"部分找到。

Success回调返回EURuStoreUpdateFlowResult值,在Response参数中:

  • EURuStoreUpdateFlowResult::RESULT_OK (-1) - 更新完成,代码可能未被接收,因为应用程序在更新时会结束。
  • EURuStoreUpdateFlowResult::RESULT_CANCELED (0) - 流程被用户中断或发生错误。当接收到此代码时,通常应终止应用程序。
  • EURuStoreUpdateFlowResult::ACTIVITY_NOT_FOUND (2) - RuStore 未安装,或安装的版本不支持强制更新(RuStore versionCode < 191)

用 StartUpdateFlow() 方法后,您可以在 OnStateUpdatedInstanceEvent事件中跟踪更新下载的状态。

OnStateUpdatedInstanceEvent事件

DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FRuStoreOnStateUpdatedInstanceDelegate, int64, listenerId, FURuStoreInstallState, state);UPROPERTY(BlueprintAssignable, Category =  \"RuStore AppUpdate Manager\" )FRuStoreOnStateUpdatedInstanceDelegate OnStateUpdatedInstanceEvent;

blueprint实现:

在installStatus字段收到EURuStoreInstallStatus::DOWNLOADED状态后,可以调用更新安装方法。

更新安装

下载apk更新文件完成后,您可以启动更新的安装。要启动更新的安装,请调用CompleteUpdate()方法。

调用方法 CompleteUpdate() 示例

requestId = CompleteUpdate(    \`\`\[\]( long requestId, TSharedPtr\<FURuStoreError, ESPMode::ThreadSafe\> error) {        \`\`// Process error    \`\`});

更新通过android原生工具进行。如果更新成功,应用程序将关闭。

在更新阶段可能会出现错误。您可以在"可能的错误"部分详细了解它们。

可能的错误

如果您收到Failure响应,则不建议自行向用户显示错误。显示错误可能会对用户体验产生负面影响。

错误结构体

USTRUCT(BlueprintType)struct RUSTORECORE_API FURuStoreRuStoreError{    \`\`GENERATED_USTRUCT_BODY()     \`\`FURuStoreRuStoreError()    \`\`{        \`\`name =  \"\" ;        \`\`description =  \"\" ;    \`\`}     \`\`UPROPERTY(BlueprintReadOnly)    \`\`FString name;     \`\`UPROPERTY(BlueprintReadOnly)    \`\`FString description;};

能的错误列表:

  • RuStoreNotInstalledException - 用户设备上未安装RuStore。
  • RuStoreOutdatedException - 用户设备上的RuStore不支持应用程序的更新。
  • RuStoreUserUnauthorizedException - 用户未在RuStore中授权。
  • RuStoreException(message: String) - RuStore的基本错误,其他错误均继承自此。
  • RuStoreInstallException - 下载和安装错误。RuStoreInstallException错误代码:
    • ERROR_UNKNOWN - 未知错误。
    • ERROR_DOWNLOAD - 下载错误。
    • ERROR_BLOCKED - 系统阻止安装。
    • ERROR_INVALID_APK - 更新APK无效。
    • ERROR_CONFLICT - 与当前应用程序版本冲突。
    • ERROR_STORAGE - 设备存储空间不足。
    • ERROR_INCOMPATIBLE - 与设备不兼容。
    • ERROR_APP_NOT_OWNED - 应用程序未购买。
    • ERROR_INTERNAL_ERROR - 内部错误。
    • ERROR_ABORTED - 用户拒绝安装更新。
    • ERROR_APK_NOT_FOUND - 未找到用于启动安装的apk。
    • ERROR_EXTERNAL_SOURCE_DENIED - 禁止启动更新。例如,在第一个方法中返回更新不可用的响应,但用户调用第二个方法。
    • ERROR_ACTIVITY_SEND_INTENT - 发送intent以开启活动的错误。
    • ERROR_ACTIVITY_UNKNOWN - 开启活动的未知错误。