繁体   English   中英

java 中是否支持应用内更新 android 示例

[英]is there a support in-app updates android example in java

我尝试了在 github 上找到的这些库,但没有主题真的有效如何测试更新是否真的有效?

我发现这篇文章解决了这个问题,以明确我将编写class代码并记住有两种方法可以实现应用内更新:立即和灵活。

1 实施 'com.google.android.play:core:1.10.3'

2.1 如果您将使用灵活的方法,请将 class 名称替换为您的示例“MainActivity”

在此处输入图像描述

public class Flexible extends AppCompatActivity {
private AppUpdateManager appUpdateManager;
private InstallStateUpdatedListener installStateUpdatedListener;
private static final int FLEXIBLE_APP_UPDATE_REQ_CODE = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_f);
    appUpdateManager = AppUpdateManagerFactory.create(getApplicationContext());
    installStateUpdatedListener = state -> {
        if (state.installStatus() == InstallStatus.DOWNLOADED) {
            popupSnackBarForCompleteUpdate();
        } else if (state.installStatus() == InstallStatus.INSTALLED) {
            removeInstallStateUpdateListener();
        } else {
            Toast.makeText(getApplicationContext(), "InstallStateUpdatedListener: state: " + state.installStatus(), Toast.LENGTH_LONG).show();
        }
    };
    appUpdateManager.registerListener(installStateUpdatedListener);
    checkUpdate();
}

private void checkUpdate() {

    Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

    appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
            startUpdateFlow(appUpdateInfo);
        } else if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
            popupSnackBarForCompleteUpdate();
        }
    });
}

private void startUpdateFlow(AppUpdateInfo appUpdateInfo) {
    try {
        appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.FLEXIBLE, this, Flexible.FLEXIBLE_APP_UPDATE_REQ_CODE);
    } catch (IntentSender.SendIntentException e) {
        e.printStackTrace();
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == FLEXIBLE_APP_UPDATE_REQ_CODE) {
        if (resultCode == RESULT_CANCELED) {
            Toast.makeText(getApplicationContext(), "Update canceled by user! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_OK) {
            Toast.makeText(getApplicationContext(),"Update success! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Update Failed! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
            checkUpdate();
        }
    }
}

private void popupSnackBarForCompleteUpdate() {
    Snackbar.make(findViewById(android.R.id.content).getRootView(), "New app is ready!", Snackbar.LENGTH_INDEFINITE)

            .setAction("Install", view -> {
                if (appUpdateManager != null) {
                    appUpdateManager.completeUpdate();
                }
            })
            .setActionTextColor(getResources().getColor(R.color.purple_500))
            .show();
}

private void removeInstallStateUpdateListener() {
    if (appUpdateManager != null) {
        appUpdateManager.unregisterListener(installStateUpdatedListener);
    }
}

@Override
protected void onStop() {
    super.onStop();
    removeInstallStateUpdateListener();
}}

2.1 如果您将使用即时方法,请将 class 名称替换为您的示例“MainActivity”

在此处输入图像描述

public class Immediate extends AppCompatActivity {

private AppUpdateManager appUpdateManager;
private static final int IMMEDIATE_APP_UPDATE_REQ_CODE = 124;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_f);
    appUpdateManager = AppUpdateManagerFactory.create(getApplicationContext());
    checkUpdate();
}

private void checkUpdate() {

    Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

    appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
            startUpdateFlow(appUpdateInfo);
        } else if  (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS){
            startUpdateFlow(appUpdateInfo);
        }
    });
}

private void startUpdateFlow(AppUpdateInfo appUpdateInfo) {
    try {
        appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE, this, Immediate.IMMEDIATE_APP_UPDATE_REQ_CODE);
    } catch (IntentSender.SendIntentException e) {
        e.printStackTrace();
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == IMMEDIATE_APP_UPDATE_REQ_CODE) {
        if (resultCode == RESULT_CANCELED) {
            Toast.makeText(getApplicationContext(), "Update canceled by user! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_OK) {
            Toast.makeText(getApplicationContext(), "Update success! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Update Failed! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
            checkUpdate();
        }
    }
}}

3 如何测试? 请按照所有步骤

3.1 生成签名的应用包/APK。 请注意,APK 签名密钥和 applicationId 应与已发布的应用程序相同。

3.2 与测试人员共享生成的 APK。 为此,select 在 Google 控制台中发布的应用程序,导航到Internal App Sharing ,然后将生成的 APK 上传到那里。 查看如何使用Google Internal App Sharing

3.3 复制上传的共享链接并与测试人员共享。 在这种情况下,测试人员应该有一个 Android 手机。

3.4 在手机浏览器上打开共享链接。 您将被重定向到 Play 商店。

3.5 下载应用程序并等待安装完成。

3.6 完成后,生成另一个签名的 app bundle/APK。 这次将 app.gradle 文件中的 versionCode 和 versionName 更改为更高版本

3.7 生成 app bundle/APK 后,前往 App Internal Sharing 并上传。

3.8 再次,复制此上传生成的可共享链接,并用测试人员打开。 当链接在 Google Play 商店启动时,您会看到一个更新按钮,不要点击更新。

3.9 关闭 Google Play 商店并打开我们之前安装的应用程序。 这将启动一个更新 UI,提示您更新应用程序。 UI 可能会根据您的更新类型(灵活或即时)而有所不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM