react-native-iap 11.0.0-rc.5 → 11.0.0-rc.6

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.
Files changed (2) hide show
  1. package/ios/RNIapIosSk2.swift +374 -29
  2. package/package.json +1 -1
@@ -2,18 +2,378 @@ import Foundation
2
2
  import React
3
3
  import StoreKit
4
4
 
5
- @available(iOS 15.0, *)
5
+ protocol Sk2Delegate {
6
+ func disable(
7
+ _ resolve: @escaping RCTPromiseResolveBlock,
8
+ reject: @escaping RCTPromiseRejectBlock
9
+ )
10
+
11
+ func initConnection(
12
+ _ resolve: @escaping RCTPromiseResolveBlock ,
13
+ reject: @escaping RCTPromiseRejectBlock
14
+ )
15
+
16
+ func endConnection(
17
+ _ resolve: @escaping RCTPromiseResolveBlock,
18
+ reject: @escaping RCTPromiseRejectBlock
19
+ )
20
+
21
+ func getItems(
22
+ _ skus: [String],
23
+ resolve: @escaping RCTPromiseResolveBlock,
24
+ reject: @escaping RCTPromiseRejectBlock
25
+ )
26
+
27
+ func getAvailableItems(
28
+ _ alsoPublishToEventListener: Bool,
29
+ resolve: @escaping RCTPromiseResolveBlock,
30
+ reject: @escaping RCTPromiseRejectBlock
31
+ )
32
+
33
+ func buyProduct(
34
+ _ sku: String,
35
+ andDangerouslyFinishTransactionAutomatically: Bool,
36
+ appAccountToken: String?,
37
+ quantity: Int,
38
+ withOffer: [String: String],
39
+ resolve: @escaping RCTPromiseResolveBlock,
40
+ reject: @escaping RCTPromiseRejectBlock
41
+ )
42
+
43
+ func isEligibleForIntroOffer(
44
+ _ groupID: String,
45
+ resolve: @escaping RCTPromiseResolveBlock ,
46
+ reject: @escaping RCTPromiseRejectBlock
47
+ )
48
+
49
+ func subscriptionStatus(
50
+ _ sku: String,
51
+ resolve: @escaping RCTPromiseResolveBlock,
52
+ reject: @escaping RCTPromiseRejectBlock
53
+ )
54
+
55
+ func currentEntitlement(
56
+ _ sku: String,
57
+ resolve: @escaping RCTPromiseResolveBlock,
58
+ reject: @escaping RCTPromiseRejectBlock
59
+ )
60
+
61
+ func latestTransaction(
62
+ _ sku: String,
63
+ resolve: @escaping RCTPromiseResolveBlock,
64
+ reject: @escaping RCTPromiseRejectBlock
65
+ )
66
+
67
+ func finishTransaction(
68
+ _ transactionIdentifier: String,
69
+ resolve: @escaping RCTPromiseResolveBlock ,
70
+ reject: @escaping RCTPromiseRejectBlock
71
+ )
72
+
73
+ func pendingTransactions (
74
+ _ resolve: @escaping RCTPromiseResolveBlock,
75
+ reject: @escaping RCTPromiseRejectBlock
76
+ )
77
+
78
+ func sync(
79
+ _ resolve: @escaping RCTPromiseResolveBlock,
80
+ reject: @escaping RCTPromiseRejectBlock
81
+ )
82
+
83
+ func presentCodeRedemptionSheet(
84
+ _ resolve: @escaping RCTPromiseResolveBlock,
85
+ reject: @escaping RCTPromiseRejectBlock
86
+ )
87
+
88
+ func startObserving()
89
+ func stopObserving()
90
+ }
91
+
92
+ class DummySk2: Sk2Delegate {
93
+ let errorCode = IapErrors.E_DEVELOPER_ERROR.rawValue
94
+ let errorMessage = "Method only available on iOS 15 and up"
95
+
96
+ func disable(
97
+ _ resolve: @escaping RCTPromiseResolveBlock,
98
+ reject: @escaping RCTPromiseRejectBlock
99
+ ) {
100
+ reject(errorCode, errorMessage, nil)
101
+ }
102
+
103
+ func initConnection(
104
+ _ resolve: @escaping RCTPromiseResolveBlock ,
105
+ reject: @escaping RCTPromiseRejectBlock
106
+ ) {
107
+ reject(errorCode, errorMessage, nil)
108
+ }
109
+
110
+ func endConnection(
111
+ _ resolve: @escaping RCTPromiseResolveBlock,
112
+ reject: @escaping RCTPromiseRejectBlock
113
+ ) {
114
+ reject(errorCode, errorMessage, nil)
115
+ }
116
+
117
+ func getItems(
118
+ _ skus: [String],
119
+ resolve: @escaping RCTPromiseResolveBlock,
120
+ reject: @escaping RCTPromiseRejectBlock
121
+ ) {
122
+ reject(errorCode, errorMessage, nil)
123
+ }
124
+
125
+ func getAvailableItems(
126
+ _ alsoPublishToEventListener: Bool,
127
+ resolve: @escaping RCTPromiseResolveBlock,
128
+ reject: @escaping RCTPromiseRejectBlock
129
+ ) {
130
+ reject(errorCode, errorMessage, nil)
131
+ }
132
+
133
+ func buyProduct(
134
+ _ sku: String,
135
+ andDangerouslyFinishTransactionAutomatically: Bool,
136
+ appAccountToken: String?,
137
+ quantity: Int,
138
+ withOffer: [String: String],
139
+ resolve: @escaping RCTPromiseResolveBlock,
140
+ reject: @escaping RCTPromiseRejectBlock
141
+ ) {
142
+ reject(errorCode, errorMessage, nil)
143
+ }
144
+
145
+ func isEligibleForIntroOffer(
146
+ _ groupID: String,
147
+ resolve: @escaping RCTPromiseResolveBlock ,
148
+ reject: @escaping RCTPromiseRejectBlock
149
+ ) {
150
+ reject(errorCode, errorMessage, nil)
151
+ }
152
+
153
+ func subscriptionStatus(
154
+ _ sku: String,
155
+ resolve: @escaping RCTPromiseResolveBlock,
156
+ reject: @escaping RCTPromiseRejectBlock
157
+ ) {
158
+ reject(errorCode, errorMessage, nil)
159
+ }
160
+
161
+ func currentEntitlement(
162
+ _ sku: String,
163
+ resolve: @escaping RCTPromiseResolveBlock,
164
+ reject: @escaping RCTPromiseRejectBlock
165
+ ) {
166
+ reject(errorCode, errorMessage, nil)
167
+ }
168
+
169
+ func latestTransaction(
170
+ _ sku: String,
171
+ resolve: @escaping RCTPromiseResolveBlock,
172
+ reject: @escaping RCTPromiseRejectBlock
173
+ ) {
174
+ reject(errorCode, errorMessage, nil)
175
+ }
176
+
177
+ func finishTransaction(
178
+ _ transactionIdentifier: String,
179
+ resolve: @escaping RCTPromiseResolveBlock ,
180
+ reject: @escaping RCTPromiseRejectBlock
181
+ ) {
182
+ reject(errorCode, errorMessage, nil)
183
+ }
184
+
185
+ func pendingTransactions (
186
+ _ resolve: @escaping RCTPromiseResolveBlock,
187
+ reject: @escaping RCTPromiseRejectBlock
188
+ ) {
189
+ reject(errorCode, errorMessage, nil)
190
+ }
191
+
192
+ func sync(
193
+ _ resolve: @escaping RCTPromiseResolveBlock,
194
+ reject: @escaping RCTPromiseRejectBlock
195
+ ) {
196
+ reject(errorCode, errorMessage, nil)
197
+ }
198
+
199
+ func presentCodeRedemptionSheet(
200
+ _ resolve: @escaping RCTPromiseResolveBlock,
201
+ reject: @escaping RCTPromiseRejectBlock
202
+ ) {
203
+ reject(errorCode, errorMessage, nil)
204
+ }
205
+
206
+ func startObserving() {
207
+ }
208
+
209
+ func stopObserving() {
210
+ }
211
+ }
212
+
6
213
  @objc(RNIapIosSk2)
