use*_*857 2 android billing in-app-purchase in-app-billing android-billing
我正在尝试使用 IabHelper 实现应用内计费服务。我成功地完成了整个购买过程。
//-----------------------------------------------
public void billingServiceLaunchPurchase(String item) {
//-----------------------------------------------
if (isNetworkAvailableSync(getBaseContext())) {
currBuyItem=item;
billingConsummeType=1;
mHelper.launchPurchaseFlow(BaseActivity.this, item, 10001, mPurchaseFinishedListener, "");
}
else {
onBillingServiceFailed();
}
}
//-----------------------------------------------
mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
//-----------------------------------------------
public void onIabPurchaseFinished(IabResult result, Purchase purchase)
{
if (result.isFailure()) {
// Handle error
onBillingServiceFailed();
return;
}
else if (purchase.getSku().equals(currBuyItem)) {
billingServiceConsumeItem();
}
}
};
@Override
//-----------------------------------------------------------------------
protected void onActivityResult(int requestCode, int resultCode, Intent data)
//-----------------------------------------------------------------------
{
if (billingServiceConnected) {
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
else {
// onActivityResult handled by IABUtil.
}
}
else
super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
但是,当用户启动购买,然后按 Google 确认屏幕上的退格键和“购买”按钮来中断它时,我无法检测到该事件。
它既不会触发 onIabPurchaseFinished 失败,也不会触发 onActivityResult,因此我的应用程序保持中间状态。
请帮助我解决我的问题。
根据我对您问题的理解,您正在应用程序计费中搜索购买取消事件。
您可以通过 onActivityResult() 方法触发此操作。将以下代码放入 onActivityResult() 方法中。有一个简单的 RESEULT_CANCEL 类型,表明您的用户已取消购买。
if (mHelper == null)
return;
if (requestCode == 10001) {
int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
Log.d("INAPP_PURCHASE_DATA", ">>>" + purchaseData);
String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
Log.d("INAPP_DATA_SIGNATURE", ">>>" + dataSignature);
String continuationToken = data
.getStringExtra("INAPP_CONTINUATION_TOKEN");
Log.d("INAPP_CONTINUATION_TOKEN", ">>>" + continuationToken);
if (resultCode == RESULT_OK) {
try {
Log.d("purchaseData", ">>>"+purchaseData);
JSONObject jo = new JSONObject(purchaseData);
String sku = jo.getString("productId");
alert("You have bought the " + sku
+ ". Excellent choice, adventurer!");
} catch (JSONException e) {
alert("Failed to parse purchase data.");
e.printStackTrace();
}
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(AppMainTest.this,
"Sorry, you have canceled purchase Subscription.",
Toast.LENGTH_SHORT).show();
} else if (resultCode == IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) {
Toast.makeText(AppMainTest.this, "Item already owned",
Toast.LENGTH_SHORT).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者
您也可以使用业务逻辑手动处理。检查用户是否取消购买产品,然后标记用户是否已购买,如果没有,则再次调用 launchPurchaseFlow() 方法。
编辑
onDestroy() method
@Override
public void onDestroy() {
super.onDestroy();
// very important:
Log.d(TAG, "Destroying helper.");
if (mHelper != null)
mHelper.dispose();
mHelper = null;
}
Run Code Online (Sandbox Code Playgroud)
如果您有按钮,那么您可以直接在 onClick 事件中调用 launchPurchaseFlow() 方法,以便每次您的 mHelper 创建为新购买。
或者
如果您在 onCreate 方法中使用它并且没有任何按钮单击事件来购买产品,那么据我所知,您必须将值设置为 null。
希望它能解决您的问题。
| 归档时间: |
|
| 查看次数: |
2927 次 |
| 最近记录: |