Skip to content

Commit 5e25056

Browse files
Merge pull request #86 from qonversion/feature/readme
Feature/readme
2 parents 96e22f4 + 3199789 commit 5e25056

File tree

7 files changed

+109
-47
lines changed

7 files changed

+109
-47
lines changed

README.md

Lines changed: 85 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,34 @@
11
<p align="center">
2-
<a href="https://qonversion.io" target="_blank"><img width="360" height="150" src="https://qonversion.io/img/q_brand.svg"></a>
2+
<a href="https://qonversion.io" target="_blank"><img width="360" height="45" src="https://qcdn3.sfo3.digitaloceanspaces.com/github/qonversion_logo.png"></a>
33
</p>
44

5-
<p align="center">
6-
<a href="https://qonversion.io"><img width="660" src="https://qonversion.io/img/images/product-center.svg">
7-
</a>
8-
</p>
5+
Qonversion is the data platform to power in-app subscription revenue growth.
96

7+
* fast in-app subscriptions implementation
8+
* back-end infrastructure to validate user receipts
9+
* manage cross-platform user access to paid content on your app
10+
* comprehensive subscription analytics
11+
* out-of-the-box integrations with the leading marketing, attribution, and product analytics platforms
12+
* push notifications and in-app messaging to win back lapsed subscribers
13+
* A/B Testing for in-app purchases
1014

11-
<p>
12-
Qonversion provides full in-app purchases infrastructure, so you do not need to build your own server for receipt validation.
13-
</p>
14-
15-
16-
<p>
17-
Implement in-app subscriptions, validate user receipts, check subscription status, and provide access to your app features and content using our StoreKit wrapper and Google Play Billing wrapper.
15+
<p align="center">
16+
<a href="https://qonversion.io"><img width="90%" src="https://qcdn3.sfo3.digitaloceanspaces.com/github/qonversion_platform.png">
17+
</a>
1818
</p>
1919

