在移动应用中添加订阅时需要考虑的2件事
#kotlin #android #mobile #tristan

目录

  1. The 2 things to consider
  2. Loading screen
  3. Disabling buy button after first click

我在Google Playstore上的应用程序

github代码

简介

  • 本系列将是对我在开发Android应用程序时面临的任何问题或任何观察结果的非正式演示。本系列中的每个博客文章都将是独特的,并且与其他博客文章是独一无二的,因此请随时环顾四周。

这两件事

1)加载屏幕
2)禁用购买按钮

  • 对您来说,这些显而易见的开发人员可能会显而易见,但是,这可能对像我一样刚开始的人有帮助。通过实现这两个功能,我们的应用程序将开始表现得像更大,更专业的应用程序

1)加载屏幕

  • 如果您查看THIS代码示例。您会注意到没有加载屏幕,只是简单的等待,并且出现了Google Play计费库模式。但是,这很好,如果用户单击订阅按钮,并且没有迹象表明正在发生加载。

创建一个简单的加载屏幕

  • 可以在类似的JetPack中创建一个简单的加载屏幕:
Box(modifier = Modifier.fillMaxSize()){
// The rest of your compose code
//will explain isUserBuying later 
val isUserBuying = billingViewModel.state.value.userBuying
if(isUserBuying){
            Spacer(
                modifier = Modifier
                    .matchParentSize()
                    .background(color = Color.Gray.copy(alpha = .7f))
            )
            CircularProgressIndicator(
                color= MaterialTheme.colors.onSecondary,
                modifier = Modifier
                    .align(Alignment.Center)
                    .size(60.dp)
            )
        }
}

  • 垫片将用轻透明的灰色覆盖整个屏幕,而CircularProgressIndicator在屏幕中央旋转。

  • 现在,isUserBuying是一个有条件的我在视图模式中存储的条件:

data class BillingUiState(

    val userBuying:Boolean = false

)
private val _uiState = mutableStateOf(BillingUiState())
val state = _uiState // exposed to the UI
  • 每当单击buy()方法时,我们只需将其设置为false:
fun buy(
        productDetails: ProductDetails,
        currentPurchases: List<Purchase>?,
        activity: Activity,
        tag: String
    ) {

        _uiState.value = _uiState.value.copy(
            userBuying = true
        )
// the rest of the buy method
}
  • buy()方法将接触到Google Play计费库,并导致购买模式像这样弹出:

Google play billing library modal

何时关闭加载屏幕。

  • 当模态弹出时,我们的应用进入onPause()生命周期状态。

  • 这意味着用户将必须通过成功购买或解散模态来与模式进行交互。这种交互将使我们的应用程序称为onResume方法。因此,要关闭加载屏幕,我们应该在onResume()方法中这样做:

override fun onResume(owner: LifecycleOwner) {
        _uiState.value = _uiState.value.copy(
            userBuying = false
        )
    }

  • 我想指出的是,只有当您的ViewModel意识到生命周期时,这才能起作用。

2)禁用购买按钮

  • 首次单击后不禁用“购买”按钮,则可能会多次按下它。引起多种购买模式的推出,这可能会使用户感到困惑。为了确保这不会发生,我们只是将有条件地放在一个可以组合的按钮的OnClick方法中:
Button(
            onClick={
                if(!isUserBuying){
                    billingViewModel.state.value.productDetails?.let{
                        billingViewModel.buy(
                            productDetails = it,
                            currentPurchases = null,
                            activity = activity,
                            tag = "calf_tracker_premium"
                        )
                    }
                }

            }
        ){
            Text("Upgrade $10.00", fontSize = 30.sp)
        }

  • 使用!isUserBuying,我只是说明,如果用户已经单击按钮删除方法调用到billingViewModel.buy()

  • 从技术上讲,我们可以删除用户一起单击按钮的能力。通过将有条件的条件移至按钮的enabled参数,但我真的不喜欢UI。因此,我选择简单地删除对方法的调用。

回顾

  • 为了结束事情,要使我们的应用程序更加专业,我们需要确保我们做两件事:

1)添加加载屏幕
2)首先单击后禁用购买按钮

结论

  • 感谢您抽出宝贵的时间阅读我的博客文章。如果您有任何疑问或疑虑,请在下面发表评论或在Twitter上与我联系。