【问题标题】:Implementing in-app purchase refunding in Android在 Android 中实现应用内购买退款
【发布时间】:2019-05-04 17:23:06
【问题描述】:

我目前正在使用this 库在我的应用程序中实现应用内计费。我选择使用这个库是因为它很简单。

我是这样实现的:

public class MainActivity extends AppCompatActivity {

private Button buyButton;
BillingProcessor bp;
TextView freeorfull;

String LICENSE_KEY = "MyKey";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    freeorfull = (TextView) findViewById(R.id.freeorfull);

    buyButton = (Button) findViewById(R.id.buyButton);

    buyButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (!BillingProcessor.isIabServiceAvailable(getApplicationContext())) {
                Toast.makeText(getApplicationContext(), "Please upgrade Android Market/Play store to version >= 3.9.16",
                        Toast.LENGTH_LONG).show();
            } else {

                bp.purchase(MainActivity.this, "myProductKey");

            }

        }
    });

    buyit();

    if (bp.isPurchased("mybuyfullversion")) {

        freeorfull.setText("FULL oncreate");

    }


}

public void buyit() {
    bp = new BillingProcessor(this, LICENSE_KEY, new BillingProcessor.IBillingHandler() {
        @Override
        public void onProductPurchased(@NonNull String productId, @Nullable TransactionDetails details) {
            freeorfull.setText("FULL in buyit");

            Toast.makeText(getApplicationContext(), "onProductPurchased",
                    Toast.LENGTH_LONG).show();

        }

        @Override
        public void onBillingError(int errorCode, @Nullable Throwable error) {

            Toast.makeText(getApplicationContext(), "onBillingError",
                    Toast.LENGTH_LONG).show();

            if (bp.isPurchased("mybuyfullversion")) {

                freeorfull.setText("FULL oncreate");

            }

        }

        @Override
        public void onBillingInitialized() {
            Toast.makeText(getApplicationContext(), "onBillingInitialized",
                    Toast.LENGTH_LONG).show();


        }

        @Override
        public void onPurchaseHistoryRestored() {

            Toast.makeText(getApplicationContext(), "onPurchaseHistoryRestored",
                    Toast.LENGTH_LONG).show();

        }
    });

}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (!bp.handleActivityResult(requestCode, resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

@Override
public void onDestroy() {
    if (bp != null) {
        bp.release();
    }
    super.onDestroy();
}

}

我尝试从 Google Play 管理中心测试退款用户,一段时间后购买被退款并且用户(我)收到退款,但应用程序仍然显示该项目已购买。

我正在寻找一种方法来检查用户是否已获得退款,然后将 UI/TextView 改回“免费版”。

我已经看到可以使用以下内容:

Purchase removeAdsPurchase = inventory.getPurchase(SKU_REMOVE_ADS);
if(removeAdsPurchase != null) {
   int purchaseStateForRemoveAds = removeAdsPurchase.getPurchaseState();
if(purchaseStateForRemoveAds == 1) {
   //Do cancelled purchase stuff here
}
else if(purchaseStateForRemoveAds == 2) {
   //Do refunded purchase stuff here
}
}

但是这个库没有Purchaseclass,我不明白库存指的是什么。

据我了解,我应该让 PurchaseState 检查购买是否已退款。我应该如何进行?

【问题讨论】:

    标签: android in-app-purchase android-library


    【解决方案1】:

    这就是我使用同一个计费库解决类似问题的方法。为了在退款后重置应用,您必须在 BuyActivity 或任何您可以检查购买状态的地方调用 bp.loadOwnedPurchasesFromGoogle() 方法。 请注意方法

       bp.loadOwnedPurchasesFromGoogle()
    

    从 Google 服务器更新购买更新,所以不要等待。

    所以要检查商品是否已购买(包括退款),试试这个:

     if(bp.isPurchased(PRODUCT_ID)){
          // item is purchased  
     }
     else{ 
            //item not purchased any longer so it is up for buy
     }
    

    【讨论】:

      【解决方案2】:

      所以,经过大量挣扎和误导性的信息,比如这个问题的答案,我终于知道为什么会这样了。

      用户购买产品后,无论如何,SKU 仍然有效。是的,即使您退还产品。

      我与 Google Play 支持人员进行了交谈,他们说检查产品是否被取消或退款的唯一方法是使用 Voided Purchase API。因此,使用 Oauth2,您将能够使用产品令牌和 Voided Purchase API 来检查产品是否有效:

      可以使用 bp.isPurchased("yourSKU") 检查您的产品是否购买成功。

      检查您的 SKU/Token 状态的唯一可行方法(我认为和 Google 认为)是使用 Voided Purchase API。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-29
        • 2011-01-02
        • 2020-05-31
        • 1970-01-01
        • 2018-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多