簡體   English   中英

為什么應用內更新沒有按預期更新應用?

[英]Why is In-app updates doesn't update the app as expected?

以下是我的SplashActivity.kt的代碼。 每當有可用更新時,大多數情況下它根本不顯示,但我認為這不是因為我的代碼中有任何錯誤,而是因為我了解到向用戶展示新更新需要一些時間。 我現在擔心的是,當它顯示應用程序內更新屏幕時,它會熄滅並且應用程序繼續到下一個屏幕,並且它不會要求用戶更新應用程序以繼續使用該應用程序。 我做錯了嗎?

    @Suppress("DEPRECATION")
class SplashActivity : AppCompatActivity() {

    private lateinit var binding: ActivitySplashBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivitySplashBinding.inflate(layoutInflater)
        setContentView(binding.root)

        callInAppUpdate()
        window.setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        )
        Handler().postDelayed(
            {
                val currentUserID = FirestoreClass().getCurrentUserID()

                if (currentUserID.isNotEmpty()) {
                    startActivity(Intent(this@SplashActivity, HomeActivity::class.java))
                } else {
                    startActivity(
                        Intent(
                            this@SplashActivity,
                            LoginActivity::class.java
                        )
                    )
                }
                finish()
            },
            2500
        )
    }

    public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (data == null) return

        if (requestCode == updateRequestCode) {
            Toast.makeText(this, "Downloading", Toast.LENGTH_SHORT).show()

            if (resultCode != RESULT_OK) {
                Log.d("TAG", "update flow failed $resultCode")
            }
        }
    }

    private val updateRequestCode = 1612

    private fun callInAppUpdate() {

        val appUpdateManager = AppUpdateManagerFactory.create(this)
        val appUpdateInfoTask = appUpdateManager.appUpdateInfo
        appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
            if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
            ) {
                appUpdateManager.startUpdateFlowForResult(
                    appUpdateInfo, AppUpdateType.IMMEDIATE, this, updateRequestCode
                )
            }
        }

    }

}

編輯:

我將postDelayed移動到addOnSuccessListenerfun callInAppUpdate()現在如下所示。

    private fun callInAppUpdate() {

    val appUpdateManager = AppUpdateManagerFactory.create(this)
    val appUpdateInfoTask = appUpdateManager.appUpdateInfo
    appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
            && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
        ) {
            appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo, AppUpdateType.IMMEDIATE, this, updateRequestCode
            )
        }else{
            Handler().postDelayed(
                {
                    val currentUserID = FirestoreClass().getCurrentUserID()

                    if (currentUserID.isNotEmpty()) {
                        startActivity(Intent(this@SplashActivity, DashboardActivity::class.java))
                    } else {
                        startActivity(
                            Intent(
                                this@SplashActivity,
                                LoginWithPhoneNumberActivity::class.java
                            )
                        )
                    }
                    finish()
                },
                2500
            )
        }
    }

}

你在postDelayed有導航邏輯。 您在 2500 毫秒后明確導航到新活動。 所以代碼完全按照你寫的做。

如果您想在檢查更新后導航,那么您可能應該將導航邏輯移動到addOnSuccessListener雖然它看起來也像一個黑客。 無論哪種方式,我都不會在啟動畫面中進行此檢查,而是在一些沒有設置計時器導航的“靜態”屏幕中進行此檢查

您可以實現如下行為:

class SplashActivity : AppCompatActivity() {

private val updateRequestCode = 1612

private lateinit var binding: ActivitySplashBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    binding = ActivitySplashBinding.inflate(layoutInflater)
    setContentView(binding.root)

    callInAppUpdate()
    window.setFlags(
        WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN
    )

}

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (data == null) return

    if (requestCode == updateRequestCode) {
        Toast.makeText(this, "Downloading", Toast.LENGTH_SHORT).show()
        if (resultCode != RESULT_OK) {
            Log.d("TAG", "update flow failed $resultCode")
            navigate()
        }
    }
}

private fun navigate(){
    Handler().postDelayed(
        {
            val currentUserID = FirestoreClass().getCurrentUserID()

            if (currentUserID.isNotEmpty()) {
                startActivity(Intent(this@SplashActivity, DashboardActivity::class.java))
            } else {
                startActivity(
                    Intent(
                        this@SplashActivity,
                        LoginWithPhoneNumberActivity::class.java
                    )
                )
            }
            finish()
        },
        2500
    )
}



private fun callInAppUpdate() {

    val appUpdateManager = AppUpdateManagerFactory.create(this)
    val appUpdateInfoTask = appUpdateManager.appUpdateInfo
    appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
            && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
            appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo, AppUpdateType.IMMEDIATE, this, updateRequestCode
            )
        }
        else {
            navigate()
        }
    }

  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM