3

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

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

从链接内容,我正在实现即时应用更新功能。

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

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

在以下代码中实现:

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

然后,在 Splash 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

可能是什么问题?

4

2 回答 2

5

得到解决方案:

在测试应用更新功能时:

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

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

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

来自谷歌,

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

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

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

该应用是使用内部应用共享 URL 安装的 支持应用内更新 使用低于应用更新版本的版本代码 按照 Play 管理中心的说明在内部共享应用。确保您上传的应用版本使用的版本代码高于您已在测试设备上安装的版本代码。在测试设备上,只需单击应用程序更新版本的内部应用程序共享链接。请勿从单击链接后看到的 Google Play 商店页面安装该应用程序。

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

就这样。

于 2020-03-27T07:13:34.447 回答
0

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

@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);
            }
          });
}

看这里

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

您可以在 onSuccess() 方法下添加此检查:

              } else if(appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_NOT_AVAILABLE) {
                  appUpdateManager.unregisterListener(installStateUpdatedListener);
}
于 2021-08-30T22:14:14.330 回答