1.0.0
该门户网站正在开发中。文档的完整版本请看这里.
插件帮助保持用户设备上您的应用程序的最新版本。
当用户维持应用程序的最新状态时,他们可以体验新功能并利用性能改进和错误修复。
您可以使用RuStore In-app updates 来显示应用程序更新过程,该过程支持后台下载和安装更新以及状态控制。例如,您可以提醒用户您的应用程序有新版本并建议进行更新。用户在更新下载期间可以继续使用您的应用程序。
用户流程示例
插件正确运作的条件
RuStore In-app updates 运行需要满足以下条件:
- Android操作系统版本7.0或更高。
- 用户设备上必须安装了RuStore。
- 用户设备上的RuStoreApp版本必须是最新的。
- 用户必须在 RuStore 中获得授权。
- RuStore应用程序必须被授权安装应用程序。
在项目中集成
要进行集成,请执行以下步骤:
- 从RuStore的官方gitflic仓库复制*'Plugins'文件夹的内容到您项目中的'Plugins'*文件夹。重启Unreal Engine ,在插件列表中 (Edit → Plugins → Project → Mobile) ,选择"RuStoreAppUpdate"和"RuStoreCore"插件。
- 在 "YourProject.Build.cs" 文件中,将"RuStoreCore"和"RuStoreAppUpdate"模块添加到PublicDependencyModuleNames列表中。
- 在项目设置中 (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()
方法。调用此方法时,将检查以下条件:
- 用户设备上必须安装了RuStore。
- 用户设备上的RuStoreApp版本必须是最新的。
- 用户必须在 RuStore 中获得授权。
- 用户和应用程序不应在RuStore中被封锁。
- 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
- 开启活动的未知错误。