package com.novoda.inapp.v3; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; import com.android.vending.billing.util.*; public class MainFragment extends Fragment { private static final String TAG = "IABEX"; public static final String FIVE_COINS_SKU = "android.test.purchased"; private IabHelper iabHelper; private boolean purchasesAvailableOnThisDevice = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); iabHelper = new IabHelper(getActivity(), "todoGetBase64PublicKeyFromGooglePlayStore"); iabHelper.enableDebugLogging(BuildConfig.DEBUG); iabHelper.startSetup(onIabSetupFinished); } private IabHelper.OnIabSetupFinishedListener onIabSetupFinished = new IabHelper.OnIabSetupFinishedListener() { @Override public void onIabSetupFinished(IabResult result) { if (result.isFailure()) { logError(result); return; } purchasesAvailableOnThisDevice = true; iabHelper.queryInventoryAsync(queryInventoryFinishedListener); } }; private void logError(IabResult result) { Log.e(TAG, "Error setting up IAB"); int responseCode = result.getResponse(); switch (responseCode) { case IabHelper.BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE: Log.e(TAG, "IAB not available on this device"); break; case IabHelper.BILLING_RESPONSE_RESULT_DEVELOPER_ERROR: Log.e(TAG, "IAB Developer Error"); break; case IabHelper.BILLING_RESPONSE_RESULT_ERROR: Log.e(TAG, "IAB Error"); break; case IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED: Log.e(TAG, "IAB Item already owned error"); break; case IabHelper.BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED: Log.e(TAG, "IAB item not owned error"); break; case IabHelper.BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE: Log.e(TAG, "IAB item unavailable"); break; case IabHelper.BILLING_RESPONSE_RESULT_USER_CANCELED: Log.e(TAG, "IAB user cancelled"); break; default: Log.e(TAG, "IAB Uncaught error code: " + responseCode); break; } } private IabHelper.QueryInventoryFinishedListener queryInventoryFinishedListener = new IabHelper.QueryInventoryFinishedListener() { @Override public void onQueryInventoryFinished(IabResult result, Inventory inv) { if (result.isFailure()) { logError(result); return; } for (Purchase purchase : inv.getAllPurchases()) { String sku = purchase.getSku(); SkuDetails skuDetails = inv.getSkuDetails(sku); Log.d(TAG, "Owned item : " + skuDetails.getTitle()); Log.d(TAG, "and it cost : " + skuDetails.getPrice()); } // If you have the SKU of an un-owned item, you can also query for price etc } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); Button purchaseFiveButton = (Button) rootView.findViewById(R.id.fragment_main_button_purchase_five_coins); purchaseFiveButton.setOnClickListener(onFiveButtonClicked); return rootView; } private View.OnClickListener onFiveButtonClicked = new View.OnClickListener() { @Override public void onClick(View v) { if (!purchasesAvailableOnThisDevice) { Toast.makeText(v.getContext(), "IAB not available on this device", Toast.LENGTH_SHORT).show(); return; } Toast.makeText(v.getContext(), "Starting payment process", Toast.LENGTH_SHORT).show(); iabHelper.launchPurchaseFlow(getActivity(), FIVE_COINS_SKU, 100, onItemPurchased, "extra data identifing user & encoded"); } }; @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { iabHelper.handleActivityResult(requestCode, resultCode, data); } private IabHelper.OnIabPurchaseFinishedListener onItemPurchased = new IabHelper.OnIabPurchaseFinishedListener() { @Override public void onIabPurchaseFinished(IabResult result, Purchase info) { if (result.isFailure()) { logError(result); return; } if (FIVE_COINS_SKU.equals(info.getSku())) { Log.d(TAG, "Purchased five coins, consume the purchase"); iabHelper.consumeAsync(info, onItemConsumed); } } }; private IabHelper.OnConsumeFinishedListener onItemConsumed = new IabHelper.OnConsumeFinishedListener() { @Override public void onConsumeFinished(Purchase purchase, IabResult result) { if (result.isFailure()) { logError(result); return; } Log.d(TAG, "Consumed the purchase five coins, add them to the users total"); Toast.makeText(getActivity(), "You purchased 5 coins w00h00", Toast.LENGTH_LONG).show(); } }; @Override public void onDestroy() { super.onDestroy(); iabHelper.dispose(); } }