@Override public void onPurchaseHistoryResponse(int responseCode, List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) { handlePurchase(purchases, true); } else { Gdx.app.error(TAG, "onPurchaseHistoryResponse failed with responseCode " + responseCode); observer.handleRestoreError(new GdxPayException("onPurchaseHistoryResponse failed with " + "responseCode " + responseCode)); } } });
@Override public void paymentQueueRestoreCompletedTransactionsFailedWithError(SKPaymentQueue queue, NSError error) { // Restoration failed. // Decide if user cancelled or transaction failed. if (error.code() == SKErrorCode.PaymentCancelled) { log(LOGTYPEERROR, "Restoring of transactions was cancelled by user!"); observer.handleRestoreError(new RuntimeException("Restoring of purchases was " + "cancelled by user!")); } else { log(LOGTYPEERROR, "Restoring of transactions failed: " + error.toString()); observer.handleRestoreError(new RuntimeException("Restoring of purchases failed: " + error.toString())); } } }
@Override public void restoreCompletedTransactionsFailed (SKPaymentQueue queue, NSError error) { // Restoration failed. // Decide if user cancelled or transaction failed. if (error.getCode() == SKErrorCode.PaymentCancelled.value()) { log(LOGTYPEERROR, "Restoring of transactions was cancelled by user!"); observer.handleRestoreError(new RuntimeException("Restoring of purchases was cancelled by user!")); } else { log(LOGTYPEERROR, "Restoring of transactions failed: " + error.toString()); observer.handleRestoreError(new RuntimeException("Restoring of purchases failed: " + error.toString())); } } }
@Override public void purchaseRestore() { try { List<Transaction> transactions = googleInAppBillingService.getPurchases(); Array<Transaction> entitlements = new Array<>(Transaction.class); for (int i = 0; i < transactions.size(); i++) { Transaction transaction = transactions.get(i); if (OfferType.CONSUMABLE == getOfferType(transaction.getIdentifier())) { googleInAppBillingService.consumePurchase(transaction, observer); } else { entitlements.add(transaction); } } if (observer != null) { observer.handleRestore(entitlements.toArray()); } } catch (GdxPayException e) { if (observer != null) { observer.handleRestoreError(e); } } }
@Test public void restoreErrorShouldDelegateResultToObserver() throws Exception { connectBindAndForFullEditionEntitlement(); GdxPayException exception = new GdxPayException("Network error"); when(this.googleInAppBillingService.getPurchases()).thenThrow(exception); purchaseManager.purchaseRestore(); verify(googleInAppBillingService).getPurchases(); verify(purchaseObserver).handleRestoreError(exception); }
observer.handleRestoreError(new GdxPayException("onPurchaseUpdatesResponse: FAILED, should retry request")); break; observer.handleRestoreError(new GdxPayException("onPurchaseUpdatesResponse: NOT_SUPPORTED, should retry request")); break;