1

我无法在我的应用程序中看到 Google 应用内更新。这是我实现代码的方式,但它 appUpdateInfo 总是返回 UPDATE_NOT_AVAILABLE (1)。

onCreate 方法

appUpdateManager = AppUpdateManagerFactory.create(this)
        appUpdateManager.registerListener(this)
        val appUpdateInfoTask = appUpdateManager.appUpdateInfo

    appUpdateInfoTask.addOnSuccessListener {appUpdateInfo ->
        try {
            if(appUpdateInfoTask.isComplete){
                if (appUpdateInfo.updateAvailability() == UPDATE_AVAILABLE) {
                    ToastUtils.showShort("Update Available" + appUpdateInfo.isUpdateTypeAllowed(FLEXIBLE))
                    if(appUpdateInfo.isUpdateTypeAllowed(FLEXIBLE)){
                        ToastUtils.showShort("Flexi Update")
                        requestAppUpdate(appUpdateManager.appUpdateInfo.getResult(), FLEXIBLE)
                    }else if(appUpdateInfo.isUpdateTypeAllowed(IMMEDIATE)){
                        ToastUtils.showShort("Immediate Update")
                        requestAppUpdate(appUpdateManager.appUpdateInfo.getResult(), IMMEDIATE)
                    }
                }
            }
        } catch (e: Exception) {
            Log.e("Update Exception", e.message)
        }
    }

onResume 方法

override fun onResume() {
        super.onResume()
        val appUpdateInfoTask = appUpdateManager.appUpdateInfo
        appUpdateInfoTask.addOnCompleteListener {
            Log.e("Update Complete", "Complete")
        }
        appUpdateInfoTask.addOnSuccessListener {
            if(appUpdateInfoTask.isComplete){
                if (it.installStatus() == DOWNLOADED) {
                    showUpdateSnackbar()
                }
            }
        }
    }

onDestroy 方法

override fun onDestroy() {
        super.onDestroy()
        appUpdateManager.unregisterListener(this)
    }

onActivityResult 方法

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_CODE_TO_FETCH_UPDATES) {
            when (resultCode) {
                Activity.RESULT_OK -> {
                    ToastUtils.showShort("Access to Update Granted")
                }
                Activity.RESULT_CANCELED -> {
                    ToastUtils.showShort("Access to Update Cancelled")
                }
                ActivityResult.RESULT_IN_APP_UPDATE_FAILED -> {
                    ToastUtils.showShort("Access to Update Failed")
                }
            }
        }
    }

关键点

  1. 使用 Android App Bundle 格式将我的应用上传到内部测试轨道
  2. 当我上面在 onCreate 中编写的代码返回 UPDATE_NOT_AVAILABLE 时,应用程序更新在商店中可用(在内部轨道上)。
  3. 我已经上传了使用 Google Play Developers API,并将inAppUpdatePriority设置为5

查询:

  1. 我已尝试在商店中多次更新应用程序,但我永远无法通过此代码在我的应用程序上看到更新。为什么?
  2. 如何通过内部测试轨道进行测试来查看实际的 FLEXIBLE 或 IMMEDIATE Update?设置该配置的方法在哪里?
4

1 回答 1

0

我最近在应用程序中成功实施了日期,所以我想我可以帮助你。

我可能会建议您对代码进行一些更改,并且您必须遵循正确的内部应用程序共享测试方法。

在 OnCreate 方法的 try 块中,您可以使用它

if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE){

   if (appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
                appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo,
                AppUpdateType.FLEXIBLE,
                this,
                REQUEST_CODE_TO_FETCH_UPDATES)
    } 
   else if (appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
                appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo,
                AppUpdateType.IMMEDIATE,
                this,
                REQUEST_CODE_TO_FETCH_UPDATES)
     }

  }

要测试应用内更新功能,您必须遵循以下几点 -

  • 您必须确保您设备上的当前应用程序是使用内部应用程序共享 URL 安装的,并且当前应用程序已经支持应用程序内更新,并且其版本代码必须低于内部应用程序共享中的更新版本。
  • 如果以上一切都很好,只需单击应用程序更新版本的内部应用程序共享链接。请勿从单击链接后看到的 Google Play 商店页面安装该应用程序。
  • 现在,当您打开应用程序时,您会在应用程序中找到更新。

    或者以简单的方式 -

    第 1 步 - 只需使用应用更新功能构建您的应用,然后将其上传到 Play 管理中心的内部应用测试

    第 2 步 - 现在转到上传应用程序后获得的链接,并从 Play 商店安装此版本的应用程序。

    第 3 步 - 现在再次使用高于前一个版本的代码构建您的应用,然后再次将其上传到 Play 控制台中的内部应用测试

    第 4 步 - 现在再次转到上传应用程序后获得的链接,但现在不要在转到 Play 商店页面后安装此更新,按返回并退出。

    第 5 步 - 现在打开您之前安装的应用程序,您将在您的应用程序中找到应用程序更新

希望它可以帮助你。

于 2020-05-06T07:21:42.697 回答