【问题标题】:Android billing api onBillingSetupFinished possible statesAndroid billing api onBillingSetupFinished 可能的状态
【发布时间】:2020-07-29 19:56:07
【问题描述】:

我应该处理 onBillingSetupFinished 上的哪些状态?

我的意思是,BillingResponseCode 接口上有 12 种可能的状态:

int SERVICE_TIMEOUT = -3;
int FEATURE_NOT_SUPPORTED = -2;
int SERVICE_DISCONNECTED = -1;
int OK = 0;
int USER_CANCELED = 1;
int SERVICE_UNAVAILABLE = 2;
int BILLING_UNAVAILABLE = 3;
int ITEM_UNAVAILABLE = 4;
int DEVELOPER_ERROR = 5;
int ERROR = 6;
int ITEM_ALREADY_OWNED = 7;
int ITEM_NOT_OWNED = 8;

但我想只有少数人真正发送到这个方法,那么我应该关心他们中的哪一个?

public void onBillingSetupFinished(@NonNull BillingResult billingResult)
{
  switch(billingResult.getResponseCode())
  {
    case BillingClient.BillingResponseCode.OK:
      break;
    case BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED:
      break;
    case BillingClient.BillingResponseCode.ITEM_NOT_OWNED:
      break;
    case BillingClient.BillingResponseCode.BILLING_UNAVAILABLE:
      break;
    case BillingClient.BillingResponseCode.DEVELOPER_ERROR:
      break;
    ...
    default:
      
  }
}

如果我找到计费 api 的源代码会有所帮助,但我找不到。

【问题讨论】:

    标签: android in-app-billing


    【解决方案1】:

    我基于 Google 的官方 ClassyTaxi 示例应用编写了这个 BillingClientListener,我也在生产中使用它:

    class BillingClientListener(
        private val billingClient: BillingClient,
        private val onBillingSetupOk: (() -> Unit)? = null
    ) : BillingClientStateListener {
    
        private var retryCount = 0
        override fun onBillingSetupFinished(billingResult: BillingResult) {
            Log.d(TAG, "Setup finished.")
            retryCount = 0
            if (billingResult.responseCode != OK) {
                Log.e(TAG, "Problem setting up in-app billing: " + billingResult.debugMessage)
                return
            }
            Log.d(TAG, "Setup successful. Querying inventory.")
            onBillingSetupOk?.invoke()
    
        }
    
        override fun onBillingServiceDisconnected() {
            // Try to restart the connection on the next request to
            // Google Play by calling the startConnection() method.
            retryCount++
            if (retryCount <= 3)
                billingClient.startConnection(this)
    
                // show error message TODO
        }
    }
    

    您基本上只检查设置是否成功,即responseCode == OK。当然,您可以检查更多信息,例如服务超时,但这不是必需的。我可以推荐查看完整的示例应用,因为它运行良好。

    【讨论】:

      【解决方案2】:

      这是 google 的官方帐单示例project。希望这能回答您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-03
        • 1970-01-01
        • 2014-03-27
        • 2016-01-24
        • 1970-01-01
        • 2018-03-13
        相关资源
        最近更新 更多