20-
Check the [documentation](https://documentation.qonversion.io/docs) to learn details on implementing and using Qonversion SDKs.
21-
22-
[![Pub](https://img.shields.io/pub/v/qonversion_flutter.svg)](https://pub.dev/packages/qonversion_flutter)
23-
[![MIT License](https://img.shields.io/cocoapods/l/Qonversion.svg?style=flat)](https://qonversion.io)
20+
[![pub](https://img.shields.io/pub/v/qonversion_flutter)](https://pub.dev/packages/qonversion_flutter)
21+
[![MIT License](http://img.shields.io/cocoapods/l/Qonversion.svg?style=flat)](https://qonversion.io)
2422

2523

26-
## Product Center
24+
## How It Works: Product Center
2725

2826
<p align="center">
29-
<a href="https://qonversion.io"><img width="400" src="https://qonversion.io/img/images/product-center-scheme.svg">
27+
<a href="https://documentation.qonversion.io/docs/integrations-overview"><img width="90%" src="https://qcdn3.sfo3.digitaloceanspaces.com/github/qonversion_pc.png">
3028
</a>
3129
</p>
3230

33-
1. Application calls the purchase method to initialize Qonversion SDK.
31+
1. Application calls the purchase method of Qonversion SDK.
3432
2. Qonversion SDK communicates with StoreKit or Google Billing Client to make a purchase.
3533
3. If a purchase is successful, the SDK sends a request to Qonversion API for server-to-server purchase validation. Qonversion server receives accurate information on the in-app purchase status and user entitlements.
3634
4. SDK returns control to the application with a processing state.
@@ -40,20 +38,85 @@ Check the [documentation](https://documentation.qonversion.io/docs) to learn det
4038
Monitor your in-app revenue metrics. Understand your customers and make better decisions with precise subscription revenue data.
4139

4240
<p align="center">
43-
<a href="https://qonversion.io"><img width="90%" src="https://qonversion.io/img/screenshots/desktop/mobile_subscription_analytics.jpg">
41+
<a href="https://documentation.qonversion.io/docs/analytics"><img width="90%" src="https://qonversion.io/img/screenshots/desktop/mobile_subscription_analytics.jpg">
4442
</a>
4543
</p>
4644

4745
## Integrations
4846

49-
Share your iOS and Android in-app subscription data with your favorite platforms.
47+
Send subscription data to your favorite platforms Share your mobile and web subscription data using our powerful integrations.
48+
49+
<p align="center">
50+
<a href="https://documentation.qonversion.io/docs/integrations-overview"><img width="90%", src="https://qcdn3.sfo3.digitaloceanspaces.com/github/integrations.png">
51+
</a>
52+
</p>
53+
54+
## Personalized push notifications & in-app messaging
55+
56+
Qonversion allows sending automated, personalized push notifications and in-app messages initiated by in-app purchase events. This feature is designed to increase your app's revenue and retention, provide cancellation insights, reduce subscriber churn, and improve your subscribers' user experience.
57+
58+
59+
See more in the [documentation](https://documentation.qonversion.io/docs/automations)
60+
![](https://qonversion.io/img/@2x/automation/in-app-constructor.gif)
5061

62+
## A/B Testing for in-app purchases
63+
64+
Boost conversion rates with paywalls and in-app purchases A/B testing. Find the best pricing and paywall variations. Be flexible to prove hypotheses without app releases.
5165

5266
<p align="center">
53-
<a href="https://qonversion.io"><img width="500" src="https://qonversion.io/img/illustrations/pic-integration.svg">
67+
<a href="https://documentation.qonversion.io/docs/subscription-ab-testing"><img width="90%" src="https://qcdn3.sfo3.digitaloceanspaces.com/github/ab_test.png">
5468
</a>
5569
</p>
5670

71+
## Why Qonversion?
72+
73+
* **No headaches with Apple's StoreKit & Google Billing.** Qonversion provides simple methods to handle Apple StoreKit & Google Billing purchase flow.
74+
* **Receipt validation.** Qonversion validates user receipts with Apple and Google to provide 100% accurate purchase information and subscription statuses. It also prevents unauthorized access to the premium features of your app.
75+
* **Track and increase your revenue.** Qonversion provides detailed real-time revenue analytics including cohort analysis, trial conversion rates, country segmentation, and much more.
76+
* **Integrations with the leading mobile platforms.** Qonversion allows sending data to platforms like AppsFlyer, Adjust, Branch, Tenjin, Facebook Ads, Amplitude, Mixpanel, and many others.
77+
* **Change promoted in-app products.** Change promoted in-app products anytime without app releases.
78+
* **Win back lapsed subscribers.** Qonversion allows sending highly targeted push notifications triggered by server-side subscription events. You can send special offers to users who just canceled a free trial or a subscription. Plus you can deliver in-app messages with a beautiful native design that you create in Qonversion.
79+
* **A/B test** and identify winning in-app purchases, subscriptions or paywals.
80+
* **Cross-device and cross-platform access management.** If you provide user authorization in your app, you can easily set Qonversion to provide premium access to authorized users across devices and operating systems.
81+
* **SDK caches the data.** Qonversion SDK caches purchase data including in-app products and permissions, so the user experience is not affected even with the slow or interrupting network connection.
82+
* **Webhooks.** You can easily send all of the data to your server with Qonversion webhooks.
83+
* **Customer support.** You can always reach out to our customer support and get the help required.
84+
85+
Convinced? Let's go!
86+
87+
## Getting Started
88+
89+
1. [Create a project and register your app](https://documentation.qonversion.io/docs/quickstart#1-create-a-project-and-register-your-app)
90+
2. [Configure entitlements](https://documentation.qonversion.io/docs/quickstart#2-configure-products--permissions-entitlements)
91+
3. [Install the SDK](https://documentation.qonversion.io/docs/flutter-sdk)
92+
4. [Use all SDK features in a few lines](https://documentation.qonversion.io/docs/using-the-sdks)
93+
94+
## Documentation
95+
96+
Check the [documentation](https://docs.qonversion.io) to learn details on implementing and using Qonversion SDKs.
97+
98+
#### Help us improve the documentation
99+
100+
Whether you’re a core user or trying it out for the first time, you can make a valuable contribution to Qonversion by improving the documentation. Help us by:
101+
102+
* sending us feedback about something you thought was confusing or simply missing
103+
* sending us a pull request via GitHub
104+
* suggesting better wording or ways of explaining certain topics in the [Qonversion documentation](http://documentation.qonversion.io). Use `SUGGEST EDITS` button in the top right corner.
105+
106+
## Contributing
107+
108+
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
109+
110+
1. Fork the Project
111+
2. Create your Feature Branch (`git checkout -b feature/SuperFeature`)
112+
3. Commit your Changes. Use small commits with separate logic. (`git commit -m 'Add some super feature'`)
113+
4. Push to the Branch (`git push origin feature/SuperFeature`)
114+
5. Open a Pull Request
115+
116+
117+
## Have a question?
118+
119+
Contact us via [issues on GitHub](https://github.com/qonversion/flutter-sdk/issues) or [ask a question](https://documentation.qonversion.io/discuss-new) on the site.
57120

58121
## License
59122

lib/qonversion_flutter.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ export 'src/models/product_duration.dart';
1313
export 'src/models/product_renew_state.dart';
1414
export 'src/models/product_type.dart';
1515
export 'src/models/proration_mode.dart';
16-
export 'src/qonversion.dart';
16+
export 'src/qonversion.dart';

lib/src/models/sk_product/sk_product_wrapper.dart

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,15 @@ class SKProductWrapper {
9090
}
9191

9292
@override
93-
int get hashCode =>
94-
hashValues(
95-
this.productIdentifier,
96-
this.localizedTitle,
97-
this.localizedDescription,
98-
this.priceLocale,
99-
this.subscriptionGroupIdentifier,
100-
this.price,
101-
this.subscriptionPeriod,
102-
this.introductoryPrice);
93+
int get hashCode => hashValues(
94+
this.productIdentifier,
95+
this.localizedTitle,
96+
this.localizedDescription,
97+
this.priceLocale,
98+
this.subscriptionGroupIdentifier,
99+
this.price,
100+
this.subscriptionPeriod,
101+
this.introductoryPrice);
103102
}
104103

105104
/// Object that indicates the locale of the price

lib/src/models/utils/mapper.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ class QMapper {
7070
return SKPriceLocaleWrapper.fromJson(map);
7171
}
7272

73-
static SKProductSubscriptionPeriodWrapper? skProductSubscriptionPeriodFromJson(
74-
dynamic json) {
73+
static SKProductSubscriptionPeriodWrapper?
74+
skProductSubscriptionPeriodFromJson(dynamic json) {
7575
if (json == null) return null;
7676

7777
final map = Map<String, dynamic>.from(json);

lib/src/qonversion.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,8 @@ class Qonversion {
4040

4141
/// Yields an event each time a promo transaction happens on iOS.
4242
/// Returns App Store product ID
43-
static Stream<String> get promoPurchasesStream => _promoPurchasesEventChannel
44-
.receiveBroadcastStream()
45-
.cast<String>();
43+
static Stream<String> get promoPurchasesStream =>
44+
_promoPurchasesEventChannel.receiveBroadcastStream().cast<String>();
4645

4746
/// Initializes Qonversion SDK with the given API key.
4847
/// You can get one in your account on qonversion.io.
@@ -124,8 +123,8 @@ class Qonversion {
124123
final rawResult = await _channel.invokeMethod(Constants.mUpdatePurchase, {
125124
Constants.kNewProductId: newProductId,
126125
Constants.kOldProductId: oldProductId,
127-
Constants.kProrationMode: prorationMode != null ? prorationMode.index : null,
128-
126+
Constants.kProrationMode:
127+
prorationMode != null ? prorationMode.index : null,
129128
});
130129
return QMapper.permissionsFromJson(rawResult);
131130
}
@@ -236,7 +235,8 @@ class Qonversion {
236235
/// See [Offerings](https://qonversion.io/docs/offerings) for more details.
237236
/// See [Product Center](https://qonversion.io/docs/product-center) for more details.
238237
static Future<QOfferings> offerings() async {
239-
final offeringsString = await _channel.invokeMethod<String>(Constants.mOfferings);
238+
final offeringsString =
239+
await _channel.invokeMethod<String>(Constants.mOfferings);
240240

241241
return QMapper.offeringsFromJson(offeringsString);
242242
}

pubspec.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,14 @@ packages:
8484
name: built_collection
8585
url: "https://pub.dartlang.org"
8686
source: hosted
87-
version: "5.0.0"
87+
version: "5.1.0"
8888
built_value:
8989
dependency: transitive
9090
description:
9191
name: built_value
9292
url: "https://pub.dartlang.org"
9393
source: hosted
94-
version: "8.0.6"
94+
version: "8.1.0"
9595
characters:
9696
dependency: transitive
9797
description:
@@ -175,7 +175,7 @@ packages:
175175
name: file
176176
url: "https://pub.dartlang.org"
177177
source: hosted
178-
version: "6.1.1"
178+
version: "6.1.2"
179179
fixnum:
180180
dependency: transitive
181181
description:
@@ -297,7 +297,7 @@ packages:
297297
name: pedantic
298298
url: "https://pub.dartlang.org"
299299
source: hosted
300-
version: "1.11.0"
300+
version: "1.11.1"
301301
pool:
302302
dependency: transitive
303303
description:
@@ -344,7 +344,7 @@ packages:
344344
name: source_gen
345345
url: "https://pub.dartlang.org"
346346
source: hosted
347-
version: "1.0.1"
347+
version: "1.0.2"
348348
source_span:
349349
dependency: transitive
350350
description:

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: qonversion_flutter
2-
description: In-App Purchase Flutter plugin to implement subscriptions and in app purchases. Simple way to validate user receipts and manage cross-platform user access to paid content on your app. Android and iOS
2+
description: Flutter plugin to implement in-app subscriptions and purchases. Validate user receipts and manage cross-platform access to paid content on your app. Android & iOS.
33
version: 3.2.1
44
homepage: 'https://qonversion.io'
55
repository: 'https://github.com/qonversion/flutter-sdk'

0 commit comments

Comments
 (0)