Search in sources :

Example 1 with IabException

use of com.onesignal.example.iap.IabException in project OneSignal-Android-SDK by OneSignal.

the class IabHelper method consumeAsyncInternal.

void consumeAsyncInternal(final List<Purchase> purchases, final OnConsumeFinishedListener singleListener, final OnConsumeMultiFinishedListener multiListener) {
    final Handler handler = new Handler();
    flagStartAsync("consume");
    (new Thread(new Runnable() {

        public void run() {
            final List<IabResult> results = new ArrayList<IabResult>();
            for (Purchase purchase : purchases) {
                try {
                    consume(purchase);
                    results.add(new IabResult(BILLING_RESPONSE_RESULT_OK, "Successful consume of sku " + purchase.getSku()));
                } catch (IabException ex) {
                    results.add(ex.getResult());
                }
            }
            flagEndAsync();
            if (!mDisposed && singleListener != null) {
                handler.post(new Runnable() {

                    public void run() {
                        singleListener.onConsumeFinished(purchases.get(0), results.get(0));
                    }
                });
            }
            if (!mDisposed && multiListener != null) {
                handler.post(new Runnable() {

                    public void run() {
                        multiListener.onConsumeMultiFinished(purchases, results);
                    }
                });
            }
        }
    })).start();
}
Also used : Purchase(com.onesignal.example.iap.Purchase) Handler(android.os.Handler) ArrayList(java.util.ArrayList) List(java.util.List) IabException(com.onesignal.example.iap.IabException) IabResult(com.onesignal.example.iap.IabResult)

Example 2 with IabException

use of com.onesignal.example.iap.IabException in project OneSignal-Android-SDK by OneSignal.

the class IabHelper method queryInventoryAsync.

/**
     * Asynchronous wrapper for inventory query. This will perform an inventory
     * query as described in {@link #queryInventory}, but will do so asynchronously
     * and call back the specified listener upon completion. This method is safe to
     * call from a UI thread.
     *
     * @param querySkuDetails as in {@link #queryInventory}
     * @param moreSkus as in {@link #queryInventory}
     * @param listener The listener to notify when the refresh operation completes.
     */
public void queryInventoryAsync(final boolean querySkuDetails, final List<String> moreSkus, final QueryInventoryFinishedListener listener) {
    final Handler handler = new Handler();
    checkNotDisposed();
    checkSetupDone("queryInventory");
    flagStartAsync("refresh inventory");
    (new Thread(new Runnable() {

        public void run() {
            IabResult result = new IabResult(BILLING_RESPONSE_RESULT_OK, "Inventory refresh successful.");
            Inventory inv = null;
            try {
                inv = queryInventory(querySkuDetails, moreSkus);
            } catch (IabException ex) {
                result = ex.getResult();
            }
            flagEndAsync();
            final IabResult result_f = result;
            final Inventory inv_f = inv;
            if (!mDisposed && listener != null) {
                handler.post(new Runnable() {

                    public void run() {
                        listener.onQueryInventoryFinished(result_f, inv_f);
                    }
                });
            }
        }
    })).start();
}
Also used : Handler(android.os.Handler) IabException(com.onesignal.example.iap.IabException) IabResult(com.onesignal.example.iap.IabResult) Inventory(com.onesignal.example.iap.Inventory)

Example 3 with IabException

use of com.onesignal.example.iap.IabException in project OneSignal-Android-SDK by OneSignal.

the class IabHelper method queryInventory.

/**
     * Queries the inventory. This will query all owned items from the server, as well as
     * information on additional skus, if specified. This method may block or take long to execute.
     * Do not call from a UI thread. For that, use the non-blocking version {@link #refreshInventoryAsync}.
     *
     * @param querySkuDetails if true, SKU details (price, description, etc) will be queried as well
     *     as purchase information.
     * @param moreItemSkus additional PRODUCT skus to query information on, regardless of ownership.
     *     Ignored if null or if querySkuDetails is false.
     * @param moreSubsSkus additional SUBSCRIPTIONS skus to query information on, regardless of ownership.
     *     Ignored if null or if querySkuDetails is false.
     * @throws IabException if a problem occurs while refreshing the inventory.
     */
