I implemented inapp purchase in my application. I use activity for result to get IAP result failure or successs
Intent intent = new Intent(LevelsActivity.this,
PurchaseCoinActivity.class);
Log.d("TE1","1.Calling Purchase activity for "+productSKU+"Product");
intent.putExtra("sku_id", productSKU);
startActivityForResult(intent,
MyConstants.REQUEST_PURCHASE);
//here REQUEST_PURCHASE=2014
/* ------My onActivityResult ----- */
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (QuizByteConstants.REQUEST_QUIZ_PURCHASE == requestCode) {
if (RESULT_OK == resultCode) {
dealWithSuccessfulPurchase();
} else {
dealWithFailedPurchase();
}
} else if (requestCode == 550) {
Log.d("TE1","Result after purchase=Request code is 550 state");
Toast.makeText(getApplicationContext(), "activty result",
Toast.LENGTH_LONG).show();
}
//--------------here my PurchaseCoinActivity-----------
package com.br.my.payment;
import java.util.ArrayList;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.android.vending.billing.util.IabResult;
import com.android.vending.billing.util.Purchase;
import com.br.my.R;
import com.br.my.activities.MyApplication;
import com.br.my.activities.MyForgotPasswordActivity;
import com.br.my.MyConstants;
import com.br.my.MyUtilities;
public class PurchaseCoinActivity extends PurchaseActivity {
private QuizByteApplication qbApplication;
private ArrayList<String> skuList;
private String productSku;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the result as cancelled in case anything fails before we purchase
// the item
skuList = new ArrayList<String>();
//skuList.add(MYConstants.SKU);
myApplication = (MYApplication) getApplication();
setResult(RESULT_CANCELED);
if (getIntent().getExtras() != null
&& getIntent().getExtras().containsKey("sku_id")) {
productSku = getIntent().getExtras().getString("sku_id");
Log.d("TE1","Product id recived on purchase coin activity="+productSku);
}
// Then wait for the callback if we have successfully setup in app
// billing or not (because we extend PurchaseActivity)
}
@Override
protected void dealWithIabSetupFailure() {
MyUtilities.showCustomToast(PurchaseCoinActivity.this, getString(R.string.toast_buy_coin_not_available));
finish();
}
@Override
protected void dealWithIabSetupSuccess() {
ArrayList<String> productInfoList = getProductDetails(skuList);
qbApplication.setPurchasedProductDetails(productInfoList);
Log.d("TE1","Setting DB application setPurchasedInfoList as ="+productInfoList);
Log.d("TE1","Iab setup sucess.. start purcaseing..");
purchaseItem(productSku);
}
@Override
protected void dealWithPurchaseSuccess(IabResult result,
Purchase purchaseInfo) {
super.dealWithPurchaseSuccess(result, purchaseInfo);
myApplication.setProductPurchased(purchaseInfo);
Log.d("TE1","purchase sucess Result="+result+"..& seting to myApplication item="+purchaseInfo);
myApplication.setPurchaseResult(result);
Log.d("Purchase Activity", " OrderId=" + purchaseInfo.getOrderId()
+ " developer_payload=" + purchaseInfo.getDeveloperPayload());
Log.d("TE1", " OrderId=" + purchaseInfo.getOrderId()
+ " developer_payload=" + purchaseInfo.getDeveloperPayload());
setResult(RESULT_OK);
finish();
}
@Override
protected void dealWithPurchaseFailed(IabResult result) {
super.dealWithPurchaseFailed(result);
Log.d("TE!","Purchase failed!!! result="+result);
myApplication.setPurchaseResult(result);
setResult(RESULT_CANCELED);
finish();
}
}
for some successful purchase indicated from google play(money deducted from account),but my onActivityResult() call dealWithFailedPurchase()!!(for some time!! some time work fine), Based on deal with successful or failure purchase i need to update server database using async task. But some times it updated as purchased but some times not. please give sugessions.. thank you .