7
- class RNIapIosSk2: RCTEventEmitter {
214
+ class RNIapIosSk2: RCTEventEmitter, Sk2Delegate {
215
+ private var delegate: Sk2Delegate = DummySk2()
216
+
217
+ override init() {
218
+ super.init()
219
+ if #available(iOS 15.0, *) {
220
+ delegate = RNIapIosSk2iOS15(sendEvent: self.sendEvent)
221
+ }
222
+ }
223
+
224
+ @objc public func disable(
225
+ _ resolve: @escaping RCTPromiseResolveBlock = { _ in },
226
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
227
+ ) {
228
+ delegate.disable(resolve, reject: reject)
229
+ }
230
+
231
+ override class func requiresMainQueueSetup() -> Bool {
232
+ return true
233
+ }
234
+
235
+ override func startObserving() {
236
+ delegate.startObserving()
237
+ }
238
+
239
+ override func stopObserving() {
240
+ delegate.stopObserving()
241
+ }
242
+
243
+ override func addListener(_ eventName: String?) {
244
+ super.addListener(eventName)
245
+ }
246
+
247
+ /**
248
+ "iap-transaction-updated" is unique to Sk2.
249
+ "iap-promoted-product" is only avaiable on Sk1
250
+ "purchase-updated", "purchase-error" are for backward compatibility
251
+ */
252
+ override func supportedEvents() -> [String]? {
253
+ return [ "purchase-updated", "purchase-error", "iap-transaction-updated"]
254
+ }
255
+
256
+ @objc public func initConnection(
257
+ _ resolve: @escaping RCTPromiseResolveBlock = { _ in },
258
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
259
+ ) {
260
+ delegate.initConnection(resolve, reject: reject)
261
+ }
262
+ @objc public func endConnection(
263
+ _ resolve: @escaping RCTPromiseResolveBlock = { _ in },
264
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
265
+ ) {
266
+ delegate.endConnection(resolve, reject: reject)
267
+ }
268
+
269
+ @objc public func getItems(
270
+ _ skus: [String],
271
+ resolve: @escaping RCTPromiseResolveBlock = { _ in },
272
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
273
+ ) {
274
+ delegate.getItems(skus, resolve: resolve, reject: reject)
275
+ }
276
+
277
+ @objc public func getAvailableItems(
278
+ _ alsoPublishToEventListener: Bool,
279
+ resolve: @escaping RCTPromiseResolveBlock = { _ in },
280
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
281
+ ) {
282
+ delegate.getAvailableItems(alsoPublishToEventListener, resolve: resolve, reject: reject)
283
+ }
284
+
285
+ @objc public func buyProduct(
286
+ _ sku: String,
287
+ andDangerouslyFinishTransactionAutomatically: Bool,
288
+ appAccountToken: String?,
289
+ quantity: Int,
290
+ withOffer: [String: String],
291
+ resolve: @escaping RCTPromiseResolveBlock = { _ in },
292
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
293
+ ) {
294
+ delegate.buyProduct(
295
+ sku,
296
+ andDangerouslyFinishTransactionAutomatically: andDangerouslyFinishTransactionAutomatically,
297
+ appAccountToken: appAccountToken,
298
+ quantity: quantity,
299
+ withOffer: withOffer,
300
+ resolve: resolve,
301
+ reject: reject)
302
+ }
303
+
304
+ @objc public func isEligibleForIntroOffer(
305
+ _ groupID: String,
306
+ resolve: @escaping RCTPromiseResolveBlock = { _ in },
307
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
308
+ ) {
309
+ delegate.isEligibleForIntroOffer(groupID, resolve: resolve, reject: reject)
310
+ }
311
+
312
+ @objc public func subscriptionStatus(
313
+ _ sku: String,
314
+ resolve: @escaping RCTPromiseResolveBlock = { _ in },
315
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
316
+ ) {
317
+ delegate.subscriptionStatus(sku, resolve: resolve, reject: reject)
318
+ }
319
+
320
+ @objc public func currentEntitlement(
321
+ _ sku: String,
322
+ resolve: @escaping RCTPromiseResolveBlock = { _ in },
323
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
324
+ ) {
325
+ delegate.currentEntitlement(sku, resolve: resolve, reject: reject)
326
+ }
327
+
328
+ @objc public func latestTransaction(
329
+ _ sku: String,
330
+ resolve: @escaping RCTPromiseResolveBlock = { _ in },
331
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
332
+ ) {
333
+ delegate.latestTransaction(sku, resolve: resolve, reject: reject)
334
+ }
335
+
336
+ @objc public func finishTransaction(
337
+ _ transactionIdentifier: String,
338
+ resolve: @escaping RCTPromiseResolveBlock = { _ in },
339
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
340
+ ) {
341
+ delegate.finishTransaction(transactionIdentifier, resolve: resolve, reject: reject)
342
+ }
343
+
344
+ @objc public func pendingTransactions (
345
+ _ resolve: @escaping RCTPromiseResolveBlock = { _ in },
346
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
347
+ ) {
348
+ delegate.pendingTransactions(resolve, reject: reject)
349
+ }
350
+
351
+ @objc public func sync(
352
+ _ resolve: @escaping RCTPromiseResolveBlock = { _ in},
353
+ reject: @escaping RCTPromiseRejectBlock = {_, _, _ in}
354
+ ) {
355
+ delegate.sync(resolve, reject: reject)
356
+ }
357
+
358
+ @objc public func presentCodeRedemptionSheet(
359
+ _ resolve: @escaping RCTPromiseResolveBlock = { _ in },
360
+ reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
361
+ ) {
362
+ delegate.presentCodeRedemptionSheet(resolve, reject: reject)
363
+ }
364
+ }
365
+
366
+ @available(iOS 15.0, *)
367
+ class RNIapIosSk2iOS15: Sk2Delegate {
8
368
  private var hasListeners = false
9
369
  private var products: [String: Product]
10
370
  private var transactions: [String: Transaction]
11
371
  private var updateListenerTask: Task<Void, Error>?
12
-
13
- override init() {
372
+ fileprivate var sendEvent: ((String?, Any?) -> Void)?
373
+ init(sendEvent: ((String?, Any?) -> Void)? ) {
374
+ self.sendEvent = sendEvent
14
375
  products = [String: Product]()
15
376
  transactions = [String: Transaction]()
16
- super.init()
17
377
  addTransactionObserver()
18
378
  }
19
379
 
@@ -29,9 +389,6 @@ class RNIapIosSk2: RCTEventEmitter {
29
389
  resolve(nil)
30
390
  }
31
391
 
32
- override class func requiresMainQueueSetup() -> Bool {
33
- return true
34
- }
35
392
  func addTransactionObserver() {
36
393
  if updateListenerTask == nil {
37
394
  updateListenerTask = listenForTransactions()
@@ -59,8 +416,8 @@ class RNIapIosSk2: RCTEventEmitter {
59
416
  // await self.updateCustomerProductStatus()
60
417
 
61
418
  if self.hasListeners {
62
- self.sendEvent(withName: "purchase-updated", body: serialize(transaction))
63
- self.sendEvent(withName: "iap-transaction-updated", body: ["transaction": serialize(transaction)])
419
+ self.sendEvent?("purchase-updated", serialize(transaction))
420
+ self.sendEvent?("iap-transaction-updated", ["transaction": serialize(transaction)])
64
421
  }
65
422
  // Always finish a transaction.
66
423
  // await transaction.finish()
@@ -77,33 +434,21 @@ class RNIapIosSk2: RCTEventEmitter {
77
434
  "message": error.localizedDescription
78
435
  ]
79
436
 
80
- self.sendEvent(withName: "purchase-error", body: err)
81
- self.sendEvent(withName: "iap-transaction-updated", body: ["error": err])
437
+ self.sendEvent?("purchase-error", err)
438
+ self.sendEvent?("iap-transaction-updated", ["error": err])
82
439
  }
83
440
  }
84
441
  }
85
442
  }
86
443
  }
