react-native-purchases-ui 7.16.1 → 7.17.1
Sign up to get free protection for your applications and to get access to all the features.
- package/RNPaywalls.podspec +1 -1
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/revenuecat/purchases/react/ui/RNPaywallsModule.kt +18 -18
- package/ios/PaywallViewManager.m +6 -2
- package/ios/PaywallViewWrapper.h +21 -0
- package/ios/PaywallViewWrapper.m +61 -0
- package/ios/RCPaywallFooterViewManager.m +5 -33
- package/ios/RNPaywalls.h +0 -3
- package/ios/RNPaywalls.m +17 -16
- package/ios/UIView+Extensions.h +1 -1
- package/ios/UIView+Extensions.m +1 -1
- package/lib/commonjs/index.js +40 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +40 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +31 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/index.tsx +44 -5
package/RNPaywalls.podspec
CHANGED
package/android/build.gradle
CHANGED
@@ -59,7 +59,7 @@ android {
|
|
59
59
|
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
|
60
60
|
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
|
61
61
|
versionCode 1
|
62
|
-
versionName '7.
|
62
|
+
versionName '7.17.1'
|
63
63
|
}
|
64
64
|
|
65
65
|
buildTypes {
|
@@ -91,7 +91,7 @@ dependencies {
|
|
91
91
|
//noinspection GradleDynamicVersion
|
92
92
|
implementation "com.facebook.react:react-native:+"
|
93
93
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
94
|
-
implementation 'com.revenuecat.purchases:purchases-hybrid-common-ui:
|
94
|
+
implementation 'com.revenuecat.purchases:purchases-hybrid-common-ui:9.2.0'
|
95
95
|
implementation 'androidx.compose.ui:ui-android:1.5.4'
|
96
96
|
implementation "androidx.appcompat:appcompat:1.6.1"
|
97
97
|
}
|
@@ -8,6 +8,8 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
8
8
|
import com.facebook.react.bridge.ReactMethod
|
9
9
|
import com.facebook.react.bridge.ReadableMap
|
10
10
|
import com.revenuecat.purchases.hybridcommon.ui.PaywallResultListener
|
11
|
+
import com.revenuecat.purchases.hybridcommon.ui.PaywallSource
|
12
|
+
import com.revenuecat.purchases.hybridcommon.ui.PresentPaywallOptions
|
11
13
|
import com.revenuecat.purchases.hybridcommon.ui.presentPaywallFromFragment
|
12
14
|
|
13
15
|
internal class RNPaywallsModule(reactContext: ReactApplicationContext) :
|
@@ -33,13 +35,10 @@ internal class RNPaywallsModule(reactContext: ReactApplicationContext) :
|
|
33
35
|
|
34
36
|
@ReactMethod
|
35
37
|
fun presentPaywall(
|
36
|
-
|
38
|
+
offeringIdentifier: String?,
|
39
|
+
displayCloseButton: Boolean?,
|
37
40
|
promise: Promise
|
38
41
|
) {
|
39
|
-
val hashMap = options.toHashMap()
|
40
|
-
val offeringIdentifier = hashMap["offeringIdentifier"] as String?
|
41
|
-
val displayCloseButton = hashMap["displayCloseButton"] as Boolean?
|
42
|
-
|
43
42
|
presentPaywall(
|
44
43
|
null,
|
45
44
|
offeringIdentifier,
|
@@ -50,14 +49,11 @@ internal class RNPaywallsModule(reactContext: ReactApplicationContext) :
|
|
50
49
|
|
51
50
|
@ReactMethod
|
52
51
|
fun presentPaywallIfNeeded(
|
53
|
-
|
52
|
+
requiredEntitlementIdentifier: String,
|
53
|
+
offeringIdentifier: String?,
|
54
|
+
displayCloseButton: Boolean,
|
54
55
|
promise: Promise
|
55
56
|
) {
|
56
|
-
val hashMap = options.toHashMap()
|
57
|
-
val requiredEntitlementIdentifier = hashMap["requiredEntitlementIdentifier"] as String?
|
58
|
-
val offeringIdentifier = hashMap["offeringIdentifier"] as String?
|
59
|
-
val displayCloseButton = hashMap["displayCloseButton"] as Boolean?
|
60
|
-
|
61
57
|
presentPaywall(
|
62
58
|
requiredEntitlementIdentifier,
|
63
59
|
offeringIdentifier,
|
@@ -74,16 +70,20 @@ internal class RNPaywallsModule(reactContext: ReactApplicationContext) :
|
|
74
70
|
) {
|
75
71
|
val fragment = currentActivityFragment ?: return
|
76
72
|
|
77
|
-
// TODO wire offeringIdentifier
|
78
73
|
presentPaywallFromFragment(
|
79
74
|
fragment = fragment,
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
75
|
+
PresentPaywallOptions(
|
76
|
+
requiredEntitlementIdentifier = requiredEntitlementIdentifier,
|
77
|
+
shouldDisplayDismissButton = displayCloseButton,
|
78
|
+
paywallSource = offeringIdentifier?.let {
|
79
|
+
PaywallSource.OfferingIdentifier(it)
|
80
|
+
} ?: PaywallSource.DefaultOffering,
|
81
|
+
paywallResultListener = object : PaywallResultListener {
|
82
|
+
override fun onPaywallResult(paywallResult: String) {
|
83
|
+
promise.resolve(paywallResult)
|
84
|
+
}
|
85
85
|
}
|
86
|
-
|
86
|
+
)
|
87
87
|
)
|
88
88
|
}
|
89
89
|
}
|
package/ios/PaywallViewManager.m
CHANGED
@@ -7,7 +7,10 @@
|
|
7
7
|
//
|
8
8
|
|
9
9
|
#import "PaywallViewManager.h"
|
10
|
-
|
10
|
+
#import "PaywallViewWrapper.h"
|
11
|
+
|
12
|
+
@import PurchasesHybridCommonUI;
|
13
|
+
@import RevenueCatUI;
|
11
14
|
|
12
15
|
@implementation PaywallViewManager
|
13
16
|
|
@@ -17,7 +20,8 @@ RCT_EXPORT_MODULE(Paywall)
|
|
17
20
|
{
|
18
21
|
if (@available(iOS 15.0, *)) {
|
19
22
|
PaywallProxy *proxy = [[PaywallProxy alloc] init];
|
20
|
-
|
23
|
+
|
24
|
+
return [[PaywallViewWrapper alloc] initWithPaywallViewController:[proxy createPaywallView]];
|
21
25
|
} else {
|
22
26
|
NSLog(@"Error: attempted to present paywalls on unsupported iOS version.");
|
23
27
|
return nil;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
//
|
2
|
+
// PaywallViewWrapper.h
|
3
|
+
// RNPaywalls
|
4
|
+
//
|
5
|
+
// Created by Nacho Soto on 1/23/24.
|
6
|
+
//
|
7
|
+
|
8
|
+
#import <UIKit/UIKit.h>
|
9
|
+
|
10
|
+
NS_ASSUME_NONNULL_BEGIN
|
11
|
+
|
12
|
+
@interface PaywallViewWrapper : UIView
|
13
|
+
|
14
|
+
- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
|
15
|
+
- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
|
16
|
+
|
17
|
+
- (instancetype)initWithPaywallViewController:(UIViewController *)paywallViewController NS_DESIGNATED_INITIALIZER;
|
18
|
+
|
19
|
+
@end
|
20
|
+
|
21
|
+
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,61 @@
|
|
1
|
+
//
|
2
|
+
// PaywallViewWrapper.m
|
3
|
+
// RNPaywalls
|
4
|
+
//
|
5
|
+
// Created by Nacho Soto on 1/23/24.
|
6
|
+
//
|
7
|
+
|
8
|
+
#import "PaywallViewWrapper.h"
|
9
|
+
|
10
|
+
#import "UIView+Extensions.h"
|
11
|
+
|
12
|
+
@import PurchasesHybridCommonUI;
|
13
|
+
@import RevenueCatUI;
|
14
|
+
|
15
|
+
@interface PaywallViewWrapper () <RCPaywallViewControllerDelegate>
|
16
|
+
|
17
|
+
@property (strong, nonatomic) UIViewController *paywallViewController;
|
18
|
+
|
19
|
+
@property (nonatomic) BOOL addedToHierarchy;
|
20
|
+
|
21
|
+
@end
|
22
|
+
|
23
|
+
@implementation PaywallViewWrapper
|
24
|
+
|
25
|
+
- (instancetype)initWithPaywallViewController:(UIViewController *)paywallViewController {
|
26
|
+
NSParameterAssert(paywallViewController);
|
27
|
+
|
28
|
+
if ((self = [super initWithFrame:paywallViewController.view.bounds])) {
|
29
|
+
_paywallViewController = paywallViewController;
|
30
|
+
}
|
31
|
+
|
32
|
+
return self;
|
33
|
+
}
|
34
|
+
|
35
|
+
- (void)layoutSubviews {
|
36
|
+
[super layoutSubviews];
|
37
|
+
|
38
|
+
// Need to wait for this view to be in the hierarchy to look for the parent UIVC.
|
39
|
+
// This is required to add a SwiftUI `UIHostingController` to the hierarchy in a way that allows
|
40
|
+
// UIKit to read properties from the environment, like traits and safe area.
|
41
|
+
if (!self.addedToHierarchy) {
|
42
|
+
UIViewController *parentController = self.parentViewController;
|
43
|
+
if (parentController) {
|
44
|
+
self.paywallViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
|
45
|
+
[parentController addChildViewController:self.paywallViewController];
|
46
|
+
[self addSubview:self.paywallViewController.view];
|
47
|
+
[self.paywallViewController didMoveToParentViewController:parentController];
|
48
|
+
|
49
|
+
[NSLayoutConstraint activateConstraints:@[
|
50
|
+
[self.paywallViewController.view.topAnchor constraintEqualToAnchor:self.topAnchor],
|
51
|
+
[self.paywallViewController.view.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
|
52
|
+
[self.paywallViewController.view.leftAnchor constraintEqualToAnchor:self.leftAnchor],
|
53
|
+
[self.paywallViewController.view.rightAnchor constraintEqualToAnchor:self.rightAnchor]
|
54
|
+
]];
|
55
|
+
|
56
|
+
self.addedToHierarchy = YES;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
@end
|
@@ -9,9 +9,9 @@
|
|
9
9
|
#import "RCPaywallFooterViewManager.h"
|
10
10
|
|
11
11
|
@import RevenueCatUI;
|
12
|
-
@import
|
12
|
+
@import PurchasesHybridCommonUI;
|
13
13
|
|
14
|
-
#import "
|
14
|
+
#import "PaywallViewWrapper.h"
|
15
15
|
|
16
16
|
#import <React/RCTShadowView.h>
|
17
17
|
#import <React/RCTUIManager.h>
|
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
NS_ASSUME_NONNULL_BEGIN
|
24
24
|
|
25
|
-
@interface FooterViewWrapper
|
25
|
+
@interface FooterViewWrapper: PaywallViewWrapper
|
26
26
|
|
27
27
|
- (instancetype)initWithFooterViewController:(UIViewController *)footerViewController
|
28
28
|
bridge:(RCTBridge *)bridge;
|
@@ -33,7 +33,6 @@ NS_ASSUME_NONNULL_END
|
|
33
33
|
|
34
34
|
@interface FooterViewWrapper () <RCPaywallViewControllerDelegate>
|
35
35
|
|
36
|
-
@property (strong, nonatomic) UIViewController *footerViewController;
|
37
36
|
@property (strong, nonatomic) RCTBridge *bridge;
|
38
37
|
|
39
38
|
@property BOOL addedToHierarchy;
|
@@ -43,9 +42,8 @@ NS_ASSUME_NONNULL_END
|
|
43
42
|
@implementation FooterViewWrapper
|
44
43
|
|
45
44
|
- (instancetype)initWithFooterViewController:(UIViewController *)footerViewController bridge:(RCTBridge *)bridge {
|
46
|
-
if ((self = [super
|
45
|
+
if ((self = [super initWithPaywallViewController:footerViewController])) {
|
47
46
|
_bridge = bridge;
|
48
|
-
_footerViewController = footerViewController;
|
49
47
|
}
|
50
48
|
|
51
49
|
return self;
|
@@ -70,33 +68,7 @@ NS_ASSUME_NONNULL_END
|
|
70
68
|
}
|
71
69
|
|
72
70
|
- (void)paywallViewController:(RCPaywallViewController *)controller didChangeSizeTo:(CGSize)size API_AVAILABLE(ios(15.0)){
|
73
|
-
[_bridge.uiManager
|
74
|
-
}
|
75
|
-
|
76
|
-
- (void)layoutSubviews {
|
77
|
-
[super layoutSubviews];
|
78
|
-
|
79
|
-
// Need to wait for this view to be in the hierarchy to look for the parent UIVC.
|
80
|
-
// This is required to add a SwiftUI `UIHostingController` to the hierarchy in a way that allows
|
81
|
-
// UIKit to read properties from the environment, like traits and safe area.
|
82
|
-
if (!self.addedToHierarchy) {
|
83
|
-
UIViewController *parentController = self.parentViewController;
|
84
|
-
if (parentController) {
|
85
|
-
self.footerViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
|
86
|
-
[parentController addChildViewController:self.footerViewController];
|
87
|
-
[self addSubview:self.footerViewController.view];
|
88
|
-
[self.footerViewController didMoveToParentViewController:parentController];
|
89
|
-
|
90
|
-
[NSLayoutConstraint activateConstraints:@[
|
91
|
-
[self.footerViewController.view.topAnchor constraintEqualToAnchor:self.topAnchor],
|
92
|
-
[self.footerViewController.view.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
|
93
|
-
[self.footerViewController.view.leftAnchor constraintEqualToAnchor:self.leftAnchor],
|
94
|
-
[self.footerViewController.view.rightAnchor constraintEqualToAnchor:self.rightAnchor]
|
95
|
-
]];
|
96
|
-
|
97
|
-
self.addedToHierarchy = YES;
|
98
|
-
}
|
99
|
-
}
|
71
|
+
[_bridge.uiManager setIntrinsicContentSize:CGSizeMake(UIViewNoIntrinsicMetric, size.height) forView:self];
|
100
72
|
}
|
101
73
|
|
102
74
|
@end
|
package/ios/RNPaywalls.h
CHANGED
package/ios/RNPaywalls.m
CHANGED
@@ -6,6 +6,9 @@
|
|
6
6
|
|
7
7
|
#import "RNPaywalls.h"
|
8
8
|
|
9
|
+
@import PurchasesHybridCommonUI;
|
10
|
+
@import RevenueCat;
|
11
|
+
|
9
12
|
@interface RNPaywalls ()
|
10
13
|
|
11
14
|
@property (nonatomic, strong) id paywallProxy;
|
@@ -58,21 +61,20 @@ RCT_EXPORT_MODULE();
|
|
58
61
|
|
59
62
|
// MARK: -
|
60
63
|
|
61
|
-
RCT_EXPORT_METHOD(presentPaywall:(
|
64
|
+
RCT_EXPORT_METHOD(presentPaywall:(nullable NSString *)offeringIdentifier
|
65
|
+
shouldDisplayCloseButton:(BOOL)displayCloseButton
|
62
66
|
withResolve:(RCTPromiseResolveBlock)resolve
|
63
67
|
reject:(RCTPromiseRejectBlock)reject) {
|
64
68
|
if (@available(iOS 15.0, *)) {
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
if (displayCloseButton == nil) {
|
70
|
-
[self.paywallProxy presentPaywallWithPaywallResultHandler:^(NSString *result) {
|
69
|
+
if (offeringIdentifier != nil) {
|
70
|
+
[self.paywalls presentPaywallWithOfferingIdentifier:offeringIdentifier
|
71
|
+
displayCloseButton:displayCloseButton
|
72
|
+
paywallResultHandler:^(NSString *result) {
|
71
73
|
resolve(result);
|
72
74
|
}];
|
73
75
|
return;
|
74
76
|
}
|
75
|
-
[self.paywalls presentPaywallWithDisplayCloseButton:displayCloseButton
|
77
|
+
[self.paywalls presentPaywallWithDisplayCloseButton:displayCloseButton
|
76
78
|
paywallResultHandler:^(NSString *result) {
|
77
79
|
resolve(result);
|
78
80
|
}];
|
@@ -81,24 +83,23 @@ RCT_EXPORT_METHOD(presentPaywall:(NSDictionary *)options
|
|
81
83
|
}
|
82
84
|
}
|
83
85
|
|
84
|
-
RCT_EXPORT_METHOD(presentPaywallIfNeeded:(
|
86
|
+
RCT_EXPORT_METHOD(presentPaywallIfNeeded:(NSString *)requiredEntitlementIdentifier
|
87
|
+
withOfferingIdentifier:(nullable NSString *)offeringIdentifier
|
88
|
+
shouldDisplayCloseButton:(BOOL)displayCloseButton
|
85
89
|
withResolve:(RCTPromiseResolveBlock)resolve
|
86
90
|
reject:(RCTPromiseRejectBlock)reject) {
|
87
91
|
if (@available(iOS 15.0, *)) {
|
88
|
-
|
89
|
-
// TODO wire offeringIdentifier
|
90
|
-
NSString *offeringIdentifier = options[@"offeringIdentifier"];
|
91
|
-
NSNumber *displayCloseButton = options[@"displayCloseButton"];
|
92
|
-
if (displayCloseButton == nil) {
|
92
|
+
if (offeringIdentifier != nil) {
|
93
93
|
[self.paywalls presentPaywallIfNeededWithRequiredEntitlementIdentifier:requiredEntitlementIdentifier
|
94
|
+
offeringIdentifier:offeringIdentifier
|
95
|
+
displayCloseButton:displayCloseButton
|
94
96
|
paywallResultHandler:^(NSString *result) {
|
95
97
|
resolve(result);
|
96
98
|
}];
|
97
99
|
return;
|
98
100
|
}
|
99
|
-
|
100
101
|
[self.paywalls presentPaywallIfNeededWithRequiredEntitlementIdentifier:requiredEntitlementIdentifier
|
101
|
-
displayCloseButton:displayCloseButton
|
102
|
+
displayCloseButton:displayCloseButton
|
102
103
|
paywallResultHandler:^(NSString *result) {
|
103
104
|
resolve(result);
|
104
105
|
}];
|
package/ios/UIView+Extensions.h
CHANGED
package/ios/UIView+Extensions.m
CHANGED
package/lib/commonjs/index.js
CHANGED
@@ -29,17 +29,53 @@ const InternalPaywallFooterView = _reactNative.UIManager.getViewManagerConfig('P
|
|
29
29
|
throw new Error(LINKING_ERROR);
|
30
30
|
};
|
31
31
|
class RevenueCatUI {
|
32
|
+
static Defaults = {
|
33
|
+
PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON: true
|
34
|
+
};
|
35
|
+
|
32
36
|
/**
|
33
37
|
* The result of presenting a paywall. This will be the last situation the user experienced before the paywall closed.
|
34
38
|
* @readonly
|
35
39
|
* @enum {string}
|
36
40
|
*/
|
37
41
|
static PAYWALL_RESULT = _purchasesTypescriptInternal.PAYWALL_RESULT;
|
38
|
-
|
39
|
-
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Presents a paywall to the user with optional customization.
|
45
|
+
*
|
46
|
+
* This method allows for presenting a specific offering's paywall to the user. The caller
|
47
|
+
* can decide whether to display a close button on the paywall through the `displayCloseButton`
|
48
|
+
* parameter. By default, the close button is displayed.
|
49
|
+
*
|
50
|
+
* @param {PresentPaywallParams} params - The options for presenting the paywall.
|
51
|
+
* @returns {Promise<PAYWALL_RESULT>} A promise that resolves with the result of the paywall presentation.
|
52
|
+
*/
|
53
|
+
static presentPaywall({
|
54
|
+
offering,
|
55
|
+
displayCloseButton = RevenueCatUI.Defaults.PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON
|
56
|
+
} = {}) {
|
57
|
+
return RNPaywalls.presentPaywall((offering === null || offering === void 0 ? void 0 : offering.identifier) ?? null, displayCloseButton);
|
40
58
|
}
|
41
|
-
|
42
|
-
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Presents a paywall to the user if a specific entitlement is not already owned.
|
62
|
+
*
|
63
|
+
* This method evaluates whether the user already owns the specified entitlement.
|
64
|
+
* If the entitlement is not owned, it presents a paywall for the specified offering (if provided), or the
|
65
|
+
* default offering (if no offering is provided), to the user. The paywall will be presented
|
66
|
+
* allowing the user the opportunity to purchase the offering. The caller
|
67
|
+
* can decide whether to display a close button on the paywall through the `displayCloseButton`
|
68
|
+
* parameter. By default, the close button is displayed.
|
69
|
+
*
|
70
|
+
* @param {PresentPaywallIfNeededParams} params - The parameters for presenting the paywall.
|
71
|
+
* @returns {Promise<PAYWALL_RESULT>} A promise that resolves with the result of the paywall presentation.
|
72
|
+
*/
|
73
|
+
static presentPaywallIfNeeded({
|
74
|
+
requiredEntitlementIdentifier,
|
75
|
+
offering,
|
76
|
+
displayCloseButton = RevenueCatUI.Defaults.PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON
|
77
|
+
}) {
|
78
|
+
return RNPaywalls.presentPaywallIfNeeded(requiredEntitlementIdentifier, (offering === null || offering === void 0 ? void 0 : offering.identifier) ?? null, displayCloseButton);
|
43
79
|
}
|
44
80
|
static Paywall = props => /*#__PURE__*/_react.default.createElement(InternalPaywall, _extends({}, props, {
|
45
81
|
style: [{
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_purchasesTypescriptInternal","_react","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","LINKING_ERROR","Platform","select","ios","RNPaywalls","NativeModules","eventEmitter","NativeEventEmitter","InternalPaywall","UIManager","getViewManagerConfig","requireNativeComponent","Error","InternalPaywallFooterView","RevenueCatUI","PAYWALL_RESULT","presentPaywall","
|
1
|
+
{"version":3,"names":["_reactNative","require","_purchasesTypescriptInternal","_react","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","LINKING_ERROR","Platform","select","ios","RNPaywalls","NativeModules","eventEmitter","NativeEventEmitter","InternalPaywall","UIManager","getViewManagerConfig","requireNativeComponent","Error","InternalPaywallFooterView","RevenueCatUI","Defaults","PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON","PAYWALL_RESULT","presentPaywall","offering","displayCloseButton","identifier","presentPaywallIfNeeded","requiredEntitlementIdentifier","Paywall","props","createElement","style","flex","PaywallFooterContainerView","children","paddingBottom","setPaddingBottom","useState","useEffect","handleSafeAreaInsetsChange","bottom","subscription","addListener","remove","View","ScrollView","contentContainerStyle","flexGrow","marginTop","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAWA,IAAAC,4BAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AAAmE,SAAAI,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAF,wBAAAE,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAY,SAAA,IAAAA,QAAA,GAAAT,MAAA,CAAAU,MAAA,GAAAV,MAAA,CAAAU,MAAA,CAAAC,IAAA,eAAAC,MAAA,aAAAL,CAAA,MAAAA,CAAA,GAAAM,SAAA,CAAAC,MAAA,EAAAP,CAAA,UAAAQ,MAAA,GAAAF,SAAA,CAAAN,CAAA,YAAAS,GAAA,IAAAD,MAAA,QAAAf,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAS,MAAA,EAAAC,GAAA,KAAAJ,MAAA,CAAAI,GAAA,IAAAD,MAAA,CAAAC,GAAA,gBAAAJ,MAAA,YAAAH,QAAA,CAAAQ,KAAA,OAAAJ,SAAA;AAInE,MAAMK,aAAa,GAChB,sFAAqF,GACtFC,qBAAQ,CAACC,MAAM,CAAC;EAACC,GAAG,EAAE,gCAAgC;EAAE3B,OAAO,EAAE;AAAE,CAAC,CAAC,GACrE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAM4B,UAAU,GAAGC,0BAAa,CAACD,UAAU;AAE3C,MAAME,YAAY,GAAG,IAAIC,+BAAkB,CAACH,UAAU,CAAC;AAOvD,MAAMI,eAAe,GACnBC,sBAAS,CAACC,oBAAoB,CAAC,SAAS,CAAC,IAAI,IAAI,GAC7C,IAAAC,mCAAsB,EAAmB,SAAS,CAAC,GACnD,MAAM;EACN,MAAM,IAAIC,KAAK,CAACZ,aAAa,CAAC;AAChC,CAAC;AAEL,MAAMa,yBAAyB,GAAGJ,sBAAS,CAACC,oBAAoB,CAAC,SAAS,CAAC,IAAI,IAAI,GAC/E,IAAAC,mCAAsB,EAAmB,qBAAqB,CAAC,GAC/D,MAAM;EACN,MAAM,IAAIC,KAAK,CAACZ,aAAa,CAAC;AAChC,CAAC;AAqBY,MAAMc,YAAY,CAAC;EAEhC,OAAeC,QAAQ,GAAG;IACxBC,oCAAoC,EAAE;EACxC,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,OAAcC,cAAc,GAAGA,2CAAc;;EAE7C;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAcC,cAAcA,CAAC;IACEC,QAAQ;IACRC,kBAAkB,GAAGN,YAAY,CAACC,QAAQ,CAACC;EACvB,CAAC,GAAG,CAAC,CAAC,EAA2B;IAClF,OAAOZ,UAAU,CAACc,cAAc,CAAC,CAAAC,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEE,UAAU,KAAI,IAAI,EAAED,kBAAkB,CAAC;EACpF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAcE,sBAAsBA,CAAC;IACEC,6BAA6B;IAC7BJ,QAAQ;IACRC,kBAAkB,GAAGN,YAAY,CAACC,QAAQ,CAACC;EACf,CAAC,EAA2B;IAC7F,OAAOZ,UAAU,CAACkB,sBAAsB,CAACC,6BAA6B,EAAE,CAAAJ,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEE,UAAU,KAAI,IAAI,EAAED,kBAAkB,CAAC;EAC3H;EAEA,OAAcI,OAAO,GAAgCC,KAAK,iBACxDzD,MAAA,CAAAQ,OAAA,CAAAkD,aAAA,CAAClB,eAAe,EAAAjB,QAAA,KAAKkC,KAAK;IAAEE,KAAK,EAAE,CAAC;MAACC,IAAI,EAAE;IAAC,CAAC,EAAEH,KAAK,CAACE,KAAK;EAAE,EAAC,CAC9D;EAED,OAAcE,0BAA0B,GAA+BA,CAAC;IAACF,KAAK;IAAEG;EAAQ,CAAC,KAAK;IAC5F;IACA;IACA;IACA;IACA,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAAC,eAAQ,EAAC,EAAE,CAAC;IAEtD,IAAAC,gBAAS,EAAC,MAAM;MAKd,MAAMC,0BAA0B,GAAGA,CAAC;QAACC;MAAwC,CAAC,KAAK;QACjFJ,gBAAgB,CAAC,EAAE,GAAGI,MAAM,CAAC;MAC/B,CAAC;MAED,MAAMC,YAAY,GAAG/B,YAAY,CAACgC,WAAW,CAC3C,yBAAyB,EACzBH,0BACF,CAAC;MAED,OAAO,MAAM;QACXE,YAAY,CAACE,MAAM,CAAC,CAAC;MACvB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,oBACEvE,MAAA,CAAAQ,OAAA,CAAAkD,aAAA,CAAC7D,YAAA,CAAA2E,IAAI;MAACb,KAAK,EAAE,CAAC;QAACC,IAAI,EAAE;MAAC,CAAC,EAAED,KAAK;IAAE,gBAC9B3D,MAAA,CAAAQ,OAAA,CAAAkD,aAAA,CAAC7D,YAAA,CAAA4E,UAAU;MAACC,qBAAqB,EAAE;QAACC,QAAQ,EAAE,CAAC;QAAEZ;MAAa;IAAE,GAC7DD,QACS,CAAC,eAEb9D,MAAA,CAAAQ,OAAA,CAAAkD,aAAA,CAACb,yBAAyB;MAACc,KAAK,EAAE;QAACiB,SAAS,EAAE,CAAC;MAAE;IAAE,CAAC,CAChD,CAAC;EAEX,CAAC;AACH;AAACC,OAAA,CAAArE,OAAA,GAAAsC,YAAA"}
|
package/lib/module/index.js
CHANGED
@@ -16,17 +16,53 @@ const InternalPaywallFooterView = UIManager.getViewManagerConfig('Paywall') != n
|
|
16
16
|
throw new Error(LINKING_ERROR);
|
17
17
|
};
|
18
18
|
export default class RevenueCatUI {
|
19
|
+
static Defaults = {
|
20
|
+
PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON: true
|
21
|
+
};
|
22
|
+
|
19
23
|
/**
|
20
24
|
* The result of presenting a paywall. This will be the last situation the user experienced before the paywall closed.
|
21
25
|
* @readonly
|
22
26
|
* @enum {string}
|
23
27
|
*/
|
24
28
|
static PAYWALL_RESULT = PAYWALL_RESULT;
|
25
|
-
|
26
|
-
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Presents a paywall to the user with optional customization.
|
32
|
+
*
|
33
|
+
* This method allows for presenting a specific offering's paywall to the user. The caller
|
34
|
+
* can decide whether to display a close button on the paywall through the `displayCloseButton`
|
35
|
+
* parameter. By default, the close button is displayed.
|
36
|
+
*
|
37
|
+
* @param {PresentPaywallParams} params - The options for presenting the paywall.
|
38
|
+
* @returns {Promise<PAYWALL_RESULT>} A promise that resolves with the result of the paywall presentation.
|
39
|
+
*/
|
40
|
+
static presentPaywall({
|
41
|
+
offering,
|
42
|
+
displayCloseButton = RevenueCatUI.Defaults.PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON
|
43
|
+
} = {}) {
|
44
|
+
return RNPaywalls.presentPaywall((offering === null || offering === void 0 ? void 0 : offering.identifier) ?? null, displayCloseButton);
|
27
45
|
}
|
28
|
-
|
29
|
-
|
46
|
+
|
47
|
+
/**
|
48
|
+
* Presents a paywall to the user if a specific entitlement is not already owned.
|
49
|
+
*
|
50
|
+
* This method evaluates whether the user already owns the specified entitlement.
|
51
|
+
* If the entitlement is not owned, it presents a paywall for the specified offering (if provided), or the
|
52
|
+
* default offering (if no offering is provided), to the user. The paywall will be presented
|
53
|
+
* allowing the user the opportunity to purchase the offering. The caller
|
54
|
+
* can decide whether to display a close button on the paywall through the `displayCloseButton`
|
55
|
+
* parameter. By default, the close button is displayed.
|
56
|
+
*
|
57
|
+
* @param {PresentPaywallIfNeededParams} params - The parameters for presenting the paywall.
|
58
|
+
* @returns {Promise<PAYWALL_RESULT>} A promise that resolves with the result of the paywall presentation.
|
59
|
+
*/
|
60
|
+
static presentPaywallIfNeeded({
|
61
|
+
requiredEntitlementIdentifier,
|
62
|
+
offering,
|
63
|
+
displayCloseButton = RevenueCatUI.Defaults.PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON
|
64
|
+
}) {
|
65
|
+
return RNPaywalls.presentPaywallIfNeeded(requiredEntitlementIdentifier, (offering === null || offering === void 0 ? void 0 : offering.identifier) ?? null, displayCloseButton);
|
30
66
|
}
|
31
67
|
static Paywall = props => /*#__PURE__*/React.createElement(InternalPaywall, _extends({}, props, {
|
32
68
|
style: [{
|
package/lib/module/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","NativeModules","Platform","requireNativeComponent","ScrollView","UIManager","View","PAYWALL_RESULT","React","useEffect","useState","LINKING_ERROR","select","ios","default","RNPaywalls","eventEmitter","InternalPaywall","getViewManagerConfig","Error","InternalPaywallFooterView","RevenueCatUI","presentPaywall","
|
1
|
+
{"version":3,"names":["NativeEventEmitter","NativeModules","Platform","requireNativeComponent","ScrollView","UIManager","View","PAYWALL_RESULT","React","useEffect","useState","LINKING_ERROR","select","ios","default","RNPaywalls","eventEmitter","InternalPaywall","getViewManagerConfig","Error","InternalPaywallFooterView","RevenueCatUI","Defaults","PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON","presentPaywall","offering","displayCloseButton","identifier","presentPaywallIfNeeded","requiredEntitlementIdentifier","Paywall","props","createElement","_extends","style","flex","PaywallFooterContainerView","children","paddingBottom","setPaddingBottom","handleSafeAreaInsetsChange","bottom","subscription","addListener","remove","contentContainerStyle","flexGrow","marginTop"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { type StyleProp, type ViewStyle } from "react-native";
|
2
|
-
import { PAYWALL_RESULT } from "@revenuecat/purchases-typescript-internal";
|
2
|
+
import { PAYWALL_RESULT, type PurchasesOffering } from "@revenuecat/purchases-typescript-internal";
|
3
3
|
import React, { type ReactNode } from "react";
|
4
4
|
export { PAYWALL_RESULT } from "@revenuecat/purchases-typescript-internal";
|
5
5
|
type PaywallViewProps = {
|
@@ -11,6 +11,10 @@ export interface PresentPaywallParams {
|
|
11
11
|
* Whether to display the close button or not.
|
12
12
|
*/
|
13
13
|
displayCloseButton?: boolean;
|
14
|
+
/**
|
15
|
+
* The offering to load the paywall with. This will be the "current" offering by default.
|
16
|
+
*/
|
17
|
+
offering?: PurchasesOffering;
|
14
18
|
}
|
15
19
|
export type PresentPaywallIfNeededParams = PresentPaywallParams & {
|
16
20
|
/**
|
@@ -19,14 +23,38 @@ export type PresentPaywallIfNeededParams = PresentPaywallParams & {
|
|
19
23
|
requiredEntitlementIdentifier: string;
|
20
24
|
};
|
21
25
|
export default class RevenueCatUI {
|
26
|
+
private static Defaults;
|
22
27
|
/**
|
23
28
|
* The result of presenting a paywall. This will be the last situation the user experienced before the paywall closed.
|
24
29
|
* @readonly
|
25
30
|
* @enum {string}
|
26
31
|
*/
|
27
32
|
static PAYWALL_RESULT: typeof PAYWALL_RESULT;
|
28
|
-
|
29
|
-
|
33
|
+
/**
|
34
|
+
* Presents a paywall to the user with optional customization.
|
35
|
+
*
|
36
|
+
* This method allows for presenting a specific offering's paywall to the user. The caller
|
37
|
+
* can decide whether to display a close button on the paywall through the `displayCloseButton`
|
38
|
+
* parameter. By default, the close button is displayed.
|
39
|
+
*
|
40
|
+
* @param {PresentPaywallParams} params - The options for presenting the paywall.
|
41
|
+
* @returns {Promise<PAYWALL_RESULT>} A promise that resolves with the result of the paywall presentation.
|
42
|
+
*/
|
43
|
+
static presentPaywall({ offering, displayCloseButton }?: PresentPaywallParams): Promise<PAYWALL_RESULT>;
|
44
|
+
/**
|
45
|
+
* Presents a paywall to the user if a specific entitlement is not already owned.
|
46
|
+
*
|
47
|
+
* This method evaluates whether the user already owns the specified entitlement.
|
48
|
+
* If the entitlement is not owned, it presents a paywall for the specified offering (if provided), or the
|
49
|
+
* default offering (if no offering is provided), to the user. The paywall will be presented
|
50
|
+
* allowing the user the opportunity to purchase the offering. The caller
|
51
|
+
* can decide whether to display a close button on the paywall through the `displayCloseButton`
|
52
|
+
* parameter. By default, the close button is displayed.
|
53
|
+
*
|
54
|
+
* @param {PresentPaywallIfNeededParams} params - The parameters for presenting the paywall.
|
55
|
+
* @returns {Promise<PAYWALL_RESULT>} A promise that resolves with the result of the paywall presentation.
|
56
|
+
*/
|
57
|
+
static presentPaywallIfNeeded({ requiredEntitlementIdentifier, offering, displayCloseButton }: PresentPaywallIfNeededParams): Promise<PAYWALL_RESULT>;
|
30
58
|
static Paywall: React.FC<PaywallViewProps>;
|
31
59
|
static PaywallFooterContainerView: React.FC<PaywallViewProps>;
|
32
60
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EAGd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EAGd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AACnG,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAY3E,KAAK,gBAAgB,GAAG;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAeF,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,MAAM,4BAA4B,GAAG,oBAAoB,GAAG;IAChE;;OAEG;IACH,6BAA6B,EAAE,MAAM,CAAC;CACvC,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAE/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAEtB;IAED;;;;OAIG;IACH,OAAc,cAAc,wBAAkB;IAE9C;;;;;;;;;OASG;WACW,cAAc,CAAC,EACE,QAAQ,EACR,kBAA+E,EAChF,GAAE,oBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAInF;;;;;;;;;;;;OAYG;WACW,sBAAsB,CAAC,EACE,6BAA6B,EAC7B,QAAQ,EACR,kBAA+E,EAChF,EAAE,4BAA4B,GAAG,OAAO,CAAC,cAAc,CAAC;IAI9F,OAAc,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAE/C;IAEF,OAAc,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAmClE;CACH"}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "react-native-purchases-ui",
|
3
3
|
"title": "React Native Purchases UI",
|
4
|
-
"version": "7.
|
4
|
+
"version": "7.17.1",
|
5
5
|
"description": "React Native in-app purchases and subscriptions made easy. Supports iOS and Android.",
|
6
6
|
"main": "lib/commonjs/index",
|
7
7
|
"module": "lib/module/index",
|
@@ -112,6 +112,6 @@
|
|
112
112
|
},
|
113
113
|
"dependencies": {
|
114
114
|
"@revenuecat/purchases-typescript-internal": "8.10.1",
|
115
|
-
"react-native-purchases": "7.
|
115
|
+
"react-native-purchases": "7.17.1"
|
116
116
|
}
|
117
117
|
}
|
package/src/index.tsx
CHANGED
@@ -9,7 +9,7 @@ import {
|
|
9
9
|
View,
|
10
10
|
type ViewStyle,
|
11
11
|
} from "react-native";
|
12
|
-
import { PAYWALL_RESULT } from "@revenuecat/purchases-typescript-internal";
|
12
|
+
import { PAYWALL_RESULT, type PurchasesOffering } from "@revenuecat/purchases-typescript-internal";
|
13
13
|
import React, { type ReactNode, useEffect, useState } from "react";
|
14
14
|
|
15
15
|
export { PAYWALL_RESULT } from "@revenuecat/purchases-typescript-internal";
|
@@ -47,6 +47,11 @@ export interface PresentPaywallParams {
|
|
47
47
|
* Whether to display the close button or not.
|
48
48
|
*/
|
49
49
|
displayCloseButton?: boolean;
|
50
|
+
|
51
|
+
/**
|
52
|
+
* The offering to load the paywall with. This will be the "current" offering by default.
|
53
|
+
*/
|
54
|
+
offering?: PurchasesOffering;
|
50
55
|
}
|
51
56
|
|
52
57
|
export type PresentPaywallIfNeededParams = PresentPaywallParams & {
|
@@ -58,6 +63,10 @@ export type PresentPaywallIfNeededParams = PresentPaywallParams & {
|
|
58
63
|
|
59
64
|
export default class RevenueCatUI {
|
60
65
|
|
66
|
+
private static Defaults = {
|
67
|
+
PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON: true
|
68
|
+
}
|
69
|
+
|
61
70
|
/**
|
62
71
|
* The result of presenting a paywall. This will be the last situation the user experienced before the paywall closed.
|
63
72
|
* @readonly
|
@@ -65,12 +74,42 @@ export default class RevenueCatUI {
|
|
65
74
|
*/
|
66
75
|
public static PAYWALL_RESULT = PAYWALL_RESULT;
|
67
76
|
|
68
|
-
|
69
|
-
|
77
|
+
/**
|
78
|
+
* Presents a paywall to the user with optional customization.
|
79
|
+
*
|
80
|
+
* This method allows for presenting a specific offering's paywall to the user. The caller
|
81
|
+
* can decide whether to display a close button on the paywall through the `displayCloseButton`
|
82
|
+
* parameter. By default, the close button is displayed.
|
83
|
+
*
|
84
|
+
* @param {PresentPaywallParams} params - The options for presenting the paywall.
|
85
|
+
* @returns {Promise<PAYWALL_RESULT>} A promise that resolves with the result of the paywall presentation.
|
86
|
+
*/
|
87
|
+
public static presentPaywall({
|
88
|
+
offering,
|
89
|
+
displayCloseButton = RevenueCatUI.Defaults.PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON
|
90
|
+
}: PresentPaywallParams = {}): Promise<PAYWALL_RESULT> {
|
91
|
+
return RNPaywalls.presentPaywall(offering?.identifier ?? null, displayCloseButton)
|
70
92
|
}
|
71
93
|
|
72
|
-
|
73
|
-
|
94
|
+
/**
|
95
|
+
* Presents a paywall to the user if a specific entitlement is not already owned.
|
96
|
+
*
|
97
|
+
* This method evaluates whether the user already owns the specified entitlement.
|
98
|
+
* If the entitlement is not owned, it presents a paywall for the specified offering (if provided), or the
|
99
|
+
* default offering (if no offering is provided), to the user. The paywall will be presented
|
100
|
+
* allowing the user the opportunity to purchase the offering. The caller
|
101
|
+
* can decide whether to display a close button on the paywall through the `displayCloseButton`
|
102
|
+
* parameter. By default, the close button is displayed.
|
103
|
+
*
|
104
|
+
* @param {PresentPaywallIfNeededParams} params - The parameters for presenting the paywall.
|
105
|
+
* @returns {Promise<PAYWALL_RESULT>} A promise that resolves with the result of the paywall presentation.
|
106
|
+
*/
|
107
|
+
public static presentPaywallIfNeeded({
|
108
|
+
requiredEntitlementIdentifier,
|
109
|
+
offering,
|
110
|
+
displayCloseButton = RevenueCatUI.Defaults.PRESENT_PAYWALL_DISPLAY_CLOSE_BUTTON
|
111
|
+
}: PresentPaywallIfNeededParams): Promise<PAYWALL_RESULT> {
|
112
|
+
return RNPaywalls.presentPaywallIfNeeded(requiredEntitlementIdentifier, offering?.identifier ?? null, displayCloseButton)
|
74
113
|
}
|
75
114
|
|
76
115
|
public static Paywall: React.FC<PaywallViewProps> = (props) => (
|