react-native-iap 9.0.0-beta7 → 9.0.0-beta9
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.
- package/README.md +4 -20
- package/RNIap.podspec +33 -18
- package/android/build.gradle +137 -38
- package/android/gradle.properties +8 -0
- package/android/src/play/java/com/dooboolab/RNIap/RNIapModule.kt +55 -54
- package/android/src/play/java/com/dooboolab/RNIap/RNIapPackage.kt +0 -1
- package/android/src/testPlay/java/com/dooboolab/RNIap/{RNIapModuleTestV4.kt → RNIapModuleTest.kt} +48 -34
- package/ios/RNIapIos-Bridging-Header.h +2 -0
- package/ios/RNIapIos.m +14 -1
- package/ios/RNIapIos.swift +903 -881
- package/ios/{RNIap.xcodeproj → RNIapIos.xcodeproj}/project.pbxproj +29 -116
- package/lib/commonjs/__test__/iap.test.js +21 -0
- package/lib/commonjs/__test__/iap.test.js.map +1 -0
- package/lib/commonjs/hooks/useIAP.js +78 -0
- package/lib/commonjs/hooks/useIAP.js.map +1 -0
- package/lib/commonjs/hooks/withIAPContext.js +92 -0
- package/lib/commonjs/hooks/withIAPContext.js.map +1 -0
- package/lib/commonjs/iap.js +585 -0
- package/lib/commonjs/iap.js.map +1 -0
- package/lib/commonjs/index.js +59 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/types/amazon.js +2 -0
- package/lib/commonjs/types/amazon.js.map +1 -0
- package/lib/commonjs/types/android.js +55 -0
- package/lib/commonjs/types/android.js.map +1 -0
- package/lib/commonjs/types/apple.js +165 -0
- package/lib/commonjs/types/apple.js.map +1 -0
- package/lib/commonjs/types/index.js +59 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/module/__test__/iap.test.js +17 -0
- package/lib/module/__test__/iap.test.js.map +1 -0
- package/lib/module/hooks/useIAP.js +68 -0
- package/lib/module/hooks/useIAP.js.map +1 -0
- package/lib/module/hooks/withIAPContext.js +76 -0
- package/lib/module/hooks/withIAPContext.js.map +1 -0
- package/lib/module/iap.js +493 -0
- package/lib/module/iap.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/types/amazon.js +2 -0
- package/lib/module/types/amazon.js.map +1 -0
- package/lib/module/types/android.js +44 -0
- package/lib/module/types/android.js.map +1 -0
- package/lib/module/types/apple.js +153 -0
- package/lib/module/types/apple.js.map +1 -0
- package/lib/module/types/index.js +48 -0
- package/lib/module/types/index.js.map +1 -0
- package/{src → lib/typescript}/__test__/iap.test.d.ts +0 -0
- package/{src → lib/typescript}/hooks/useIAP.d.ts +1 -1
- package/{src → lib/typescript}/hooks/withIAPContext.d.ts +1 -1
- package/{src → lib/typescript}/iap.d.ts +13 -11
- package/{src → lib/typescript}/index.d.ts +2 -1
- package/{src → lib/typescript}/types/amazon.d.ts +0 -0
- package/{src → lib/typescript}/types/android.d.ts +0 -0
- package/{src → lib/typescript}/types/apple.d.ts +0 -0
- package/{src → lib/typescript}/types/index.d.ts +23 -4
- package/package.json +84 -57
- package/src/__test__/iap.test.ts +20 -0
- package/src/hooks/useIAP.ts +130 -0
- package/src/hooks/withIAPContext.tsx +160 -0
- package/src/iap.ts +699 -0
- package/src/{index.js → index.ts} +4 -1
- package/src/types/amazon.ts +23 -0
- package/src/types/android.ts +51 -0
- package/src/types/apple.ts +467 -0
- package/src/types/index.ts +209 -0
- package/.editorconfig +0 -10
- package/.flowconfig +0 -11
- package/.monolinterrc +0 -3
- package/.prettierignore +0 -6
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
- package/android/gradlew +0 -160
- package/android/gradlew.bat +0 -90
- package/android/src/play/java/com/dooboolab/RNIap/RNIapModuleInterface.kt +0 -44
- package/android/src/play/java/com/dooboolab/RNIap/RNIapModuleV4.kt +0 -658
- package/babel.config.js +0 -12
- package/index.d.ts +0 -3
- package/index.js +0 -3
- package/index.js.flow +0 -9
- package/ios/RNIap.xcodeproj/xcshareddata/xcschemes/RNIap.xcscheme +0 -80
- package/jest.config.js +0 -190
- package/src/__test__/iap.test.js +0 -59
- package/src/hooks/useIAP.js +0 -141
- package/src/hooks/withIAPContext.js +0 -150
- package/src/iap.js +0 -638
- package/src/types/amazon.js +0 -1
- package/src/types/android.js +0 -22
- package/src/types/apple.js +0 -165
- package/src/types/index.js +0 -40
- package/test/mocks/react-native-modules.js +0 -14
package/android/src/testPlay/java/com/dooboolab/RNIap/{RNIapModuleTestV4.kt → RNIapModuleTest.kt}
RENAMED
|
@@ -4,8 +4,11 @@ import com.android.billingclient.api.BillingClient
|
|
|
4
4
|
import com.android.billingclient.api.BillingClientStateListener
|
|
5
5
|
import com.android.billingclient.api.BillingResult
|
|
6
6
|
import com.android.billingclient.api.ConsumeResponseListener
|
|
7
|
+
import com.android.billingclient.api.ProductDetails
|
|
8
|
+
import com.android.billingclient.api.ProductDetailsResponseListener
|
|
7
9
|
import com.android.billingclient.api.Purchase
|
|
8
10
|
import com.android.billingclient.api.PurchasesResponseListener
|
|
11
|
+
import com.android.billingclient.api.QueryPurchasesParams
|
|
9
12
|
import com.android.billingclient.api.SkuDetailsResponseListener
|
|
10
13
|
import com.facebook.react.bridge.Arguments
|
|
11
14
|
import com.facebook.react.bridge.Promise
|
|
@@ -30,7 +33,7 @@ import org.junit.Assert.assertTrue
|
|
|
30
33
|
import org.junit.Before
|
|
31
34
|
import org.junit.Test
|
|
32
35
|
|
|
33
|
-
class
|
|
36
|
+
class RNIapModuleTest {
|
|
34
37
|
|
|
35
38
|
@MockK
|
|
36
39
|
lateinit var context: ReactApplicationContext
|
|
@@ -44,14 +47,14 @@ class RNIapModuleTestV4 {
|
|
|
44
47
|
@MockK
|
|
45
48
|
lateinit var availability: GoogleApiAvailability
|
|
46
49
|
|
|
47
|
-
private lateinit var module:
|
|
50
|
+
private lateinit var module: RNIapModule
|
|
48
51
|
|
|
49
52
|
@Before
|
|
50
53
|
fun setUp() {
|
|
51
54
|
MockKAnnotations.init(this, relaxUnitFun = true)
|
|
52
55
|
every { builder.setListener(any()) } returns builder
|
|
53
56
|
every { builder.build() } returns billingClient
|
|
54
|
-
module =
|
|
57
|
+
module = RNIapModule(context, builder, availability)
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
@Test
|
|
@@ -134,7 +137,7 @@ class RNIapModuleTestV4 {
|
|
|
134
137
|
every { billingClient.isReady } returns true
|
|
135
138
|
val promise = mockk<Promise>(relaxed = true)
|
|
136
139
|
val listener = slot<PurchasesResponseListener>()
|
|
137
|
-
every { billingClient.queryPurchasesAsync(any<
|
|
140
|
+
every { billingClient.queryPurchasesAsync(any<QueryPurchasesParams>(), capture(listener)) } answers {
|
|
138
141
|
listener.captured.onQueryPurchasesResponse(BillingResult.newBuilder().build(), listOf())
|
|
139
142
|
}
|
|
140
143
|
module.initConnection(mockk())
|
|
@@ -150,7 +153,7 @@ class RNIapModuleTestV4 {
|
|
|
150
153
|
every { billingClient.isReady } returns true
|
|
151
154
|
val promise = mockk<Promise>(relaxed = true)
|
|
152
155
|
val listener = slot<PurchasesResponseListener>()
|
|
153
|
-
every { billingClient.queryPurchasesAsync(any<
|
|
156
|
+
every { billingClient.queryPurchasesAsync(any<QueryPurchasesParams>(), capture(listener)) } answers {
|
|
154
157
|
listener.captured.onQueryPurchasesResponse(
|
|
155
158
|
BillingResult.newBuilder().build(),
|
|
156
159
|
listOf(
|
|
@@ -207,30 +210,39 @@ class RNIapModuleTestV4 {
|
|
|
207
210
|
every { availability.isGooglePlayServicesAvailable(any()) } returns ConnectionResult.SUCCESS
|
|
208
211
|
every { billingClient.isReady } returns true
|
|
209
212
|
val promise = mockk<Promise>(relaxed = true)
|
|
210
|
-
val listener = slot<
|
|
211
|
-
every { billingClient.
|
|
212
|
-
listener.captured.
|
|
213
|
+
val listener = slot<ProductDetailsResponseListener>()
|
|
214
|
+
every { billingClient.queryProductDetailsAsync(any(), capture(listener)) } answers {
|
|
215
|
+
listener.captured.onProductDetailsResponse(
|
|
213
216
|
BillingResult.newBuilder().build(),
|
|
214
217
|
listOf(
|
|
215
218
|
mockk {
|
|
216
|
-
every {
|
|
217
|
-
|
|
218
|
-
every {
|
|
219
|
-
every {
|
|
220
|
-
|
|
221
|
-
every {
|
|
222
|
-
every {
|
|
223
|
-
every {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
every {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
219
|
+
every { productId } returns "sku1"
|
|
220
|
+
|
|
221
|
+
every { title } returns "title2"
|
|
222
|
+
every { description } returns "My product"
|
|
223
|
+
|
|
224
|
+
every { productType } returns "sub"
|
|
225
|
+
every { name } returns "name of product"
|
|
226
|
+
every { oneTimePurchaseOfferDetails } returns mockk {
|
|
227
|
+
every { priceCurrencyCode} returns "my code"
|
|
228
|
+
every {formattedPrice} returns "$20.00"
|
|
229
|
+
every { priceAmountMicros } returns 20000
|
|
230
|
+
|
|
231
|
+
}
|
|
232
|
+
every { subscriptionOfferDetails } returns listOf( mockk {
|
|
233
|
+
every { offerToken } returns "sToken"
|
|
234
|
+
every { offerTags } returns listOf("offerTag1","offerTag2")
|
|
235
|
+
every { pricingPhases} returns mockk{
|
|
236
|
+
every { pricingPhaseList } returns listOf(mockk{
|
|
237
|
+
every { formattedPrice } returns "$13.0"
|
|
238
|
+
every { priceCurrencyCode } returns "USD"
|
|
239
|
+
every { billingPeriod } returns "1 week"
|
|
240
|
+
every { billingCycleCount } returns 1
|
|
241
|
+
every { priceAmountMicros } returns 13000
|
|
242
|
+
every { recurrenceMode } returns 2
|
|
243
|
+
})
|
|
244
|
+
}
|
|
245
|
+
})
|
|
234
246
|
}
|
|
235
247
|
)
|
|
236
248
|
)
|
|
@@ -242,19 +254,21 @@ class RNIapModuleTestV4 {
|
|
|
242
254
|
}
|
|
243
255
|
mockkStatic(Arguments::class)
|
|
244
256
|
|
|
245
|
-
val itemsMap = mockk<WritableMap>()
|
|
246
|
-
val itemsArr = mockk<WritableArray>()
|
|
247
|
-
every { Arguments.createMap() } returns itemsMap
|
|
248
|
-
every { Arguments.createArray() } returns itemsArr
|
|
249
|
-
every { itemsMap.putString(any(), any()) } just runs
|
|
257
|
+
val itemsMap = mockk<WritableMap>(relaxed = true)
|
|
250
258
|
var itemsSize = 0
|
|
251
|
-
|
|
252
|
-
|
|
259
|
+
val itemsArr = mockk<WritableArray>{
|
|
260
|
+
every { pushString(any()) } just runs
|
|
261
|
+
every { pushMap(any()) } answers {
|
|
262
|
+
itemsSize++
|
|
263
|
+
}
|
|
253
264
|
}
|
|
265
|
+
every { Arguments.createMap() } returns itemsMap
|
|
266
|
+
every { Arguments.createArray() } returns itemsArr
|
|
267
|
+
|
|
254
268
|
module.initConnection(mockk())
|
|
255
269
|
module.getItemsByType("subs", skus, promise)
|
|
256
270
|
verify { promise.resolve(any()) }
|
|
257
|
-
assertEquals(
|
|
271
|
+
assertEquals(3, itemsSize)
|
|
258
272
|
}
|
|
259
273
|
|
|
260
274
|
@Test
|
package/ios/RNIapIos.m
CHANGED
|
@@ -3,23 +3,28 @@
|
|
|
3
3
|
#import <React/RCTBridgeModule.h>
|
|
4
4
|
|
|
5
5
|
@interface RCT_EXTERN_MODULE (RNIapIos, NSObject)
|
|
6
|
+
|
|
6
7
|
RCT_EXTERN_METHOD(initConnection:
|
|
7
8
|
(RCTPromiseResolveBlock)resolve
|
|
8
9
|
reject:(RCTPromiseRejectBlock)reject)
|
|
10
|
+
|
|
9
11
|
RCT_EXTERN_METHOD(endConnection:
|
|
10
12
|
(RCTPromiseResolveBlock)resolve
|
|
11
13
|
reject:(RCTPromiseRejectBlock)reject)
|
|
14
|
+
|
|
12
15
|
RCT_EXTERN_METHOD(getItems:
|
|
13
16
|
(NSArray*)skus
|
|
14
17
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
15
18
|
reject:(RCTPromiseRejectBlock)reject)
|
|
19
|
+
|
|
16
20
|
RCT_EXTERN_METHOD(getAvailableItems:
|
|
17
21
|
(RCTPromiseResolveBlock)resolve
|
|
18
22
|
reject:(RCTPromiseRejectBlock)reject)
|
|
23
|
+
|
|
19
24
|
RCT_EXTERN_METHOD(buyProduct:
|
|
20
25
|
(NSString*)sku
|
|
21
26
|
andDangerouslyFinishTransactionAutomatically:(BOOL)andDangerouslyFinishTransactionAutomatically
|
|
22
|
-
applicationUsername:(NSString)applicationUsername
|
|
27
|
+
applicationUsername:(NSString*)applicationUsername
|
|
23
28
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
24
29
|
reject:(RCTPromiseRejectBlock)reject)
|
|
25
30
|
RCT_EXTERN_METHOD(buyProductWithOffer:
|
|
@@ -33,17 +38,22 @@ RCT_EXTERN_METHOD(buyProductWithQuantityIOS:
|
|
|
33
38
|
quantity:(NSInteger)quantity
|
|
34
39
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
35
40
|
reject:(RCTPromiseRejectBlock)reject)
|
|
41
|
+
|
|
36
42
|
RCT_EXTERN_METHOD(clearTransaction:
|
|
37
43
|
(RCTPromiseResolveBlock)resolve
|
|
38
44
|
reject:(RCTPromiseRejectBlock)reject)
|
|
45
|
+
|
|
39
46
|
RCT_EXTERN_METHOD(clearProducts:
|
|
40
47
|
(RCTPromiseResolveBlock)resolve
|
|
41
48
|
reject:(RCTPromiseRejectBlock)reject)
|
|
49
|
+
|
|
42
50
|
RCT_EXTERN_METHOD(promotedProduct:
|
|
43
51
|
(RCTPromiseResolveBlock)resolve
|
|
44
52
|
reject:(RCTPromiseRejectBlock)reject)
|
|
53
|
+
|
|
45
54
|
RCT_EXTERN_METHOD(buyPromotedProduct:(RCTPromiseResolveBlock)resolve
|
|
46
55
|
reject:(RCTPromiseRejectBlock)reject)
|
|
56
|
+
|
|
47
57
|
RCT_EXTERN_METHOD(requestReceipt:
|
|
48
58
|
(BOOL)refresh
|
|
49
59
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
@@ -52,10 +62,13 @@ RCT_EXTERN_METHOD(finishTransaction:
|
|
|
52
62
|
(NSString*)transactionIdentifier
|
|
53
63
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
54
64
|
reject:(RCTPromiseRejectBlock)reject)
|
|
65
|
+
|
|
55
66
|
RCT_EXTERN_METHOD(getPendingTransactions:
|
|
56
67
|
(RCTPromiseResolveBlock)resolve
|
|
57
68
|
reject:(RCTPromiseRejectBlock)reject)
|
|
69
|
+
|
|
58
70
|
RCT_EXTERN_METHOD(presentCodeRedemptionSheet:
|
|
59
71
|
(RCTPromiseResolveBlock)resolve
|
|
60
72
|
reject:(RCTPromiseRejectBlock)reject)
|
|
73
|
+
|
|
61
74
|
@end
|