我什么时候需要Iab Helper Class进行In App购买?

时间:2014-06-11 09:06:06

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

我按照此文档http://developer.android.com/google/play/billing/billing_integrate.html创建了一个测试应用程序,在点击按钮后启动应用内购买程序。
我将该应用程序作为alpha版本发布并测试了应用程序内购买,并且可以正常运行。

我的问题是,我对其他应用内购买示例感到困惑。他们都使用名为“IabHelper”的类来进行应用内购买。 但看起来,人们不需要这个课程来进行应用内购买。 该课程甚至用于官方的In-App-Billing V3“TrivalDrive”示例中,但我在上面发布的应用内结算指南中从未提及过。

有人可以向我解释,为什么以及何时应该使用IabHelper课程?

提前谢谢。

以下是我用于进行应用内购买的代码的简化版本:

private void doPurchase() {
    try {
        Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), "premium.upgrade",
            "inapp", "");

        if (buyIntentBundle != null && buyIntentBundle.getInt("RESPONSE_CODE") == 0) {
            PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");

            startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(),
                Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
        }
    } catch (SendIntentException e) {
        e.printStackTrace();
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1001) {
        String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");

        if (resultCode == RESULT_OK) {
            try {
                JSONObject jo = new JSONObject(purchaseData);
                String sku = jo.getString("productId");
                Log.i(">>>", "You have bought the "
                    + sku
                    + ". Excellent choice, "
                    + "adventurer!");
            } catch (JSONException e) {
                Log.e(">>>", "Failed to parse purchase data.");
                e.printStackTrace();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

考虑到IABHelper,你对指南有点困惑。基本上,IAB-Helper是由Google员工编写的助手级,可以完成很多繁重的任务。因此,如果您使用IAB-Helper,则不必像在doPurchase()方法中那样编写尽可能多的代码。您只需编写以下行:

mHelper.launchPurchaseFlow(activity, sku, RC_REQUEST, mPurchaseFinishedListener);

购买后的东西也是如此,没有摆弄JSON对象

if (info.getSku().equals(sku))
    doSomething();

注意:您必须先设置mHelper并实现各种侦听器。当然,IABHelper在后台执行的操作与您在方法中完成的操作完全相同。它只是另一层抽象。

这是关于IABHelper的好消息。坏消息:IABHelper有一些相当严重的错误导致偶尔崩溃。虽然我仍然建议使用它,因为它可以捕获更多的错误,你甚至无法想到。

在以下Android开发人员培训网站上,您可以找到一个指南,其中显示了如何使用IABHelper。 https://developer.android.com/training/in-app-billing/preparing-iab-app.html#GetSample