我按照此文档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();
}
}
}
}
答案 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