ProMotion-iap 0.2.0 → 0.2.1.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +17 -7
- data/lib/ProMotion-iap.rb +3 -3
- data/lib/ProMotion/iap.rb +45 -9
- data/lib/ProMotion/product.rb +3 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04b7803087c35db767148574597a8ab7ab362330
|
4
|
+
data.tar.gz: 6e75db90ae31c40bc2ba8559202e8e12c4ef8a75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f62e32f616300fcce8a2b39e40a74fcb7464af606eb950554f44c14adeb1fbd92f25386675d56de58dc19d28d78f6ca614c86f4c351e4c32285889d239ac0fd
|
7
|
+
data.tar.gz: 64d667a643c98e2c8bb0b64dec33ab25e019edfcc2db8432def098d79e8dc61a1d7886a10bcabfc08eeb7a39d6bfa7295d8819e343cb22c793f49dd0bd6b9c22
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# ProMotion-iap
|
2
2
|
|
3
3
|
[](http://badge.fury.io/rb/ProMotion-iap)
|
4
|
-
[](https://travis-ci.org/clearsightstudio/ProMotion-iap)
|
4
|
+
[](https://travis-ci.org/clearsightstudio/ProMotion-iap)
|
5
5
|
|
6
6
|
ProMotion-iap is in-app purchase notification support for the
|
7
7
|
popular RubyMotion gem [ProMotion](https://github.com/clearsightstudio/ProMotion).
|
@@ -42,7 +42,7 @@ class PurchaseScreen < PM::Screen
|
|
42
42
|
}
|
43
43
|
end
|
44
44
|
|
45
|
-
product.purchase do |status,
|
45
|
+
product.purchase do |status, data|
|
46
46
|
case status
|
47
47
|
when :in_progress
|
48
48
|
# Usually do nothing, maybe a spinner
|
@@ -54,13 +54,16 @@ class PurchaseScreen < PM::Screen
|
|
54
54
|
# They just canceled, no big deal.
|
55
55
|
when :error
|
56
56
|
# Failed to purchase
|
57
|
-
|
57
|
+
data[:error].localizedDescription # => error message
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
product.restore do |status,
|
61
|
+
product.restore do |status, data|
|
62
62
|
if status == :restored
|
63
63
|
# Update your UI, notify the user
|
64
|
+
# data is a hash with :product_id, :error, and :transaction
|
65
|
+
else
|
66
|
+
# Tell the user it failed to restore
|
64
67
|
end
|
65
68
|
end
|
66
69
|
|
@@ -113,7 +116,7 @@ class PurchaseScreen < PM::Screen
|
|
113
116
|
}, {...}]
|
114
117
|
end
|
115
118
|
|
116
|
-
|
119
|
+
purchase_iaps [ "productid" ], username: User.current.username do |status, transaction|
|
117
120
|
case status
|
118
121
|
when :in_progress
|
119
122
|
# Usually do nothing, maybe a spinner
|
@@ -129,9 +132,16 @@ class PurchaseScreen < PM::Screen
|
|
129
132
|
end
|
130
133
|
end
|
131
134
|
|
132
|
-
restore_iaps "productid" do |status,
|
135
|
+
restore_iaps [ "productid" ], username: User.current.username do |status, data|
|
133
136
|
if status == :restored
|
134
137
|
# Update your UI, notify the user
|
138
|
+
# This is called once for each product you're trying to restore.
|
139
|
+
data[:product_id] # => "productid"
|
140
|
+
elsif status == :error
|
141
|
+
# Update your UI to show that there was an error.
|
142
|
+
# This will only be called once, no matter how many products you are trying to restore.
|
143
|
+
# You'll get an NSError in your `data` hash.
|
144
|
+
data[:error].localizedDescription # => description of error
|
135
145
|
end
|
136
146
|
end
|
137
147
|
|
@@ -155,7 +165,7 @@ Prompts the user to login to their Apple ID and complete the purchase. The callb
|
|
155
165
|
#### restore_iaps(`*`product_ids, &callback)
|
156
166
|
|
157
167
|
Restores a previously purchased IAP to the user (for example if they have upgraded their device). This relies on the Apple ID the user
|
158
|
-
enters at the prompt. Unfortunately, if there is no purchase to restore for the signed-in account, no error message is generated and
|
168
|
+
enters at the prompt. Unfortunately, if there is no purchase to restore for the signed-in account, no error message is generated and
|
159
169
|
will fail silently.
|
160
170
|
|
161
171
|
|
data/lib/ProMotion-iap.rb
CHANGED
@@ -4,9 +4,9 @@ unless defined?(Motion::Project::Config)
|
|
4
4
|
raise "ProMotion-iap must be required within a RubyMotion project."
|
5
5
|
end
|
6
6
|
|
7
|
-
Motion::Project::App.
|
7
|
+
Motion::Project::App.pre_setup do |app|
|
8
8
|
lib_dir_path = File.dirname(File.expand_path(__FILE__))
|
9
|
-
app.files
|
10
|
-
app.files
|
9
|
+
app.files.unshift File.join(lib_dir_path, "ProMotion/product.rb")
|
10
|
+
app.files.unshift File.join(lib_dir_path, "ProMotion/iap.rb")
|
11
11
|
app.frameworks << "StoreKit"
|
12
12
|
end
|
data/lib/ProMotion/iap.rb
CHANGED
@@ -2,23 +2,32 @@ module ProMotion
|
|
2
2
|
module IAP
|
3
3
|
attr_accessor :completion_handlers
|
4
4
|
|
5
|
-
def purchase_iaps(
|
5
|
+
def purchase_iaps(product_ids, options={}, &callback)
|
6
6
|
iap_setup
|
7
7
|
retrieve_iaps product_ids do |products|
|
8
8
|
products.each do |product|
|
9
9
|
self.completion_handlers["purchase-#{product[:product_id]}"] = callback
|
10
|
-
|
10
|
+
|
11
|
+
payment = SKMutablePayment.paymentWithProduct(product[:product])
|
12
|
+
payment.applicationUsername = options[:username] if options[:username]
|
13
|
+
|
11
14
|
SKPaymentQueue.defaultQueue.addPayment(payment)
|
12
15
|
end
|
13
16
|
end
|
14
17
|
end
|
15
18
|
alias purchase_iap purchase_iaps
|
16
19
|
|
17
|
-
def restore_iaps(
|
20
|
+
def restore_iaps(product_ids, options={}, &callback)
|
18
21
|
iap_setup
|
19
|
-
retrieve_iaps product_ids do |products|
|
22
|
+
retrieve_iaps Array(product_ids) do |products|
|
20
23
|
products.each do |product|
|
21
24
|
self.completion_handlers["restore-#{product[:product_id]}"] = callback
|
25
|
+
end
|
26
|
+
self.completion_handlers["restore-all"] = callback # In case of error
|
27
|
+
|
28
|
+
if options[:username]
|
29
|
+
SKPaymentQueue.defaultQueue.restoreCompletedTransactionsWithApplicationUsername(options[:username])
|
30
|
+
else
|
22
31
|
SKPaymentQueue.defaultQueue.restoreCompletedTransactions
|
23
32
|
end
|
24
33
|
end
|
@@ -47,6 +56,7 @@ module ProMotion
|
|
47
56
|
end
|
48
57
|
|
49
58
|
def iap_shutdown
|
59
|
+
@completion_handlers = nil
|
50
60
|
SKPaymentQueue.defaultQueue.removeTransactionObserver(self)
|
51
61
|
end
|
52
62
|
|
@@ -79,18 +89,41 @@ module ProMotion
|
|
79
89
|
end
|
80
90
|
|
81
91
|
def iap_callback(status, transaction, finish=false)
|
82
|
-
product_id = transaction
|
92
|
+
product_id = transaction_product_id(transaction)
|
93
|
+
|
83
94
|
if self.completion_handlers["purchase-#{product_id}"]
|
84
|
-
self.completion_handlers["purchase-#{product_id}"].call status, transaction
|
95
|
+
self.completion_handlers["purchase-#{product_id}"].call status, mapped_transaction(transaction)
|
85
96
|
self.completion_handlers["purchase-#{product_id}"] = nil if finish
|
86
97
|
end
|
98
|
+
|
87
99
|
if self.completion_handlers["restore-#{product_id}"]
|
88
|
-
self.completion_handlers["restore-#{product_id}"].call status, transaction
|
100
|
+
self.completion_handlers["restore-#{product_id}"].call status, mapped_transaction(transaction)
|
89
101
|
self.completion_handlers["restore-#{product_id}"] = nil if finish
|
90
102
|
end
|
103
|
+
|
91
104
|
SKPaymentQueue.defaultQueue.finishTransaction(transaction) if finish
|
92
105
|
end
|
93
106
|
|
107
|
+
def mapped_transaction(transaction)
|
108
|
+
if transaction.respond_to?(:payment)
|
109
|
+
{
|
110
|
+
product_id: transaction.payment.productIdentifier,
|
111
|
+
error: transaction.error,
|
112
|
+
transaction: transaction
|
113
|
+
}
|
114
|
+
else
|
115
|
+
{
|
116
|
+
product_id: nil,
|
117
|
+
error: transaction,
|
118
|
+
transaction: nil
|
119
|
+
}
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def transaction_product_id(transaction)
|
124
|
+
transaction.respond_to?(:payment) ? transaction.payment.productIdentifier : "all"
|
125
|
+
end
|
126
|
+
|
94
127
|
public
|
95
128
|
|
96
129
|
# SKProductsRequestDelegate methods
|
@@ -99,7 +132,6 @@ module ProMotion
|
|
99
132
|
unless response.invalidProductIdentifiers.empty?
|
100
133
|
red = "\e[0;31m"
|
101
134
|
color_off = "\e[0m"
|
102
|
-
puts "#{red}PM::IAP Error - invalid product identifier(s) '#{response.invalidProductIdentifiers.join("', '")}' for application identifier #{NSBundle.mainBundle.infoDictionary['CFBundleIdentifier'].inspect}#{color_off}"
|
103
135
|
end
|
104
136
|
retrieved_iaps_handler(response.products, &self.completion_handlers["retrieve_iaps"]) if self.completion_handlers["retrieve_iaps"]
|
105
137
|
@products_request = nil
|
@@ -132,6 +164,10 @@ module ProMotion
|
|
132
164
|
end
|
133
165
|
end
|
134
166
|
|
167
|
+
def paymentQueue(_, restoreCompletedTransactionsFailedWithError:error)
|
168
|
+
iap_callback(:error, error)
|
169
|
+
end
|
170
|
+
|
135
171
|
end
|
136
172
|
end
|
137
|
-
::PM = ProMotion unless defined?(
|
173
|
+
::PM = ProMotion unless defined?(PM)
|
data/lib/ProMotion/product.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ProMotion-iap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamon Holmgren
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: motion-stump
|
@@ -80,12 +80,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
80
|
version: '0'
|
81
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- - "
|
83
|
+
- - ">"
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
85
|
+
version: 1.3.1
|
86
86
|
requirements: []
|
87
87
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.4.
|
88
|
+
rubygems_version: 2.4.6
|
89
89
|
signing_key:
|
90
90
|
specification_version: 4
|
91
91
|
summary: Adds in-app purchase support to ProMotion.
|