Skip to content

Commit a4e42d3

Browse files
Merge branch 'develop' of github.com:qonversion/flutter-sdk into feature/promoPurchases
2 parents 24abca9 + f997628 commit a4e42d3

File tree

9 files changed

+86
-9
lines changed

9 files changed

+86
-9
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ version '3.0.1'
33

44
buildscript {
55
ext.kotlin_version = '1.3.50'
6-
ext.qonversion_version = '2.7.6'
6+
ext.qonversion_version = '2.8.0'
77
repositories {
88
google()
99
jcenter()

android/src/main/kotlin/com/qonversion/flutter/sdk/qonversion_flutter_sdk/QonversionFlutterSdkPlugin.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ class QonversionFlutterSdkPlugin internal constructor(registrar: Registrar): Met
6666
"offerings" -> {
6767
return offerings(result)
6868
}
69+
"logout" -> {
70+
Qonversion.logout()
71+
return result.success(null)
72+
}
73+
"resetUser" -> {
74+
Qonversion.resetUser()
75+
return result.success(null)
76+
}
6977
}
7078

7179
// Methods with args
@@ -82,6 +90,7 @@ class QonversionFlutterSdkPlugin internal constructor(registrar: Registrar): Met
8290
"addAttributionData" -> addAttributionData(args, result)
8391
"checkTrialIntroEligibility" -> checkTrialIntroEligibility(args, result)
8492
"storeSdkInfo" -> storeSdkInfo(args, result)
93+
"identify" -> identify(args["userId"] as? String, result)
8594
else -> result.notImplemented()
8695
}
8796
}
@@ -108,6 +117,16 @@ class QonversionFlutterSdkPlugin internal constructor(registrar: Registrar): Met
108117
startListeningPendingPurchasesEvents()
109118
}
110119

