![](/img/trans.png)
[英]Why Google In-app updates doesn't see any updates, when it's actually available?
[英]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
移動到addOnSuccessListener
, fun 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.