@Override public void purchaseSuccess(Transaction transaction) { if (observer != null) { switch (offerType) { case CONSUMABLE: // Warning: observer.handlePurchase is called in googleInAppBillingService.consumePurchase. // That is not clean, I would prefer to keep it on one place. // Should be refactored later. googleInAppBillingService.consumePurchase(transaction, observer); break; case ENTITLEMENT: case SUBSCRIPTION: observer.handlePurchase(transaction); break; default: String error = "Unsupported OfferType=" + getOfferType(identifier) + " for identifier=" + identifier; throw new GdxPayException(error); } } }
@Override public void run() { try { Log.d(LOG_TAG, "Purchase consumer starting"); final int result = consumePurchaseToken(transaction.getTransactionData()); if (result == 0) { observer.handlePurchase(transaction); } else { ResponseCode responseCode = ResponseCode.findByCode(result); String productId = transaction.getIdentifier(); String error = "Consuming " + productId + " failed, " + responseCode; observer.handlePurchaseError(new ConsumeException(error, transaction)); } } catch (final RemoteException e) { applicationProxy.postRunnable(new Runnable() { @Override public void run() { String message = "Failed consuming product: " + transaction.getIdentifier(); observer.handlePurchaseError(new ConsumeException(message, transaction, e)); } }); } } }
observer.handlePurchase(t); observer.handlePurchase(t);
observer.handlePurchase(t); observer.handlePurchase(t);
@Override public void didFail (SKRequest request, NSError error) { // Receipt refresh request failed. Let's just continue. log(LOGTYPEERROR, "Receipt fetching failed: " + error.toString()); log(LOGTYPELOG, "Transaction was completed: " + getOriginalTxID(transaction)); observer.handlePurchase(t); // Finish transaction. SKPaymentQueue.getDefaultQueue().finishTransaction(transaction); } });
@Override public void requestDidFailWithError(SKRequest request, NSError error) { // Receipt refresh request failed. Let's just continue. log(LOGTYPEERROR, "Receipt fetching failed: " + error .toString()); log(LOGTYPELOG, "Transaction was completed: " + getOriginalTxID(transaction)); observer.handlePurchase(t); // Finish transaction. ((SKPaymentQueue) SKPaymentQueue.defaultQueue()) .finishTransaction(transaction); } });
/** * Method to handle receipts */ private void handleReceipt(final String requestId, final Receipt receipt, final UserData userData) { Gdx.app.log(TAG, "Handle receipt: requestId (" + requestId + ") receipt: " + receipt + ")"); // convert receipt to transaction Transaction trans = AmazonTransactionUtils.convertReceiptToTransaction(1, requestId, receipt, userData); // provides cancleState also switch (receipt.getProductType()) { case CONSUMABLE: case SUBSCRIPTION: case ENTITLED: // inform the listener observer.handlePurchase(trans); // Automatically inform Amazon about the fullfilment PurchasingService.notifyFulfillment(receipt.getReceiptId(), FulfillmentResult.FULFILLED); break; } } //====================================================================================
@Test public void purchaseSuccessShouldDelegateResultSuccessToObserver() throws Exception { PurchaseRequestCallback callback = connectBindAndPurchaseRequestForFullEditionEntitlement(); Transaction transaction = transactionFullEditionEuroGooglePlay(); callback.purchaseSuccess(transaction); verify(purchaseObserver).handlePurchase(transaction); }
transactions.add(transaction); else observer.handlePurchase(transaction);
@Override public void didFinish (SKRequest r) { // Receipt refresh request finished. if (r.equals(request)) { NSURL receiptURL = NSBundle.getMainBundle().getAppStoreReceiptURL(); NSData receipt = NSData.read(receiptURL); String encodedReceipt = receipt.toBase64EncodedString(NSDataBase64EncodingOptions.None); // FIXME: parse out actual receipt for this IAP purchase: t.setTransactionDataSignature(encodedReceipt); log(LOGTYPELOG, "Receipt was fetched!"); } else { log(LOGTYPEERROR, "Receipt fetching failed: Request doesn't equal initial request!"); } log(LOGTYPELOG, "Transaction was completed: " + getOriginalTxID(transaction)); observer.handlePurchase(t); // Finish transaction. SKPaymentQueue.getDefaultQueue().finishTransaction(transaction); }
@Override public void requestDidFinish(SKRequest r) { // Receipt refresh request finished. if (r.equals(request)) { NSURL receiptURL = NSBundle.mainBundle() .appStoreReceiptURL(); NSData receipt = NSData.dataWithContentsOfURL(receiptURL); String encodedReceipt = receipt .base64EncodedStringWithOptions(0); // FIXME: parse out actual receipt for this IAP purchase: t.setTransactionDataSignature(encodedReceipt); log(LOGTYPELOG, "Receipt was fetched!"); } else { log(LOGTYPEERROR, "Receipt fetching failed: Request " + "doesn't equal initial request!"); } log(LOGTYPELOG, "Transaction was completed: " + getOriginalTxID(transaction)); observer.handlePurchase(t); // Finish transaction. ((SKPaymentQueue) SKPaymentQueue.defaultQueue()) .finishTransaction(transaction); }