120+
private fun identify(userId: String?, result: Result) {
121+
if (userId == null) {
122+
result.noUserIdError()
123+
return
124+
}
125+
126+
Qonversion.identify(userId)
127+
result.success(null)
128+
}
129+
111130
private fun startListeningPendingPurchasesEvents() {
112131
Qonversion.setUpdatedPurchasesListener(object : UpdatedPurchasesListener {
113132
override fun onPermissionsUpdate(permissions: Map<String, QPermission>) {

example/lib/home.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,15 @@ class _HomeViewState extends State<HomeView> {
102102
}
103103

104104
Future<void> initPlatformState() async {
105+
if (kDebugMode) {
106+
await Qonversion.setDebugMode();
107+
}
108+
105109
_qLaunchResult = await Qonversion.launch(
106110
'PV77YHL7qnGvsdmpTs7gimsxUvY-Znl2',
107111
isObserveMode: false,
108112
);
109113

110-
if (kDebugMode) {
111-
await Qonversion.setDebugMode();
112-
}
113-
114114
setState(() {});
115115
}
116116

ios/Classes/SwiftQonversionFlutterSdkPlugin.swift

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,15 @@ public class SwiftQonversionFlutterSdkPlugin: NSObject, FlutterPlugin {
5757

5858
case "offerings":
5959
return offerings(result)
60-
60+
61+
case "logout":
62+
Qonversion.logout()
63+
return result(nil)
64+
65+
case "resetUser":
66+
Qonversion.resetUser()
67+
return result(nil)
68+
6169
default:
6270
break
6371
}
@@ -95,6 +103,9 @@ public class SwiftQonversionFlutterSdkPlugin: NSObject, FlutterPlugin {
95103

96104
case "storeSdkInfo":
97105
return storeSdkInfo(args, result)
106+
107+
case "identify":
108+
return identify(args["userId"] as? String, result)
98109

99110
default:
100111
return result(FlutterMethodNotImplemented)
@@ -115,7 +126,17 @@ public class SwiftQonversionFlutterSdkPlugin: NSObject, FlutterPlugin {
115126
result(resultMap)
116127
}
117128
}
118-
129+
130+
private func identify(_ userId: String?, _ result: @escaping FlutterResult) {
131+
guard let userId = userId else {
132+
result(FlutterError.noUserId)
133+
return
134+
}
135+
136+
Qonversion.identify(userId)
137+
result(nil)
138+
}
139+
119140
private func products(_ result: @escaping FlutterResult) {
120141
Qonversion.products { (products, error) in
121142
if let error = error {

ios/qonversion_flutter.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
1616
s.source_files = 'Classes/**/*'
1717
s.dependency 'Flutter'
1818
s.platform = :ios, '9.0'
19-
s.dependency 'Qonversion', '2.13.3'
19+
s.dependency 'Qonversion', '2.13.4'
2020

2121
# Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported.
2222
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }

lib/src/constants.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ class Constants {
3434
static const mOfferings = 'offerings';
3535
static const mCheckTrialIntroEligibility = 'checkTrialIntroEligibility';
3636
static const mStoreSdkInfo = 'storeSdkInfo';
37+
static const mIdentify = 'identify';
38+
static const mResetUser = 'resetUser';
39+
static const mLogout = 'logout';
3740

3841
// Keys for NSUserDefaults on iOS and SharedPreferences on Android
3942
static const keyPrefix = 'com.qonversion.keys';

lib/src/qonversion.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@ class Qonversion {
6161
return QLaunchResult.fromJson(Map<String, dynamic>.from(rawResult));
6262
}
6363

64+
/// Call this function to link a user to his unique ID in your system and share purchase data.
65+
/// [userId] unique user ID in your system
66+
static Future<void> identify(String userId) =>
67+
_channel.invokeMethod(Constants.mIdentify, {Constants.kUserId: userId});
68+
69+
/// Call this function to unlink a user from his unique ID in your system and his purchase data.
70+
static Future<void> logout() => _channel.invokeMethod(Constants.mLogout);
71+
72+
/// Call this function to reset user ID and generate new anonymous user ID.
73+
/// Call this function before Qonversion.launch()
74+
static Future<void> resetUser() =>
75+
_channel.invokeMethod(Constants.mResetUser);
76+
6477
/// This method will send all purchases to the Qonversion backend. Call this every time when purchase is handled by you own implementation.
6578
///
6679
/// **Warning!**

macos/Classes/SwiftQonversionFlutterSdkPlugin.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ public class SwiftQonversionFlutterSdkPlugin: NSObject, FlutterPlugin {
5252

5353
case "offerings":
5454
return offerings(result)
55+
56+
case "logout":
57+
Qonversion.logout()
58+
return result(nil)
59+
60+
case "resetUser":
61+
Qonversion.resetUser()
62+
return result(nil)
5563

5664
default:
5765
break
@@ -87,6 +95,9 @@ public class SwiftQonversionFlutterSdkPlugin: NSObject, FlutterPlugin {
8795

8896
case "storeSdkInfo":
8997
return storeSdkInfo(args, result)
98+
99+
case "identify":
100+
return identify(args["userId"] as? String, result)
90101

91102
default:
92103
return result(FlutterMethodNotImplemented)
@@ -108,6 +119,16 @@ public class SwiftQonversionFlutterSdkPlugin: NSObject, FlutterPlugin {
108119
}
109120
}
110121

122+
private func identify(_ userId: String?, _ result: @escaping FlutterResult) {
123+
guard let userId = userId else {
124+
result(FlutterError.noUserId)
125+
return
126+
}
127+
128+
Qonversion.identify(userId)
129+
result(nil)
130+
}
131+
111132
private func products(_ result: @escaping FlutterResult) {
112133
Qonversion.products { (products, error) in
113134
if let error = error {

macos/qonversion_flutter.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
1616
s.source_files = 'Classes/**/*'
1717
s.dependency 'FlutterMacOS'
1818
s.platform = :osx, '10.12'
19-
s.dependency 'Qonversion', '2.13.3'
19+
s.dependency 'Qonversion', '2.13.4'
2020
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
2121
s.swift_version = '5.0'
2222
s.static_framework = true

0 commit comments

Comments
 (0)