Google 应用程序更新 - 关于 Android 在线应用程序的即时更新

Google Application Update - Regarding Immediate Update for the Android Live Application

我在下方关注 link 以在我的 android 实时应用程序中提供应用程序更新体验或功能。

link 在这里:https://developer.android.com/guide/playcore/in-app-updates#java

根据 link 内容,我正在实施即时应用更新功能。

到目前为止,我已经完成了以下步骤:

  1. 我的应用程序版本和版本代码也降级了。
  2. 生成了新版本的 APK 并将其安装到我的 Android 设备中。
  3. 在我的 Splash Activity.
  4. 中为应用程序更新功能添加了以下代码

在代码下面实现:

首先添加的依赖项:implementation 'com.google.android.play:core:1.7.1'

然后,在飞溅 Activity,

        // Creates instance of the manager.
        final AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(SplashActivity.this);

        // Returns an intent object that you use to check for an update.
        Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

        // Checks that the platform will allow the specified type of update.
        appUpdateInfoTask.addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
            @Override
            public void onSuccess(AppUpdateInfo appUpdateInfo) {
                if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                        // For a flexible update, use AppUpdateType.FLEXIBLE
                        && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
                    // Request the update.
                    try {
                        appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE, SplashActivity.this,500);
                    } catch (IntentSender.SendIntentException e) {
                        e.printStackTrace();
                    }
                }else
                {
                  //Continuing with the Application flow
                }
             }

问题是: 当我生成签名 APK 并安装在我的 android 设备中时。

日志中出现以下错误:

 Auth: [GoogleAccountDataServiceImpl] getToken() -> BAD_AUTHENTICATION. Account: <ELLIDED:9494777414>, App: com.google.android.gms, Service: oauth2:https://www.googleapis.com/auth/emeraldsea.mobileapps.doritos.cookie

可能是什么问题?

得到解决方案:

测试应用程序更新功能时:

  1. 您安装的应用程序版本和版本代码必须低于 Play 商店中的版本。

  2. 在真实 Android 设备中测试它而不是 AVD 或模拟器。

  3. 问题中的代码是正确的,但必须在 onActivityResult 方法中处理回调。

来自 Google,

通过内部应用共享,您可以将要测试的应用包上传到 Play 管理中心,从而与内部团队和测试人员快速共享应用包或 APK。

您还可以使用内部应用共享来测试应用内更新,如下:

在您的测试设备上,确保您已经安装了满足以下要求的应用版本:

该应用是使用内部应用共享安装的 URL 支持应用内更新 使用的版本代码低于您应用的更新版本 按照有关如何在内部共享您的应用程序的 Play 管理中心说明进行操作。确保您上传的应用版本使用的版本代码高于您已安装在测试设备上的版本代码。 在测试设备上,仅单击内部应用共享 link 以获取应用的更新版本。不要从单击 link 后看到的 Google Play 商店页面安装应用程序。

从设备的应用程序抽屉或主屏幕打开应用程序。该更新现在应该可用于您的应用,您可以测试应用内更新的实施。

就这些。

我认为你错过了一件事。当你进入前台时恢复状态以检查进度: // 检查更新在恢复期间没有停止。 // 但是,您应该在应用程序的所有入口点执行此检查。

@Override
protected void onResume() {
  super.onResume();
  appUpdateManager

      .getAppUpdateInfo()
      .addOnSuccessListener(
          appUpdateInfo -> {
            if (appUpdateInfo.updateAvailability()
                == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
                appUpdateManager.startUpdateFlowForResult(
                    appUpdateInfo,
                    IMMEDIATE,
                    this,
                    MY_REQUEST_CODE);
            }
          });
}

see here

如果用户有更新的版本并且在您的 mainactivity 的 onDestroy() 方法中,请不要错过注销回调

你可以在 onSuccess() 方法下添加这个 chek:

              } else if(appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_NOT_AVAILABLE) {
                  appUpdateManager.unregisterListener(installStateUpdatedListener);
}