public Inventory queryInventory(boolean querySkuDetails, List<String> moreItemSkus, List<String> moreSubsSkus) throws IabException {
    checkNotDisposed();
    checkSetupDone("queryInventory");
    try {
        Inventory inv = new Inventory();
        int r = queryPurchases(inv, ITEM_TYPE_INAPP);
        if (r != BILLING_RESPONSE_RESULT_OK) {
            throw new IabException(r, "Error refreshing inventory (querying owned items).");
        }
        if (querySkuDetails) {
            r = querySkuDetails(ITEM_TYPE_INAPP, inv, moreItemSkus);
            if (r != BILLING_RESPONSE_RESULT_OK) {
                throw new IabException(r, "Error refreshing inventory (querying prices of items).");
            }
        }
        // if subscriptions are supported, then also query for subscriptions
        if (mSubscriptionsSupported) {
            r = queryPurchases(inv, ITEM_TYPE_SUBS);
            if (r != BILLING_RESPONSE_RESULT_OK) {
                throw new IabException(r, "Error refreshing inventory (querying owned subscriptions).");
            }
            if (querySkuDetails) {
                r = querySkuDetails(ITEM_TYPE_SUBS, inv, moreItemSkus);
                if (r != BILLING_RESPONSE_RESULT_OK) {
                    throw new IabException(r, "Error refreshing inventory (querying prices of subscriptions).");
                }
            }
        }
        return inv;
    } catch (RemoteException e) {
        throw new IabException(IABHELPER_REMOTE_EXCEPTION, "Remote exception while refreshing inventory.", e);
    } catch (JSONException e) {
        throw new IabException(IABHELPER_BAD_RESPONSE, "Error parsing JSON response while refreshing inventory.", e);
    }
}
Also used : JSONException(org.json.JSONException) IabException(com.onesignal.example.iap.IabException) RemoteException(android.os.RemoteException) Inventory(com.onesignal.example.iap.Inventory)

Example 4 with IabException

use of com.onesignal.example.iap.IabException in project OneSignal-Android-SDK by OneSignal.

the class IabHelper method consume.

/**
     * Consumes a given in-app product. Consuming can only be done on an item
     * that's owned, and as a result of consumption, the user will no longer own it.
     * This method may block or take long to return. Do not call from the UI thread.
     * For that, see {@link #consumeAsync}.
     *
     * @param itemInfo The PurchaseInfo that represents the item to consume.
     * @throws IabException if there is a problem during consumption.
     */
void consume(Purchase itemInfo) throws IabException {
    checkNotDisposed();
    checkSetupDone("consume");
    if (!itemInfo.mItemType.equals(ITEM_TYPE_INAPP)) {
        throw new IabException(IABHELPER_INVALID_CONSUMPTION, "Items of type '" + itemInfo.mItemType + "' can't be consumed.");
    }
    try {
        String token = itemInfo.getToken();
        String sku = itemInfo.getSku();
        if (token == null || token.equals("")) {
            logError("Can't consume " + sku + ". No token.");
            throw new IabException(IABHELPER_MISSING_TOKEN, "PurchaseInfo is missing token for sku: " + sku + " " + itemInfo);
        }
        logDebug("Consuming sku: " + sku + ", token: " + token);
        int response = mService.consumePurchase(3, mContext.getPackageName(), token);
        if (response == BILLING_RESPONSE_RESULT_OK) {
            logDebug("Successfully consumed sku: " + sku);
        } else {
            logDebug("Error consuming consuming sku " + sku + ". " + getResponseDesc(response));
            throw new IabException(response, "Error consuming sku " + sku);
        }
    } catch (RemoteException e) {
        throw new IabException(IABHELPER_REMOTE_EXCEPTION, "Remote exception while consuming. PurchaseInfo: " + itemInfo, e);
    }
}
Also used : IabException(com.onesignal.example.iap.IabException) RemoteException(android.os.RemoteException)

Aggregations

IabException (com.onesignal.example.iap.IabException)4 Handler (android.os.Handler)2 RemoteException (android.os.RemoteException)2 IabResult (com.onesignal.example.iap.IabResult)2 Inventory (com.onesignal.example.iap.Inventory)2 Purchase (com.onesignal.example.iap.Purchase)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 JSONException (org.json.JSONException)1