87
444
 
88
- override func startObserving() {
445
+ func startObserving() {
89
446
  hasListeners = true
90
447
  }
91
448
 
92
- override func stopObserving() {
449
+ func stopObserving() {
93
450
  hasListeners = false
94
451
  }
95
- override func addListener(_ eventName: String?) {
96
- super.addListener(eventName)
97
- }
98
-
99
- /**
100
- "iap-transaction-updated" is unique to Sk2.
101
- "iap-promoted-product" is only avaiable on Sk1
102
- "purchase-updated", "purchase-error" are for backward compatibility
103
- */
104
- override func supportedEvents() -> [String]? {
105
- return [ "purchase-updated", "purchase-error", "iap-transaction-updated"]
106
- }
107
452
 
108
453
  @objc public func initConnection(
109
454
  _ resolve: @escaping RCTPromiseResolveBlock = { _ in },
@@ -154,12 +499,12 @@ class RNIapIosSk2: RCTEventEmitter {
154
499
  func addPurchase(transaction: Transaction, product: Product) {
155
500
  purchasedItems.append( transaction)
156
501
  if alsoPublishToEventListener {
157
- sendEvent(withName: "purchase-update", body: serialize(transaction))
502
+ self.sendEvent?("purchase-update", serialize(transaction))
158
503
  }
159
504
  }
160
505
  func addError( error: Error, errorDict: [String: String]) {
161
506
  if alsoPublishToEventListener {
162
- sendEvent(withName: "purchase-error", body: errorDict)
507
+ self.sendEvent?("purchase-error", errorDict)
163
508
  }
164
509
  }
165
510
  // Iterate through all of the user's purchased products.
@@ -277,7 +622,7 @@ class RNIapIosSk2: RCTEventEmitter {
277
622
  resolve(nil)
278
623
  } else {
279
624
  self.addTransaction(transaction)
280
- sendEvent(withName: "purchase-updated", body: serialize(transaction))
625
+ self.sendEvent?("purchase-updated", serialize(transaction))
281
626
  resolve(serialize(transaction))
282
627
  }
283
628
  return
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-iap",
3
- "version": "11.0.0-rc.5",
3
+ "version": "11.0.0-rc.6",
4
4
  "description": "React Native In App Purchase Module.",
5
5
  "repository": "https://github.com/dooboolab/react-native-iap",
6
6
  "author": "dooboolab <support@dooboolab.com> (https://github.com/dooboolab)",