跳到主要内容

1.0.1

注意

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

RuStore In-app updates SDK 支持用户设备上应用程序的最新版本。这有助于用户看到更新,评估性能改进和错误修复的结果。

使用 RuStore In-app updates SDK 实现各种更新方式。目前支持的更新方式包括:延迟更新、无界面(无 RuStore UI)和强制更新。

用户流程示例

SDK 正确运作的条件

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

  1. Android操作系统版本6.0或更高。
  2. 用户的设备上安装了RuStore。
  3. 用户的设备上的 RuStore 版本是最新的。
  4. RuStore应用程序被授权安装应用程序。

在项目中集成

集成存储库:

repositories {    \`\`maven {        \`\`url = uri( \"https://artifactory-external.vkpartner.ru/artifactory/maven\" )    \`\`}}

集成依赖项

在您的配置文件中添加以下代码以集成依赖项:

build.gradle

\<br\>dependencies {    \`\`implementation( \`"ru.rustore.sdk:appup

创建更新管理器

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

val updateManager = RuStoreAppUpdateManagerFactory.create(context)

检查更新的可用性

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

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

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

var appUpdateInfo: AppUpdateInfo? =  nullupdateManager    \`\`.getAppUpdateInfo()    \`\`.addOnSuccessListener { info -\>        \`\`appUpdateInfo = info                   \`\`}    \`\`.addOnFailureListener { throwable -\>                    \`\`}

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

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

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

方法可能返回错误。可能的错误

更新流程

强制更新

检查可用性

在获取 AppUpdateInfo 后,可以检查强制更新的可用性。

调用方法 registerListener() 示例

if (appUpdateInfo.isUpdateTypeAllowed(IMMEDIATE)) {    \`\`TODO()}

议使用 isUpdateTypeAllowed 函数的结果来决定是否启动强制更新,但此结果不影响启动流程的可能性。更新流程的启动需求可以根据您的内部逻辑进行。

启动流程

调用方法 startUpdateFlow() 示例

updateManager    \`\`.startUpdateFlow(appUpdateInfo, AppUpdateOptions.Builder().appUpdateType(IMMEDIATE).build())    \`\`.addOnSuccessListener { resultCode -\>    \`\`}    \`\`.addOnFailureListener { throwable -\>    \`\`}

esultCode (Int) :

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

hrowable - 启动更新流程的错误。更多错误列表可以在"可能的错误"部分找到。

延迟更新

下载更新

在确认更新可用性后,您可以启动延迟更新流程,其第一步是进行背景下载更新。

为了跟踪下载过程,需要使用registerListener()方法添加监听器

调用方法 registerListener() 示例

updateManager.registerListener { state -\>    \`\`if (state.installStatus == InstallStatus.DOWNLOADED) {        \`\`// Update is ready to install    \`\`}           }

tate对象描述了更新下载的当前状态。对象包含:

  • installStatus - 如果用户当前正在安装更新,则为更新安装状态:
    • DOWNLOADED (1) - 已下载。
    • DOWNLOADING (2) - 正在下载。
    • FAILED (3) - 错误。
    • INSTALLING (4) - 正在安装。
    • PENDING (5) - 等待中。
    • UNKNOWN (0) - 默认状态。
  • bytesDownloaded - 已下载的字节数。
  • totalBytesToDownload - 需要下载的总字节数。
  • installErrorCode - 下载过程中的错误代码。更多可能的错误可以在"可能的错误"部分找到。

果不再需要监听器,则可以使用unregisterListener()方法删除监听器,传递先前注册的监听器。

方法调用示例unregisterListener()

updateManager.unregisterListener(listener)

启动应用程序更新的下载,请调用startUpdateFlow()方法,并在其中包含从getAppUpdateInfo()方法获得的AppUpdateInfo对象。

AppUpdateInfo对象在一次使用后将失效。要重新调用startUpdateFlow()方法,请再次使用getAppUpdateInfo()方法请求AppUpdateInfo。

调用方法 startUpdateFlow() 示例

updateManager    \`\`.startUpdateFlow(appUpdateInfo, AppUpdateOptions.Builder().build())    \`\`.addOnSuccessListener { resultCode -\>    \`\`}    \`\`.addOnFailureListener { throwable -\>    \`\`}

果用户确认了下载更新,则resultCode = Activity.RESULT_OK;如果拒绝,则resultCode = Activity.RESULT_CANCEL。

方法可能返回错误。可能的错误

在监听器中获得"DOWNLOADED"状态后,可以调用更新安装方法。建议通知用户更新已准备好安装。

更新安装

要启动更新的安装,请调用CompleteUpdate()方法。

调用方法 CompleteUpdate() 示例

updateManager    \`\`.completeUpdate()    \`\`.addOnFailureListener { throwable -\>                    \`\`}

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

在更新阶段可能会出现错误。可能的错误

无界面更新

下载更新

建议实现自己的接口来处理更新。

在确认更新可用性后,您可以启动无界面更新流程,其第一步是进行背景下载更新。

为了跟踪下载过程,需要使用registerListener()方法添加监听器

调用方法 registerListener() 示例

updateManager.registerListener { state -\>    \`\`if (state.installStatus == InstallStatus.DOWNLOADED) {        \`\`// Update is ready to install    \`\`}           }

tate对象描述了更新下载的当前状态。对象包含:

  • installStatus - 如果用户当前正在安装更新,则为更新安装状态:
    • DOWNLOADED (1) - 已下载。
    • DOWNLOADING (2) - 正在下载。
    • FAILED (3) - 错误。
    • INSTALLING (4) - 正在安装。
    • PENDING (5) - 等待中。
    • UNKNOWN (0) - 默认状态。
  • bytesDownloaded - 已下载的字节数。
  • totalBytesToDownload - 需要下载的总字节数。
  • installErrorCode - 下载过程中的错误代码。更多可能的错误可以在"可能的错误"部分找到。

果不再需要监听器,则可以使用unregisterListener()方法删除监听器,传递先前注册的监听器。

调用方法 unregisterListener() 示例

updateManager.unregisterListener(listener)

启动应用程序更新的下载,需要调用startUpdateFlow()方法,带有从getAppUpdateInfo()方法获取的AppUpdateInfo参数,并将更新类型设置在AppUpdateOptions为SILENT。

AppUpdateInfo对象在一次使用后将失效。要重新调用startUpdateFlow()方法,请再次使用getAppUpdateInfo()方法请求AppUpdateInfo。

调用方法 startUpdateFlow() 示例

val appUpdateOptions = AppUpdateOptions.Builder().appUpdateType(SILENT).build()updateManager    \`\`.startUpdateFlow(appUpdateInfo, appUpdateOptions)    \`\`.addOnSuccessListener { resultCode -\>    \`\`}    \`\`.addOnFailureListener { throwable -\>    \`\`}

调用onSuccessListener时,如果resultCode = Activity.RESULT_OK,将注册一个更新下载任务。

在此流程中,只能调用onSuccessListener,其resultCode = Activity.RESULT_OK,或onFailureListener,详细的错误列表可在"可能的错误"部分找到。

在监听器中获得DOWNLOADED状态后,可以调用更新安装方法。建议通知用户更新已准备好安装。

更新安装

要启动更新的安装,请调用CompleteUpdate()方法。

调用方法 CompleteUpdate() 示例

updateManager    \`\`.completeUpdate()    \`\`.addOnFailureListener { throwable -\>                    \`\`}

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

在更新阶段可能会出现错误。可能的错误

可能的错误

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

可能的错误列表:

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