谷歌应用更新-关于Android Live应用的即时更新

3

我正在按照以下链接提供app更新体验或功能,这与我的安卓实时应用程序相关。

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

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

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

  1. 将应用程序版本和版本代码降级。
  2. 生成新的发布APK并在我的Android设备上安装。
  3. 在我的启动画面活动中添加了下面的应用程序更新功能代码。

实现了以下代码:

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

然后,在启动画面活动中:

        // 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并在我的安卓设备上安装时,日志中出现以下错误:
 Auth: [GoogleAccountDataServiceImpl] getToken() -> BAD_AUTHENTICATION. Account: <ELLIDED:9494777414>, App: com.google.android.gms, Service: oauth2:https://www.googleapis.com/auth/emeraldsea.mobileapps.doritos.cookie

可能存在的问题是什么?

你需要提供崩溃堆栈跟踪信息。 - ADM
为什么要踩? - Jaimin Modi
@ADM 提供。 - Jaimin Modi
2个回答

5
得到解决方案:
在测试App更新功能时: 1. 你已安装的应用版本和版本代码必须小于Play Store上的最新版。 2. 应在真实的Android设备上进行测试,而不是在模拟器中进行。 3. 在所提问的代码中正确,但必须在onActivityResult方法中处理回调。
来自Google:
通过内部应用程序共享,您可以通过将要测试的应用程序包或APK上传到Play Console,快速与内部团队和测试人员共享。
您还可以使用内部应用程序共享来测试应用程序内更新,具体如下: 1. 确保您的测试设备已经安装了符合以下要求的应用程序版本: - 应用程序使用内部应用程序共享URL安装 - 支持应用程序内更新 - 使用低于应用程序更新版本的版本代码 2. 按照Play Console的说明分享您的应用程序。确保您上传一个使用高于您已安装在测试设备上的版本代码的应用程序版本。 3. 在测试设备上,仅单击更新后的应用程序的内部应用程序共享链接。不要从您点击链接后看到的Google Play商店页面安装应用程序。 4. 从设备的应用抽屉或主屏幕打开应用程序。现在应该可以使用应用程序内更新,并且可以测试应用程序内更新的实现。
就这些。

0

我认为你漏掉了一件事情,那就是在应用程序回到前台时恢复状态以检查进度: // 检查更新是否在 onResume 期间停滞不前。 // 然而,你应该在所有进入应用程序的入口点执行此检查。

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

点击此处查看

如果用户已经更新版本,请不要忘记在主活动的onDestroy()方法中注销回调函数。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接