react-native-iap 8.4.0 → 8.5.0

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 CHANGED
@@ -1,7 +1,8 @@
1
1
  # ![image](https://user-images.githubusercontent.com/27461460/75094417-20321b00-55ce-11ea-8de7-a1df42a4b7df.png)
2
2
 
3
3
  [![Version](http://img.shields.io/npm/v/react-native-iap.svg?style=flat-square)](https://npmjs.org/package/react-native-iap)
4
- <!-- [![Next](https://img.shields.io/npm/v/react-native-iap/next.svg?style=flat-square)](https://npmjs.org/package/react-native-iap) -->
4
+ [![Next Version](https://img.shields.io/npm/v/react-native-iap/next)](https://npmjs.org/package/react-native-iap)
5
+
5
6
  [![Download](http://img.shields.io/npm/dm/react-native-iap.svg?style=flat-square)](https://npmjs.org/package/react-native-iap)
6
7
  [![CI](https://github.com/dooboolab/react-native-iap/actions/workflows/ci.yml/badge.svg)](https://github.com/dooboolab/react-native-iap/actions/workflows/ci.yml)
7
8
  [![document](https://github.com/dooboolab/react-native-iap/actions/workflows/deploy-document.yml/badge.svg)](https://github.com/dooboolab/react-native-iap/actions/workflows/deploy-document.yml)
@@ -20,7 +21,11 @@ Published in [website](https://react-native-iap.dooboolab.com).
20
21
 
21
22
  ## Announcement
22
23
 
23
- - Current module is ported to [expo-iap](https://www.npmjs.com/package/expo-iap) which share the same codebase but different environment. This is currently experimental but you can use it in expo managed workflow. The source code is maintained in branch [expo](https://github.com/dooboolab/react-native-iap/tree/expo).
24
+ - Version `9.0.0` is currently in release candidate. The module migrates android sdk to [play billing library v5](https://qonversion.io/blog/google-play-billing-library-5-0) and iOS sdk to [storekit2](https://developer.apple.com/videos/play/wwdc2021/10114). Our core maintainer [andresesfm](https://github.com/andresesfm) is working hard on this. Please [fund the project](https://opencollective.com/react-native-iap) if you wish to support his effort. The fund goes to maintainers. To try the earlier version please use the `next` package.
25
+
26
+ ```
27
+ yarn add react-native-iap@next
28
+ ```
24
29
 
25
30
  - Version `8.0.0` has finally landed in Jan 28th. Since this is early release, please use it with caution 🚧. We recommend user to use `>=8.0.0` with react-native `>=0.65.1`. The `next` package is no longer updated until we organize the roadmap for `9.0.0`.
26
31
 
File without changes
@@ -0,0 +1,2 @@
1
+ #Wed Jul 27 12:39:50 KST 2022
2
+ gradle.version=6.8.3
File without changes
package/ios/RNIapIos.m CHANGED
@@ -20,6 +20,7 @@ RCT_EXTERN_METHOD(buyProduct:
20
20
  (NSString*)sku
21
21
  appAccountToken:(NSString*)appAccountToken
22
22
  andDangerouslyFinishTransactionAutomatically:(BOOL)andDangerouslyFinishTransactionAutomatically
23
+ applicationUsername:(NSString)applicationUsername
23
24
  resolve:(RCTPromiseResolveBlock)resolve
24
25
  reject:(RCTPromiseRejectBlock)reject)
25
26
  RCT_EXTERN_METHOD(buyProductWithOffer:
@@ -47,6 +47,7 @@ class RNIapIos: RCTEventEmitter, SKRequestDelegate, SKPaymentTransactionObserver
47
47
  myQueue = DispatchQueue(label: "reject")
48
48
  validProducts = [SKProduct]()
49
49
  super.init()
50
+ SKPaymentQueue.default().add(self)
50
51
  }
51
52
 
52
53
  deinit {
@@ -132,12 +133,6 @@ class RNIapIos: RCTEventEmitter, SKRequestDelegate, SKPaymentTransactionObserver
132
133
  _ resolve: @escaping RCTPromiseResolveBlock = { _ in },
133
134
  reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
134
135
  ) {
135
- SKPaymentQueue.default().remove(RNIapQueue.shared)
136
- if let queue = RNIapQueue.shared.queue, let payment = RNIapQueue.shared.payment, let product = RNIapQueue.shared.product {
137
- let val = paymentQueue(queue, shouldAddStorePayment: payment,for: product)
138
- print("Promoted product response \(val)")
139
- }
140
- SKPaymentQueue.default().add(self)
141
136
  let canMakePayments = SKPaymentQueue.canMakePayments()
142
137
  resolve(NSNumber(value: canMakePayments))
143
138
  }
@@ -178,8 +173,8 @@ class RNIapIos: RCTEventEmitter, SKRequestDelegate, SKPaymentTransactionObserver
178
173
 
179
174
  @objc public func buyProduct(
180
175
  _ sku:String,
181
- appAccountToken:String,
182
176
  andDangerouslyFinishTransactionAutomatically: Bool,
177
+ applicationUsername:String?,
183
178
  resolve: @escaping RCTPromiseResolveBlock = { _ in },
184
179
  reject: @escaping RCTPromiseRejectBlock = { _, _, _ in }
185
180
  ) {
@@ -198,7 +193,10 @@ class RNIapIos: RCTEventEmitter, SKRequestDelegate, SKPaymentTransactionObserver
198
193
  addPromise(forKey: prod.productIdentifier, resolve: resolve, reject: reject)
199
194
 
200
195
  let payment = SKMutablePayment(product: prod)
201
- payment.applicationUsername = appAccountToken
196
+
197
+ if (applicationUsername != nil) {
198
+ payment.applicationUsername = applicationUsername
199
+ }
202
200
  SKPaymentQueue.default().add(payment)
203
201
  } else{
204
202
  if hasListeners {
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "react-native-iap",
3
- "version": "8.4.0",
4
- "packageManager": "yarn@3.2.0",
3
+ "version": "8.5.0",
5
4
  "description": "React Native In App Purchase Module.",
6
5
  "main": "index.js",
7
6
  "types": "index.d.ts",
package/src/iap.d.ts CHANGED
@@ -44,13 +44,13 @@ export declare const getAvailablePurchases: () => Promise<(InAppPurchase | Subsc
44
44
  /**
45
45
  * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.
46
46
  * @param {string} sku The product's sku/ID
47
- * @param {string} [appAccountToken] The purchaser's user ID
47
+ * @param {string} [applicationUsername] The purchaser's user ID
48
48
  * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.
49
49
  * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.
50
50
  * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.
51
51
  * @returns {Promise<InAppPurchase>}
52
52
  */
53
- export declare const requestPurchase: (sku: string, appAccountToken: string, andDangerouslyFinishTransactionAutomaticallyIOS?: boolean, obfuscatedAccountIdAndroid?: string | undefined, obfuscatedProfileIdAndroid?: string | undefined) => Promise<InAppPurchase>;
53
+ export declare const requestPurchase: (sku: string, appAccountToken: string, andDangerouslyFinishTransactionAutomaticallyIOS?: boolean, obfuscatedAccountIdAndroid?: string | undefined, obfuscatedProfileIdAndroid?: string | undefined, applicationUsername?: string | undefined) => Promise<InAppPurchase>;
54
54
  /**
55
55
  * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.
56
56
  * @param {string} [sku] The product's sku/ID
package/src/iap.js CHANGED
@@ -135,13 +135,15 @@ var fillProductsAdditionalData = function (products) { return __awaiter(void 0,
135
135
  export var getProducts = function (skus) {
136
136
  return (Platform.select({
137
137
  ios: function () { return __awaiter(void 0, void 0, void 0, function () {
138
+ var products;
138
139
  return __generator(this, function (_a) {
139
140
  switch (_a.label) {
140
- case 0: return [4 /*yield*/, getIosModule()
141
- .getItems(skus)
142
- .filter(function (item) { return skus.includes(item.productId); })
143
- .filter(function (item) { return item.type === 'iap'; })];
144
- case 1: return [2 /*return*/, _a.sent()];
141
+ case 0: return [4 /*yield*/, getIosModule().getItems(skus)];
142
+ case 1:
143
+ products = _a.sent();
144
+ return [2 /*return*/, products.filter(function (item) {
145
+ return skus.includes(item.productId) && item.type === 'iap';
146
+ })];
145
147
  }
146
148
  });
147
149
  }); },
@@ -166,13 +168,15 @@ export var getProducts = function (skus) {
166
168
  export var getSubscriptions = function (skus) {
167
169
  return (Platform.select({
168
170
  ios: function () { return __awaiter(void 0, void 0, void 0, function () {
171
+ var subscriptions;
169
172
  return __generator(this, function (_a) {
170
173
  switch (_a.label) {
171
- case 0: return [4 /*yield*/, getIosModule()
172
- .getItems(skus)
173
- .filter(function (item) { return skus.includes(item.productId); })
174
- .filter(function (item) { return item.type === 'subs'; })];
175
- case 1: return [2 /*return*/, _a.sent()];
174
+ case 0: return [4 /*yield*/, getIosModule().getItems(skus)];
175
+ case 1:
176
+ subscriptions = _a.sent();
177
+ return [2 /*return*/, subscriptions.filter(function (item) {
178
+ return skus.includes(item.productId) && item.type === 'subs';
179
+ })];
176
180
  }
177
181
  });
178
182
  }); },
@@ -254,16 +258,17 @@ export var getAvailablePurchases = function () {
254
258
  /**
255
259
  * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.
256
260
  * @param {string} sku The product's sku/ID
257
- * @param {string} [appAccountToken] The purchaser's user ID
261
+ * @param {string} [applicationUsername] The purchaser's user ID
258
262
  * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.
259
263
  * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.
260
264
  * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.
261
265
  * @returns {Promise<InAppPurchase>}
262
266
  */
263
- export var requestPurchase = function (sku, appAccountToken, andDangerouslyFinishTransactionAutomaticallyIOS, obfuscatedAccountIdAndroid, obfuscatedProfileIdAndroid) {
267
+ export var requestPurchase = function (sku, appAccountToken, andDangerouslyFinishTransactionAutomaticallyIOS, obfuscatedAccountIdAndroid, obfuscatedProfileIdAndroid, applicationUsername) {
264
268
  if (andDangerouslyFinishTransactionAutomaticallyIOS === void 0) { andDangerouslyFinishTransactionAutomaticallyIOS = false; }
265
269
  if (obfuscatedAccountIdAndroid === void 0) { obfuscatedAccountIdAndroid = undefined; }
266
270
  if (obfuscatedProfileIdAndroid === void 0) { obfuscatedProfileIdAndroid = undefined; }
271
+ if (applicationUsername === void 0) { applicationUsername = undefined; }
267
272
  return (Platform.select({
268
273
  ios: function () { return __awaiter(void 0, void 0, void 0, function () {
269
274
  return __generator(this, function (_a) {
@@ -273,7 +278,7 @@ export var requestPurchase = function (sku, appAccountToken, andDangerouslyFinis
273
278
  // eslint-disable-next-line max-len
274
279
  'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.');
275
280
  }
276
- return [2 /*return*/, getIosModule().buyProduct(sku, appAccountToken, andDangerouslyFinishTransactionAutomaticallyIOS)];
281
+ return [2 /*return*/, getIosModule().buyProduct(sku, andDangerouslyFinishTransactionAutomaticallyIOS, applicationUsername)];
277
282
  });
278
283
  }); },
279
284
  android: function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -115,3 +115,11 @@ export interface Subscription extends ProductCommon {
115
115
  subscriptionPeriodAndroid?: string;
116
116
  freeTrialPeriodAndroid?: string;
117
117
  }
118
+ export interface RequestPurchase {
119
+ sku: string;
120
+ andDangerouslyFinishTransactionAutomaticallyIOS: boolean;
121
+ applicationUsername?: string;
122
+ obfuscatedAccountIdAndroid: string | undefined;
123
+ obfuscatedProfileIdAndroid: string | undefined;
124
+ selectedOfferIndex: number;
125
+ }
Binary file