1.0.1
该门户网站正在开发中。文档的完整版本请看这里.
- Kotlin
- Java
RuStore In-app updates SDK 支持用户设备上应用程序的最新版本。这有助于用户看到更新,评估性能改进和错误修复的结果。
使用 RuStore In-app updates SDK 实现各种更新方式。目前支持的更新方式包括:延迟更新、无界面(无 RuStore UI)和强制更新。
用户流程示例
SDK 正确运作的条件
RuStore In-app updates SDK 运行需要满足以下条件:
- Android操作系 统版本6.0或更高。
- 用户的设备上安装了RuStore。
- 用户的设备上的 RuStore 版本是最新的。
- 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() 方法。调用此方法时,将检查以下条件:
- 用户设备上必须安装了RuStore。
- 用户设备上的RuStoreApp版本必须是最新的。
- 用户和应用程序不应在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)
- 开启活动的未知错误
- 错误代码: -
RuStore In-app updates SDK帮助维持用户设备上应用程序的最新版本。
当用户维持应用程序的最新状态时,他们可以体验新功能并利用性能改进和错误修复。
您可以使用RuStore In-app updates SDK来实现各种更新方式。目前支持的更新方式包括:延迟更新、无界面(无 RuStore UI)和强制更新。
用户流程示例
SDK 正确运作的条件
RuStore In-app updates SDK 运行需要满足以下条件:
- Android操作系统版本6.0或更高。
- 用户设备上必须安装了RuStore。
- 用户设备上的RuStoreApp版本必须是最新的。
- RuStore应用程序必须被授权安装应用程序。
在项目中集成
集成存储库
build.gradle
repositories { \`\`maven { \`\`url = uri( \"https://artifactory-external.vkpartner.ru/artifactory/maven\" ) \`\`}}
集成依赖项
在您的配置文件中添加以下代码以集成依赖项:
build.gradle
dependencies { \`\`implementation( \"ru.rustore.sdk:review:1.0.1\" )}
创建更新管理器
在调用库方法之前,需要使用工厂创建一个更新管理器。
RuStoreAppUpdateManager ruStoreAppUpdateManager = RuStoreAppUpdateManagerFactory.INSTANCE.create(context);
检查更新的可用性
在启动更新流程之前,请检查您的应用程序是否有可用的更新。要检查更新的可用性,请调用getAppUpdateInfo()方法。调用此方法时,将检查以下条件:
- 用户设备上必须安装了RuStore。
- 用户设备上的RuStoreApp版本必须是最新的。
- 用户和应用程序不应在RuStore中被封锁。
响应此方法时,您将获得一个 AppUpdateInfo 对象,其中包含有关更新需求的信息。请提前请求此对象并对其进行缓存,以便在用户方便的时间无延迟地请求用户启动更新下载。
调用方法 getAppUpdateInfo() 示例
AppUpdateInfo appUpdateInfo = nullruStoreAppUpdateManager \`\`.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()
IruStoreAppUpdateManager \`\`.startUpdateFlow(appUpdateInfo, new AppUpdateOptions.Builder().build()) \`\`.addOnSuccessListener(resultCode -\> { \`\`}) \`\`.addOnFailureListener(throwable -\> \`\`);
esultCode (Int) :
Activity.RESULT_OK(-1)
- 更新完成,代码可能未被接收,因为应用程序在更新时会结束。Activity.RESULT_CANCELED(0)
- 流程被用户中断或发生错误。当接收到此代码时,通常应终止应用程序。ActivityResult.ACTIVITY_NOT_FOUND(2)
- RuStore 未安装,或安装的版本不支持强制更新(RuStore versionCode (RuStore versionCode < 191)
hrowable
- 启动更新流程的错误。
延迟更新与RuStore的 UI
下载更新
确认更新可用后,您可以启动延迟更新流程,其第一步是后台下载更新。
要跟踪下载进程,需要使用registerListener()方法添加监听器。
方法调用示例registerListener()
ruStoreAppUpdateManager.registerListener(installState -\> { \`\`if (installState.getInstallStatus() == InstallStatus.DOWNLOADED) { \`\`// 更新已准备好安装 \`\`}});
tate对象描述了更新下载的当前状态。对象包含:
installStatus
- 如果用户当前正在安装更新,则为更新安装状态:DOWNLOADED(1)
- 已下载。DOWNLOADING(2)
- 正在下载。FAILED(3)
- 错误。INSTALLING(4)
- 正在安装。PENDING(5)
- 等待中。UNKNOWN(0)
- 默认状态。
bytesDownloaded
- 已下载的字节数。totalBytesToDownload
- 需要下载的总字节数。installErrorCode
- 下载过程中的错误代码。
可能的错误](/sdk/updates)
如果不再需要监听器,则可以使用unregisterListener()方法删除监听器,传递先前注册的监听器。
方法调用示例unregisterListener()
ruStoreAppUpdateManager.unregisterListener(installStateUpdateListener);
启动应用程序更新的下载,请调用startUpdateFlow()方法,并在其中包含从getAppUpdateInfo()方法获得的AppUpdateInfo对象。
AppUpdateInfo对象在一次使用后将失效。要重新调用startUpdateFlow()方法,请再次使用getAppUpdateInfo()方法请求AppUpdateInfo。
方法调用示例startUpdateFlow()
updateManager \`\`.startUpdateFlow(appUpdateInfo, AppUpdateOptions.Builder().build()) \`\`.addOnSuccessListener { resultCode -\> \`\`} \`\`.addOnFailureListener { throwable -\> \`\`}ruStoreAppUpdateManager \`\`.startUpdateFlow(appUpdateInfo, new AppUpdateOptions.Builder().build()) \`\`.addOnSuccessListener(resultCode -\> { \`\`}) \`\`.addOnFailureListener(throwable -\> \`\`);
果用户确认了下载更新,则resultCode = Activity.RESULT_OK
;如果拒绝,则resultCode = Activity.RESULT_CANCEL
。
在监听器中获得DOWNLOADED
状态后,可以调用更新安装方法。建议通知用户更新已准备好安装。
更新安装
要启动更新的安装,请调用completeUpdate()
方法。
方法调用示例completeUpdate()
ruStoreAppUpdateManager \`\`.completeUpdate() \`\`.addOnFailureListener(throwable -\> { \`\`});
新通过android原生工具进行。如果更新成功,应用程序将关闭。
在更新阶段可能会出现错误。
无界面更新(没有UI来自RuStore)
下载更新
我们建议实现自己的接口来处理更 新,以避免破坏您应用程序中的用户体验。
在确认更新可用性后,您可以启动无界面更新流程,其第一步是后台下载更新。为了跟踪下载过程,需要使用registerListener()方法添加监听器。
方法调用示例registerListener()
ruStoreAppUpdateManager.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
- 下载过程中的错误代码。
可能的错误](/sdk/updates)
如果不再需要监听器,则可以使用unregisterListener()方法删除监听器,传递先前注册的监听器。
方法调用示例unregisterListener()
ruStoreAppUpdateManager.unregisterListener(listener)
启动应用程序更新的下载,需要调用startUpdateFlow()方法,带有从getAppUpdateInfo()方法获取的AppUpdateInfo参数,并将更新类型设置在AppUpdateOptions为SILENT。
AppUpdateInfo对象在一次使用后将失效。要重新调用startUpdateFlow()方法,请再次使用AppUpdateInfo方法请求getAppUpdateInfo()。
方法调用示例startUpdateFlow()
val appUpdateOptions = AppUpdateOptions.Builder().appUpdateType(SILENT).build() ruStoreAppUpdateManager \`\`.startUpdateFlow(appUpdateInfo, appUpdateOptions) \`\`.addOnSuccessListener { resultCode -\> \`\`} \`\`.addOnFailureListener { throwable -\> \`\`}
调用onSuccessListener时,如果resultCode = Activity.RESULT_OK,将注册一个更新下载任务。
在此流程中,只能调用onSuccessListener,其resultCode = Activity.RESULT_OK,或onFailureListener**。**
在监听器中获得DOWNLOADED状态后,可以调用更新安装方法。建议通知用 户更新已准备好安装。
更新安装
要启动更新的安装,请调用completeUpdate()方法。
方法调用示例completeUpdate()
ruStoreAppUpdateManager \`\`.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)
- 开启活动的未知错误
- 错误代码: -