Module: ProMotion::IAP
- Defined in:
- lib/ProMotion/iap.rb
Instance Attribute Summary collapse
-
#completion_handlers ⇒ Object
Returns the value of attribute completion_handlers.
Instance Method Summary collapse
- #iap_callback(status, transaction, finish = false) ⇒ Object
-
#paymentQueue(_, updatedTransactions: transactions) ⇒ Object
SKPaymentTransactionObserver methods.
-
#productsRequest(_, didReceiveResponse: response) ⇒ Object
SKProductsRequestDelegate methods.
- #purchase_iap(product_id, &callback) ⇒ Object
- #request(_, didFailWithError: error) ⇒ Object
- #restore_iaps(product_id, &callback) ⇒ Object
- #retrieve_iaps(*product_ids, &callback) ⇒ Object (also: #retrieve_iap)
Instance Attribute Details
#completion_handlers ⇒ Object
Returns the value of attribute completion_handlers.
3 4 5 |
# File 'lib/ProMotion/iap.rb', line 3 def completion_handlers @completion_handlers end |
Instance Method Details
#iap_callback(status, transaction, finish = false) ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/ProMotion/iap.rb', line 118 def iap_callback(status, transaction, finish=false) product_id = transaction.payment.productIdentifier if self.completion_handlers["purchase-#{product_id}"] self.completion_handlers["purchase-#{product_id}"].call status, transaction self.completion_handlers["purchase-#{product_id}"] = nil if finish end if self.completion_handlers["restore-#{product_id}"] self.completion_handlers["restore-#{product_id}"].call status, transaction self.completion_handlers["restore-#{product_id}"] = nil if finish end SKPaymentQueue.defaultQueue.finishTransaction(transaction) if finish end |
#paymentQueue(_, updatedTransactions: transactions) ⇒ Object
SKPaymentTransactionObserver methods
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/ProMotion/iap.rb', line 101 def paymentQueue(_, updatedTransactions:transactions) transactions.each do |transaction| case transaction.transactionState when SKPaymentTransactionStatePurchasing then iap_callback(:in_progress, transaction) when SKPaymentTransactionStateDeferred then iap_callback(:deferred, transaction) when SKPaymentTransactionStatePurchased then iap_callback(:purchased, transaction, true) when SKPaymentTransactionStateRestored then iap_callback(:restored, transaction, true) when SKPaymentTransactionStateFailed if transaction.error.code == SKErrorPaymentCancelled iap_callback(:canceled, transaction, true) else iap_callback(:error, transaction, true) end end end end |
#productsRequest(_, didReceiveResponse: response) ⇒ Object
SKProductsRequestDelegate methods
83 84 85 86 87 88 89 90 |
# File 'lib/ProMotion/iap.rb', line 83 def productsRequest(_, didReceiveResponse:response) unless response.invalidProductIdentifiers.empty? PM.logger.error "PM::IAP Error - invalid product identifier(s) '#{response.invalidProductIdentifiers.join("', '")}' for application identifier #{NSBundle.mainBundle.infoDictionary['CFBundleIdentifier'].inspect}" end retrieved_iaps_handler(response.products, &self.completion_handlers["retrieve_iaps"]) if self.completion_handlers["retrieve_iaps"] @products_request = nil self.completion_handlers["retrieve_iaps"] = nil end |
#purchase_iap(product_id, &callback) ⇒ Object
5 6 7 8 9 10 11 12 13 14 |
# File 'lib/ProMotion/iap.rb', line 5 def purchase_iap(product_id, &callback) iap_setup retrieve_iaps product_id do |products| products.each do |product| self.completion_handlers["purchase-#{product[:product_id]}"] = callback payment = SKPayment.paymentWithProduct(product[:product]) SKPaymentQueue.defaultQueue.addPayment(payment) end end end |
#request(_, didFailWithError: error) ⇒ Object
92 93 94 95 96 97 |
# File 'lib/ProMotion/iap.rb', line 92 def request(_, didFailWithError:error) self.completion_handlers["retrieve_iaps"].call([], error) if self.completion_handlers["retrieve_iaps"].arity == 2 self.completion_handlers["retrieve_iaps"].call([]) if self.completion_handlers["retrieve_iaps"].arity < 2 @products_request = nil self.completion_handlers["retrieve_iaps"] = nil end |
#restore_iaps(product_id, &callback) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/ProMotion/iap.rb', line 16 def restore_iaps(product_id, &callback) iap_setup retrieve_iaps product_id do |products| products.each do |product| self.completion_handlers["restore-#{product[:product_id]}"] = callback SKPaymentQueue.defaultQueue.restoreCompletedTransactions end end end |
#retrieve_iaps(*product_ids, &callback) ⇒ Object Also known as: retrieve_iap
26 27 28 29 30 31 32 |
# File 'lib/ProMotion/iap.rb', line 26 def retrieve_iaps(*product_ids, &callback) iap_setup self.completion_handlers["retrieve_iaps"] = callback @products_request = SKProductsRequest.alloc.initWithProductIdentifiers(NSSet.setWithArray(product_ids.flatten)) @products_request.delegate = self @products_request.start end |