Module: ProMotion::IAP

Defined in:
lib/ProMotion/iap.rb

Defined Under Namespace

Classes: Product

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#completion_handlersObject

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

#paymentQueue(_, updatedTransactions: transactions) ⇒ Object

SKPaymentTransactionObserver methods



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/ProMotion/iap.rb', line 118

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



98
99
100
101
102
103
104
105
106
107
# File 'lib/ProMotion/iap.rb', line 98

def productsRequest(_, didReceiveResponse:response)
  unless response.invalidProductIdentifiers.empty?
    red = "\e[0;31m"
    color_off = "\e[0m"
    puts "#{red}PM::IAP Error - invalid product identifier(s) '#{response.invalidProductIdentifiers.join("', '")}' for application identifier #{NSBundle.mainBundle.infoDictionary['CFBundleIdentifier'].inspect}#{color_off}"
  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_iaps(*product_ids, &callback) ⇒ Object Also known as: purchase_iap



5
6
7
8
9
10
11
12
13
14
# File 'lib/ProMotion/iap.rb', line 5

def purchase_iaps(*product_ids, &callback)
  iap_setup
  retrieve_iaps product_ids 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



109
110
111
112
113
114
# File 'lib/ProMotion/iap.rb', line 109

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_ids, &callback) ⇒ Object Also known as: restore_iap



17
18
19
20
21
22
23
24
25
# File 'lib/ProMotion/iap.rb', line 17

def restore_iaps(*product_ids, &callback)
  iap_setup
  retrieve_iaps product_ids 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



28
29
30
31
32
33
34
# File 'lib/ProMotion/iap.rb', line 28

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