2

基于 Unity3D 发布新应用版本时,如何实现“更新接口”?

我收到了AppGallery审核组的消息:“我们发现应用启动后HMS中没有调用检测更新接口”。

我发现的唯一文件是在此链接中的 Android Studio 中实现:更新应用程序

4

1 回答 1

0

应用启动后或用户主动查看是否有更新版本时,调用HMS Core SDK相关API查看AppGallery是否有更新版本。如果是这样,显示一个弹出窗口,询问用户是否更新应用程序。

在此处输入图像描述

实现该功能的关键步骤如下:

  1. 用户触发更新检查,例如,通过启动应用程序或在更新检查页面上手动执行检查。

  2. 应用程序调用JosApps.getAppUpdateClient请求初始化AppUpdateClient实例。

    AppUpdateClient client = JosApps.getAppUpdateClient(this);

  3. HMS Core SDK将AppUpdateClient当前应用的实例返回给应用。

  4. 应用程序调用该AppUpdateClient.checkAppUpdate方法来请求更新检查。

public void checkUpdate() {
    AppUpdateClient client = JosApps.getAppUpdateClient(this);
    client.checkAppUpdate(this, new UpdateCallBack(this));
}
  1. HMS Core SDK在AppGallery上查询最新的应用版本信息。

  2. AppGallery 将应用版本信息发送回 HMS Core SDK。

  3. HMS Core SDK通过回调将检查结果发送给应用。

  4. 应用在回调结果中检查方法ApkUpgradeInfo返回的实例,onUpdateInfo并检查是否有更新。

private static class UpdateCallBack implements CheckUpdateCallBack {
    private WeakReference<MainActivity> weakMainActivity;
    private UpdateCallBack(MainActivity apiActivity) {
        this.weakMainActivity = new WeakReference<MainActivity>(apiActivity);
    }
    public void onUpdateInfo(Intent intent) {
        if (intent != null) {
            MainActivity apiActivity = null;
            if (weakMainActivity != null && weakMainActivity.get() != null){
                apiActivity = weakMainActivity.get();
            }
            // Obtain the update status code. Default_value indicates the default return code when status cannot be obtained, which is determined by the app.
            int status = intent.getIntExtra(UpdateKey.STATUS, DEFAULT_VALUE);
            // Error code. You are advised to record it.
            int rtnCode = intent.getIntExtra(UpdateKey.FAIL_CODE, DEFAULT_VALUE);
             // Failure information. You are advised to record it.
            String rtnMessage = intent.getStringExtra(UpdateKey.FAIL_REASON);
            Serializable info = intent.getSerializableExtra(UpdateKey.INFO);
            // Check whether the app has an update by checking whether info obtained is of the ApkUpgradeInfo type.
            if (info instanceof ApkUpgradeInfo) {
                // Call the showUpdateDialog API to display the update pop-up. The demo has an independent button for displaying the pop-up. Therefore, this API is not called here. For details, please refer to the checkUpdatePop() method.
                if (apiActivity != null) {
                    apiActivity.showLog("There is a new update");
                    apiActivity.apkUpgradeInfo = (ApkUpgradeInfo) info;
                }
            }
            if(apiActivity != null) {
                apiActivity.showLog("onUpdateInfo status: " + status + ", rtnCode: " + rtnCode + ", rtnMessage: " + rtnMessage);
            }
        }
    }
}
  1. 应用程序调用该AppUpdateClient.showUpdateDialog方法来请求为用户显示更新弹出窗口。
public void checkUpdatePop(boolean forceUpdate) {
    AppUpdateClient client = JosApps.getAppUpdateClient(this);
    client.showUpdateDialog(this, apkUpgradeInfo, forceUpdate);
    Log.i(TAG, "checkUpdatePop success");
}
  1. HMS Core SDK为用户显示更新弹窗。

  2. 用户在更新确认页面上选择更新应用程序。

  3. HMS Core SDK向AppGallery发送请求下载最新的应用安装包。

  4. AppGallery 将应用包返回给HMS Core SDK。下载完成后HMS Core SDK开始安装应用。

有关更多详细信息,请查看此文档

于 2021-11-22T01:22:55.620 回答