Skip to content

Commit a3d1f06

Browse files
RCGitBotRevenueCat CIjoshdholtz
authored
[AUTOMATIC BUMP] Updates purchases-hybrid-common to 10.1.0 (#938)
**This is an automatic bump.** Updates purchases-hybrid-common to 10.1.0 - Includes #925 --------- Co-authored-by: RevenueCat CI <[email protected]> Co-authored-by: Josh Holtz <[email protected]>
1 parent 31e77d1 commit a3d1f06

File tree

19 files changed

+1001
-557
lines changed

19 files changed

+1001
-557
lines changed

RNPurchases.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ Pod::Spec.new do |spec|
2525
]
2626

2727
spec.dependency "React-Core"
28-
spec.dependency "PurchasesHybridCommon", '9.9.0'
28+
spec.dependency "PurchasesHybridCommon", '10.1.0'
2929
spec.swift_version = '5.7'
3030
end

__tests__/index.test.js

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,24 @@ describe("Purchases", () => {
146146
expect(offerings).toEqual(offeringsStub);
147147
})
148148

149+
it("get current offerings for placement works", async () => {
150+
NativeModules.RNPurchases.getCurrentOfferingForPlacement.mockResolvedValueOnce(currentOfferingForPlacementStub);
151+
152+
const offering = await Purchases.getCurrentOfferingForPlacement("onboarding")
153+
154+
expect(NativeModules.RNPurchases.getCurrentOfferingForPlacement).toBeCalledWith("onboarding")
155+
expect(offering).toEqual(currentOfferingForPlacementStub);
156+
})
157+
158+
it("sync attributes and offerings if needed works", async () => {
159+
NativeModules.RNPurchases.syncAttributesAndOfferingsIfNeeded.mockResolvedValueOnce(offeringsStub);
160+
161+
const offerings = await Purchases.syncAttributesAndOfferingsIfNeeded()
162+
163+
expect(NativeModules.RNPurchases.syncAttributesAndOfferingsIfNeeded).toBeCalledTimes(1);
164+
expect(offerings).toEqual(offeringsStub);
165+
})
166+
149167
it("getProducts works and gets subs by default", async () => {
150168
NativeModules.RNPurchases.getProductInfo.mockResolvedValueOnce(productsStub);
151169

@@ -215,14 +233,14 @@ describe("Purchases", () => {
215233
currency_code: "USD",
216234
introPrice: null
217235
},
218-
offeringIdentifier: "offering",
236+
presentedOfferingContext: {offeringIdentifier: "offering"},
219237
},
220238
{
221239
oldSKU: "viejo",
222240
prorationMode: Purchases.PRORATION_MODE.IMMEDIATE_AND_CHARGE_FULL_PRICE
223241
},
224242
);
225-
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledWith("$rc_onemonth", "offering", {
243+
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledWith("$rc_onemonth",{offeringIdentifier: "offering"}, {
226244
oldSKU: "viejo",
227245
prorationMode: Purchases.PRORATION_MODE.IMMEDIATE_AND_CHARGE_FULL_PRICE
228246
}, null, null);
@@ -237,12 +255,12 @@ describe("Purchases", () => {
237255

238256
const aProduct = {
239257
...productStub,
240-
presentedOfferingIdentifier: "the-offerings"
258+
presentedOfferingContext: {offeringIdentifier: "the-offerings"}
241259
}
242260

243261
await Purchases.purchaseStoreProduct(aProduct)
244262

245-
expect(NativeModules.RNPurchases.purchaseProduct).toBeCalledWith(aProduct.identifier, undefined, Purchases.PRODUCT_CATEGORY.SUBSCRIPTION, null, null, "the-offerings");
263+
expect(NativeModules.RNPurchases.purchaseProduct).toBeCalledWith(aProduct.identifier, undefined, Purchases.PRODUCT_CATEGORY.SUBSCRIPTION, null, null, {offeringIdentifier: "the-offerings"});
246264
expect(NativeModules.RNPurchases.purchaseProduct).toBeCalledTimes(1);
247265
});
248266

@@ -267,10 +285,10 @@ describe("Purchases", () => {
267285
currencyCode: "USD",
268286
introPrice: null
269287
},
270-
offeringIdentifier: "offering",
288+
presentedOfferingContext: {offeringIdentifier: "offering"},
271289
});
272290

273-
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledWith("$rc_onemonth", "offering", undefined, null, null);
291+
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledWith("$rc_onemonth", {offeringIdentifier: "offering"}, undefined, null, null);
274292
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledTimes(1);
275293

276294
await Purchases.purchasePackage(
@@ -286,15 +304,15 @@ describe("Purchases", () => {
286304
currency_code: "USD",
287305
introPrice: null
288306
},
289-
offeringIdentifier: "offering",
307+
presentedOfferingContext: {offeringIdentifier: "offering"},
290308
},
291309
{
292310
oldSKU: "viejo",
293311
prorationMode: Purchases.PRORATION_MODE.IMMEDIATE_AND_CHARGE_FULL_PRICE
294312
},
295313
);
296314

297-
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledWith("$rc_onemonth", "offering", {
315+
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledWith("$rc_onemonth", {offeringIdentifier: "offering"}, {
298316
oldSKU: "viejo",
299317
prorationMode: Purchases.PRORATION_MODE.IMMEDIATE_AND_CHARGE_FULL_PRICE
300318
}, null, null);
@@ -312,14 +330,14 @@ describe("Purchases", () => {
312330
currency_code: "USD",
313331
introPrice: null
314332
},
315-
offeringIdentifier: "offering",
333+
presentedOfferingContext: {offeringIdentifier: "offering"},
316334
},
317335
{
318336
oldProductIdentifier: "viejo",
319337
prorationMode: Purchases.PRORATION_MODE.IMMEDIATE_AND_CHARGE_FULL_PRICE
320338
},
321339
);
322-
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledWith("$rc_onemonth", "offering", {
340+
expect(NativeModules.RNPurchases.purchasePackage).toBeCalledWith("$rc_onemonth", {offeringIdentifier: "offering"}, {
323341
oldProductIdentifier: "viejo",
324342
prorationMode: Purchases.PRORATION_MODE.IMMEDIATE_AND_CHARGE_FULL_PRICE
325343
}, null, null);
@@ -367,7 +385,7 @@ describe("Purchases", () => {
367385
presentedOfferingIdentifier: null
368386
});
369387

370-
expect(NativeModules.RNPurchases.purchaseSubscriptionOption).toBeCalledWith("gold", "monthly", undefined, null, null, null);
388+
expect(NativeModules.RNPurchases.purchaseSubscriptionOption).toBeCalledWith("gold", "monthly", undefined, null, null, undefined);
371389
expect(NativeModules.RNPurchases.purchaseSubscriptionOption).toBeCalledTimes(1);
372390

373391
await Purchases.purchaseSubscriptionOption(
@@ -383,7 +401,7 @@ describe("Purchases", () => {
383401
fullPricePhase: phase,
384402
freePhase: null,
385403
introPhase: null,
386-
presentedOfferingIdentifier: "offering"
404+
presentedOfferingContext: {offeringIdentifier: "offering"},
387405
},
388406
{
389407
oldProductIdentifier: "viejo",
@@ -395,7 +413,7 @@ describe("Purchases", () => {
395413
expect(NativeModules.RNPurchases.purchaseSubscriptionOption).toBeCalledWith("gold", "monthly", {
396414
oldProductIdentifier: "viejo",
397415
prorationMode: Purchases.PRORATION_MODE.IMMEDIATE_AND_CHARGE_FULL_PRICE
398-
}, null, {isPersonalizedPrice: true}, "offering");
416+
}, null, {isPersonalizedPrice: true}, {offeringIdentifier: "offering"});
399417
expect(NativeModules.RNPurchases.purchaseSubscriptionOption).toBeCalledTimes(2);
400418
});
401419

@@ -794,7 +812,7 @@ describe("Purchases", () => {
794812

795813
await Purchases.purchaseDiscountedProduct(aProduct, promotionalOfferStub)
796814

797-
expect(NativeModules.RNPurchases.purchaseProduct).toBeCalledWith(aProduct.identifier, null, null, promotionalOfferStub.timestamp.toString(), null, null);
815+
expect(NativeModules.RNPurchases.purchaseProduct).toBeCalledWith(aProduct.identifier, null, null, promotionalOfferStub.timestamp.toString(), null, undefined);
798816
expect(NativeModules.RNPurchases.purchaseProduct).toBeCalledTimes(1);
799817
});
800818

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,6 @@ def kotlin_version = getExtOrDefault('kotlinVersion')
121121
dependencies {
122122
//noinspection GradleDynamicVersion
123123
api 'com.facebook.react:react-native:+'
124-
implementation 'com.revenuecat.purchases:purchases-hybrid-common:9.9.0'
124+
implementation 'com.revenuecat.purchases:purchases-hybrid-common:10.1.0'
125125
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
126126
}

android/src/main/java/com/revenuecat/purchases/react/RNPurchasesModule.java

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.revenuecat.purchases.common.PlatformInfo;
2424
import com.revenuecat.purchases.hybridcommon.CommonKt;
2525
import com.revenuecat.purchases.hybridcommon.ErrorContainer;
26+
import com.revenuecat.purchases.hybridcommon.OnNullableResult;
2627
import com.revenuecat.purchases.hybridcommon.OnResult;
2728
import com.revenuecat.purchases.hybridcommon.OnResultAny;
2829
import com.revenuecat.purchases.hybridcommon.OnResultList;
@@ -114,6 +115,16 @@ public void getOfferings(final Promise promise) {
114115
CommonKt.getOfferings(getOnResult(promise));
115116
}
116117

118+
@ReactMethod
119+
public void getCurrentOfferingForPlacement(String placementIdentifier, final Promise promise) {
120+
CommonKt.getCurrentOfferingForPlacement(placementIdentifier, getOnNullableResult(promise));
121+
}
122+
123+
@ReactMethod
124+
public void syncAttributesAndOfferingsIfNeeded(final Promise promise) {
125+
CommonKt.syncAttributesAndOfferingsIfNeeded(getOnResult(promise));
126+
}
127+
117128
@ReactMethod
118129
public void getProductInfo(ReadableArray productIDs, String type, final Promise promise) {
119130
ArrayList<String> productIDList = new ArrayList<>();
@@ -144,12 +155,17 @@ public void purchaseProduct(final String productIdentifier,
144155
final String type,
145156
@Nullable final String discountTimestamp,
146157
@Nullable final ReadableMap googleInfo,
147-
@Nullable final String presentedOfferingIdentifier,
158+
@Nullable final ReadableMap presentedOfferingContext,
148159
final Promise promise) {
149160
GoogleUpgradeInfo googleUpgradeInfo = getUpgradeInfo(googleProductChangeInfo);
150161

151162
Boolean googleIsPersonalized = googleInfo != null && googleInfo.hasKey("isPersonalizedPrice") ? googleInfo.getBoolean("isPersonalizedPrice") : null;
152163

164+
Map<String, Object> mapPresentedOfferingContext = null;
165+
if (presentedOfferingContext != null) {
166+
mapPresentedOfferingContext = presentedOfferingContext.toHashMap();
167+
}
168+
153169
CommonKt.purchaseProduct(
154170
getCurrentActivity(),
155171
productIdentifier,
@@ -158,13 +174,13 @@ public void purchaseProduct(final String productIdentifier,
158174
googleUpgradeInfo.getOldProductIdentifier(),
159175
googleUpgradeInfo.getProrationMode(),
160176
googleIsPersonalized,
161-
presentedOfferingIdentifier,
177+
mapPresentedOfferingContext,
162178
getOnResult(promise));
163179
}
164180

165181
@ReactMethod
166182
public void purchasePackage(final String packageIdentifier,
167-
final String offeringIdentifier,
183+
final ReadableMap presentedOfferingContext,
168184
@Nullable final ReadableMap googleProductChangeInfo,
169185
@Nullable final String discountTimestamp,
170186
@Nullable final ReadableMap googleInfo,
@@ -173,10 +189,12 @@ public void purchasePackage(final String packageIdentifier,
173189

174190
Boolean googleIsPersonalized = googleInfo != null && googleInfo.hasKey("isPersonalizedPrice") ? googleInfo.getBoolean("isPersonalizedPrice") : null;
175191

192+
Map<String, Object> mapPresentedOfferingContext = presentedOfferingContext.toHashMap();
193+
176194
CommonKt.purchasePackage(
177195
getCurrentActivity(),
178196
packageIdentifier,
179-
offeringIdentifier,
197+
mapPresentedOfferingContext,
180198
googleUpgradeInfo.getOldProductIdentifier(),
181199
googleUpgradeInfo.getProrationMode(),
182200
googleIsPersonalized,
@@ -189,20 +207,25 @@ public void purchaseSubscriptionOption(final String productIdentifer,
189207
@Nullable final ReadableMap upgradeInfo,
190208
@Nullable final String discountTimestamp,
191209
@Nullable final ReadableMap googleInfo,
192-
@Nullable final String presentedOfferingIdentifier,
210+
@Nullable final ReadableMap presentedOfferingContext,
193211
final Promise promise) {
194212
GoogleUpgradeInfo googleUpgradeInfo = getUpgradeInfo(upgradeInfo);
195213

196214
Boolean googleIsPersonalized = googleInfo != null && googleInfo.hasKey("isPersonalizedPrice") ? googleInfo.getBoolean("isPersonalizedPrice") : null;
197215

216+
Map<String, Object> mapPresentedOfferingContext = null;
217+
if (presentedOfferingContext != null) {
218+
mapPresentedOfferingContext = presentedOfferingContext.toHashMap();
219+
}
220+
198221
CommonKt.purchaseSubscriptionOption(
199222
getCurrentActivity(),
200223
productIdentifer,
201224
optionIdentifier,
202225
googleUpgradeInfo.getOldProductIdentifier(),
203226
googleUpgradeInfo.getProrationMode(),
204227
googleIsPersonalized,
205-
presentedOfferingIdentifier,
228+
mapPresentedOfferingContext,
206229
getOnResult(promise));
207230
}
208231

@@ -491,6 +514,26 @@ public void onError(ErrorContainer errorContainer) {
491514
};
492515
}
493516

517+
@NotNull
518+
private OnNullableResult getOnNullableResult(final Promise promise) {
519+
return new OnNullableResult() {
520+
@Override
521+
public void onReceived(@Nullable Map<String, ?> map) {
522+
if (map != null) {
523+
promise.resolve(convertMapToWriteableMap(map));
524+
} else {
525+
promise.resolve(null);
526+
}
527+
}
528+
529+
@Override
530+
public void onError(ErrorContainer errorContainer) {
531+
promise.reject(errorContainer.getCode() + "", errorContainer.getMessage(),
532+
convertMapToWriteableMap(errorContainer.getInfo()));
533+
}
534+
};
535+
}
536+
494537
private static GoogleUpgradeInfo getUpgradeInfo(ReadableMap upgradeInfo) {
495538
String googleOldProductId = null;
496539
Integer googleProrationMode = null;

0 commit comments

Comments
 (0)