Skip to content

Commit ab8726d

Browse files
Release 3.15.1
Merge pull request #264 from adaptyteam/dev
2 parents 8e15e9f + f298688 commit ab8726d

36 files changed

+5446
-830
lines changed

README.md

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,21 @@
2323

2424
![Adapty: CRM for mobile apps with subscriptions](https://adapty-portal-media-production.s3.amazonaws.com/github/adapty-schema.png)
2525

26-
Adapty SDK is an open-source framework that makes implementing in-app subscriptions for React Native fast and easy. It’s 100% open-source and lightweight.
26+
Adapty SDK is an open-source framework that makes implementing in-app subscriptions for React Native fast and easy. It's 100% open-source and lightweight.
27+
28+
## Table of Contents
29+
30+
- [Why Adapty?](#why-adapty)
31+
- [Getting Started](#getting-started)
32+
- [Integrate IAPs within a few hours without server coding](#integrate-iaps-within-a-few-hours-without-server-coding)
33+
- [Design paywalls in the no-code builder](#design-paywalls-in-the-no-code-builder)
34+
- [Test paywalls & prices on React Native without app releases](#test-paywalls--prices-on-react-native-without-app-releases)
35+
- [Real-time analytics for your React Native app](#real-time-analytics-for-your-react-native-app)
36+
- [Mobile app monetization's largest community](#mobile-app-monetizations-largest-community)
37+
- [React Native Architecture Compatibility](#react-native-architecture-compatibility)
38+
- [Examples](#examples)
39+
- [Contributing](#contributing)
40+
- [License](#license)
2741

2842
## Why Adapty?
2943

@@ -39,6 +53,27 @@ Adapty SDK is an open-source framework that makes implementing in-app subscripti
3953
<a href="https://adapty.io/schedule-demo?utm_source=github&utm_medium=referral&utm_campaign=AdaptySDK-React-Native_schedule-demo">Talk to Us to Learn More</a>
4054
</h3>
4155

56+
## Getting Started
57+
58+
### For React Native projects:
59+
60+
```sh
61+
# using npm
62+
npm install react-native-adapty
63+
64+
# or using yarn
65+
yarn add react-native-adapty
66+
```
67+
68+
### For Expo projects:
69+
70+
```sh
71+
npx expo install react-native-adapty
72+
npx expo prebuild
73+
```
74+
75+
Read the [documentation](https://adapty.io/docs/sdk-installation-reactnative?utm_source=github&utm_medium=referral&utm_campaign=AdaptySDK-React-Native) to install and configure Adapty SDK. Set up purchases in hours instead of weeks :rocket:
76+
4277
## Integrate IAPs within a few hours without server coding
4378

4479
**Adapty handles everything, from free trials to refunds, in a simple, developer-friendly SDK.**
@@ -78,28 +113,6 @@ Ask questions, participate in discussions about Adapty-related topics, become a
78113

79114
<a href="https://discord.gg/subscriptions-hub"><img src="https://adapty-portal-media-production.s3.amazonaws.com/github/join-discord.svg" /></a>
80115

81-
82-
## Getting Started
83-
84-
### For React Native projects:
85-
86-
```sh
87-
# using npm
88-
npm install react-native-adapty
89-
90-
# or using yarn
91-
yarn add react-native-adapty
92-
```
93-
94-
### For Expo projects:
95-
96-
```sh
97-
npx expo install react-native-adapty
98-
npx expo prebuild
99-
```
100-
101-
Read the [documentation](https://adapty.io/docs/sdk-installation-reactnative?utm_source=github&utm_medium=referral&utm_campaign=AdaptySDK-React-Native) to install and configure Adapty SDK. Set up purchases in hours instead of weeks :rocket:
102-
103116
## React Native Architecture Compatibility
104117

105118
Adapty SDK is compatible with both **React Native's New Architecture** (including Turbo Modules) and the legacy architecture.
@@ -110,7 +123,8 @@ Adapty SDK is compatible with both **React Native's New Architecture** (includin
110123
We provide several example applications with increasing complexity:
111124

112125
- **[BasicExample](./examples/BasicExample/)** (React Native) – Minimal setup example showing core SDK features.
113-
- **[FocusJournalExpo](./examples/FocusJournalExpo/)** (Expo) – Full-featured app with navigation and premium features.
126+
- **[ExpoGoWebMock](./examples/ExpoGoWebMock/)** (Expo Go / Expo Web) – Easiest to run (works in browser with mock mode, no Adapty key required). Demonstrates mock data usage for Expo Go/Web. Includes both custom paywall and Adapty Paywall Builder.
127+
- **[FocusJournalExpo](./examples/FocusJournalExpo/)** (Expo) – Simple app with premium features using Adapty Paywall Builder. Includes video guide.
114128
- **[AdaptyDevtools](./examples/AdaptyDevtools/)** (React Native) – DevTools and bug reporting tool.
115129

116130
📹 **Watch our video guide** for step-by-step integration with the Focus Journal Expo example:

android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,10 @@ def getExtOrDefault(name) {
110110
def kotlin_version = getExtOrDefault('kotlinVersion')
111111

112112
dependencies {
113-
implementation platform('io.adapty:adapty-bom:3.15.1')
113+
implementation platform('io.adapty:adapty-bom:3.15.2')
114114
implementation 'io.adapty:android-sdk'
115115
implementation 'io.adapty:android-ui'
116-
implementation 'io.adapty.internal:crossplatform:3.15.2'
116+
implementation 'io.adapty.internal:crossplatform:3.15.3'
117117

118118
// Compatible with older and newer RN
119119
//noinspection GradleDynamicVersion

cross_platform.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
$schema: "https://json-schema.org/draft/2020-12/schema"
2-
$id: "https://adapty.io/crossPlatform/3.15.1/schema"
2+
$id: "https://adapty.io/crossPlatform/3.15.2/schema"
33
title: "Cross Platform Format"
44

55
$requests:
@@ -412,6 +412,7 @@ $requests:
412412
properties:
413413
paywall: { $ref: "#/$defs/AdaptyPaywall" }
414414

415+
415416
OpenWebPaywall.Response: #response
416417
type: object
417418
oneOf:
@@ -931,6 +932,7 @@ $defs:
931932
google_enable_pending_prepaid_plans: { type: boolean, default: false }
932933
google_local_access_level_allowed: { type: boolean, default: false }
933934
ip_address_collection_disabled: { type: boolean, default: false }
935+
clear_data_on_backup: { type: boolean, default: false }
934936
server_cluster: { type: string, enum: ["default", "eu", "cn"] }
935937
backend_proxy_host: { type: string }
936938
backend_proxy_port: { type: integer }

examples/AdaptyDevtools/ios/Podfile.lock

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
PODS:
2-
- Adapty (3.15.1):
3-
- AdaptyLogger (= 3.15.1)
4-
- AdaptyUIBuilder (= 3.15.1)
5-
- AdaptyLogger (3.15.1)
6-
- AdaptyPlugin (3.15.1):
7-
- Adapty (= 3.15.1)
8-
- AdaptyLogger (= 3.15.1)
9-
- AdaptyUI (= 3.15.1)
10-
- AdaptyUIBuilder (= 3.15.1)
11-
- AdaptyUI (3.15.1):
12-
- Adapty (= 3.15.1)
13-
- AdaptyLogger (= 3.15.1)
14-
- AdaptyUIBuilder (= 3.15.1)
15-
- AdaptyUIBuilder (3.15.1):
16-
- AdaptyLogger (= 3.15.1)
2+
- Adapty (3.15.3):
3+
- AdaptyLogger (= 3.15.3)
4+
- AdaptyUIBuilder (= 3.15.3)
5+
- AdaptyLogger (3.15.3)
6+
- AdaptyPlugin (3.15.3):
7+
- Adapty (= 3.15.3)
8+
- AdaptyLogger (= 3.15.3)
9+
- AdaptyUI (= 3.15.3)
10+
- AdaptyUIBuilder (= 3.15.3)
11+
- AdaptyUI (3.15.3):
12+
- Adapty (= 3.15.3)
13+
- AdaptyLogger (= 3.15.3)
14+
- AdaptyUIBuilder (= 3.15.3)
15+
- AdaptyUIBuilder (3.15.3):
16+
- AdaptyLogger (= 3.15.3)
1717
- boost (1.84.0)
1818
- DoubleConversion (1.1.6)
1919
- fast_float (8.0.0)
@@ -1663,10 +1663,10 @@ PODS:
16631663
- React-RCTFBReactNativeSpec
16641664
- ReactCommon/turbomodule/core
16651665
- SocketRocket
1666-
- react-native-adapty-sdk (3.15.0):
1667-
- Adapty (= 3.15.1)
1668-
- AdaptyPlugin (= 3.15.1)
1669-
- AdaptyUI (= 3.15.1)
1666+
- react-native-adapty-sdk (3.15.1):
1667+
- Adapty (= 3.15.3)
1668+
- AdaptyPlugin (= 3.15.3)
1669+
- AdaptyUI (= 3.15.3)
16701670
- React
16711671
- react-native-safe-area-context (5.4.1):
16721672
- boost
@@ -2538,11 +2538,11 @@ EXTERNAL SOURCES:
25382538
:path: "../node_modules/react-native/ReactCommon/yoga"
25392539

25402540
SPEC CHECKSUMS:
2541-
Adapty: bb2cc10a238b5d53025a0a969bc2a7ad6e9a48f5
2542-
AdaptyLogger: 2d1a3cc8b8dee29dc171df753d6b6d45332bd399
2543-
AdaptyPlugin: 79f4d39bcaa84ad3755fe0f0a07148abca2af4ed
2544-
AdaptyUI: 56ff8ed7be49cbff9cdc29ddde230de60e115d4f
2545-
AdaptyUIBuilder: 3204524ee377de2eddec478d51c3cf1f1e83ef1c
2541+
Adapty: 9d5c8378ddf71747e5182ae9dd3426b2a4dc274a
2542+
AdaptyLogger: 8a58745fe27ac991d2b2f05de57bfa9d932383ca
2543+
AdaptyPlugin: d832e606563b2cc3e77dbc4ca23e64725a3b21c5
2544+
AdaptyUI: 7b8515dade06d8a046826f024940c009bedb5f00
2545+
AdaptyUIBuilder: e94ea218d936f58f13123fda19f3c13fba5cdb7d
25462546
boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
25472547
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
25482548
fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6
@@ -2583,7 +2583,7 @@ SPEC CHECKSUMS:
25832583
React-logger: b69e65dc60f768e5509ac0cc27a360124bf70478
25842584
React-Mapbuffer: b48f9f3311fd0ec0f7a5dc39d707eff521fb5f38
25852585
React-microtasksnativemodule: d8568d0485a350c720c061ae835e09fc88c28715
2586-
react-native-adapty-sdk: 39e2fb1607910e7d719e291281516864846792f1
2586+
react-native-adapty-sdk: 765bc4b65a425b4f77e370d9b8e33ddcd046c578
25872587
react-native-safe-area-context: 6775aa9089fa84b77abd7ebdcf45e224a2a2ad3e
25882588
React-NativeModulesApple: f10596688a03af66804cfbe61792be24a7888da8
25892589
React-oscompat: 7c0a341cc31e350da71ddf2e46de0a845d1d1626

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://json.schemastore.org/package",
33
"name": "react-native-adapty",
4-
"version": "3.15.0",
4+
"version": "3.15.1",
55
"description": "Adapty React Native SDK",
66
"license": "MIT",
77
"author": "Adapty team <support@adapty.io>",

react-native-adapty-sdk.podspec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ Pod::Spec.new do |s|
1919
s.resources = "ios/**/*.{plist}"
2020
s.requires_arc = true
2121

22-
s.dependency "Adapty", "3.15.1"
23-
s.dependency "AdaptyUI", "3.15.1"
24-
s.dependency "AdaptyPlugin", "3.15.1"
22+
s.dependency "Adapty", "3.15.3"
23+
s.dependency "AdaptyUI", "3.15.3"
24+
s.dependency "AdaptyPlugin", "3.15.3"
2525
s.dependency "React"
2626
end
2727

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/**
2+
* Bridge event samples for general Adapty handler events
3+
*
4+
* Real event data extracted from native logs for accurate testing.
5+
*
6+
* Use these samples for integration tests to verify event handling.
7+
*/
8+
9+
/**
10+
* Sample for Event.DidLoadLatestProfile with active premium subscription
11+
* @see cross_platform.yaml#/$events/Event.DidLoadLatestProfile
12+
*/
13+
export const PROFILE_DID_LOAD_LATEST_WITH_PREMIUM = {
14+
id: 'did_load_latest_profile',
15+
profile: {
16+
paid_access_levels: {
17+
premium: {
18+
activated_at: '2025-12-26T13:36:09.931000+0000',
19+
expires_at: '2025-12-26T13:41:09.549000+0000',
20+
id: 'premium',
21+
is_active: true,
22+
is_in_grace_period: false,
23+
is_lifetime: false,
24+
is_refund: false,
25+
renewed_at: '2025-12-26T13:36:09.931000+0000',
26+
store: 'play_store',
27+
vendor_product_id: 'weekly.premium.599',
28+
will_renew: true,
29+
},
30+
},
31+
custom_attributes: {},
32+
is_test_user: false,
33+
non_subscriptions: {},
34+
profile_id: 'cbdabead-697c-4804-9ea5-7ccaa83411c7',
35+
subscriptions: {
36+
'weekly.premium.599': {
37+
activated_at: '2025-12-26T13:36:09.931000+0000',
38+
expires_at: '2025-12-26T13:41:09.549000+0000',
39+
is_active: true,
40+
is_in_grace_period: false,
41+
is_lifetime: false,
42+
is_refund: false,
43+
is_sandbox: true,
44+
renewed_at: '2025-12-26T13:36:09.931000+0000',
45+
store: 'play_store',
46+
vendor_original_transaction_id: 'GPA.3338-3241-1006-23335',
47+
vendor_product_id: 'weekly.premium.599',
48+
vendor_transaction_id: 'GPA.3338-3241-1006-23335',
49+
will_renew: true,
50+
},
51+
},
52+
segment_hash: 'not implemented',
53+
timestamp: -1,
54+
},
55+
} as const;
56+
57+
/**
58+
* Sample for Event.DidLoadLatestProfile with empty profile (no subscriptions)
59+
* @see cross_platform.yaml#/$events/Event.DidLoadLatestProfile
60+
*/
61+
export const PROFILE_DID_LOAD_LATEST_EMPTY = {
62+
id: 'did_load_latest_profile',
63+
profile: {
64+
profile_id: '8b79ec26-3f3d-482c-99e8-ec745710ef59',
65+
customer_user_id: null,
66+
segment_hash:
67+
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
68+
paid_access_levels: {},
69+
subscriptions: {},
70+
non_subscriptions: {},
71+
},
72+
} as const;
73+
74+
/**
75+
* Sample for Event.OnInstallationDetailsSuccess
76+
* @see cross_platform.yaml#/$events/Event.OnInstallationDetailsSuccess
77+
*/
78+
export const INSTALLATION_DETAILS_SUCCESS = {
79+
id: 'on_installation_details_success',
80+
details: {
81+
app_launch_count: 8,
82+
payload: '{}',
83+
install_time: '2025-12-16T12:08:41.041Z',
84+
install_id: 'some-install-id',
85+
},
86+
} as const;

0 commit comments

Comments
 (0)