From 0d0fef9deefa55589f841d388e0868af3ef8dc19 Mon Sep 17 00:00:00 2001 From: Maria-Bordunova Date: Wed, 16 Feb 2022 19:01:42 +0300 Subject: [PATCH 1/4] Add setAppleSearchAdsAttributionEnabled() method --- example/lib/home.dart | 2 ++ ios/Classes/SwiftQonversionFlutterSdkPlugin.swift | 11 +++++++++++ ios/qonversion_flutter.podspec | 2 +- lib/src/constants.dart | 3 +++ lib/src/qonversion.dart | 9 +++++++++ macos/qonversion_flutter.podspec | 2 +- 6 files changed, 27 insertions(+), 2 deletions(-) diff --git a/example/lib/home.dart b/example/lib/home.dart index b7de8025..b851470b 100644 --- a/example/lib/home.dart +++ b/example/lib/home.dart @@ -111,6 +111,8 @@ class _HomeViewState extends State { isObserveMode: false, ); + Qonversion.setAppleSearchAdsAttributionEnabled(true); + setState(() {}); } diff --git a/ios/Classes/SwiftQonversionFlutterSdkPlugin.swift b/ios/Classes/SwiftQonversionFlutterSdkPlugin.swift index a5e56977..82252ae2 100644 --- a/ios/Classes/SwiftQonversionFlutterSdkPlugin.swift +++ b/ios/Classes/SwiftQonversionFlutterSdkPlugin.swift @@ -105,6 +105,10 @@ public class SwiftQonversionFlutterSdkPlugin: NSObject, FlutterPlugin { case "identify": return identify(args["userId"] as? String, result) + + case "setAppleSearchAdsAttributionEnabled": + let enable = args["enable"] as? Bool ?? false + return setAppleSearchAdsAttributionEnabled(enable, result) default: return result(FlutterMethodNotImplemented) @@ -349,6 +353,13 @@ public class SwiftQonversionFlutterSdkPlugin: NSObject, FlutterPlugin { result(nil) } + + private func setAppleSearchAdsAttributionEnabled(_ enable: Bool, _ result: @escaping FlutterResult) { + if enable { + Qonversion.setAppleSearchAdsAttributionEnabled(enable) + } + result(nil) + } } extension SwiftQonversionFlutterSdkPlugin: Qonversion.PurchasesDelegate { diff --git a/ios/qonversion_flutter.podspec b/ios/qonversion_flutter.podspec index ca09ca67..4297ef64 100644 --- a/ios/qonversion_flutter.podspec +++ b/ios/qonversion_flutter.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| s.source_files = 'Classes/**/*' s.dependency 'Flutter' s.platform = :ios, '9.0' - s.dependency 'Qonversion', '2.17.1' + s.dependency 'Qonversion', '2.18.2' # Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' } diff --git a/lib/src/constants.dart b/lib/src/constants.dart index d89ada98..604bb6a5 100644 --- a/lib/src/constants.dart +++ b/lib/src/constants.dart @@ -16,6 +16,7 @@ class Constants { static const kProperty = 'property'; static const kValue = 'value'; static const kProrationMode = 'proration_mode'; + static const kEnableAppleSearchAdsAttribution = 'enable'; // MethodChannel methods names static const mLaunch = 'launch'; @@ -39,6 +40,8 @@ class Constants { static const mStoreSdkInfo = 'storeSdkInfo'; static const mIdentify = 'identify'; static const mLogout = 'logout'; + static const mSetAppleSearchAdsAttributionEnabled = + 'setAppleSearchAdsAttributionEnabled'; // Keys for NSUserDefaults on iOS and SharedPreferences on Android static const keyPrefix = 'com.qonversion.keys'; diff --git a/lib/src/qonversion.dart b/lib/src/qonversion.dart index 0b238f28..73abdf60 100644 --- a/lib/src/qonversion.dart +++ b/lib/src/qonversion.dart @@ -294,6 +294,15 @@ class Qonversion { return QMapper.eligibilityFromJson(eligibilitiesString); } + /// Enable attribution collection from Apple Search Ads. NO by default. + static Future setAppleSearchAdsAttributionEnabled(bool enable) async { + if (Platform.isIOS) { + return _channel.invokeMethod( + Constants.mSetAppleSearchAdsAttributionEnabled, + {Constants.kEnableAppleSearchAdsAttribution: enable}); + } + } + // Private methods static Future _storeSdkInfo() => _channel.invokeMethod(Constants.mStoreSdkInfo, { diff --git a/macos/qonversion_flutter.podspec b/macos/qonversion_flutter.podspec index 191c486d..8bcafe1d 100644 --- a/macos/qonversion_flutter.podspec +++ b/macos/qonversion_flutter.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| s.source_files = 'Classes/**/*' s.dependency 'FlutterMacOS' s.platform = :osx, '10.12' - s.dependency 'Qonversion', '2.17.1' + s.dependency 'Qonversion', '2.18.2' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.swift_version = '5.0' s.static_framework = true From 2f309c3ceb40e056927f19ee2ede9a9ac2e5e767 Mon Sep 17 00:00:00 2001 From: Maria-Bordunova Date: Wed, 16 Feb 2022 19:39:10 +0300 Subject: [PATCH 2/4] Fix for Android v2 embedding (sample app) --- example/android/app/src/main/AndroidManifest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index b0b5a1ec..e04a4f83 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -10,7 +10,6 @@ Date: Thu, 17 Feb 2022 19:47:06 +0300 Subject: [PATCH 3/4] Update native iOS dependency to 2.18.3 --- ios/qonversion_flutter.podspec | 2 +- macos/qonversion_flutter.podspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/qonversion_flutter.podspec b/ios/qonversion_flutter.podspec index 4297ef64..f56a85e1 100644 --- a/ios/qonversion_flutter.podspec +++ b/ios/qonversion_flutter.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| s.source_files = 'Classes/**/*' s.dependency 'Flutter' s.platform = :ios, '9.0' - s.dependency 'Qonversion', '2.18.2' + s.dependency 'Qonversion', '2.18.3' # Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' } diff --git a/macos/qonversion_flutter.podspec b/macos/qonversion_flutter.podspec index 8bcafe1d..0de06989 100644 --- a/macos/qonversion_flutter.podspec +++ b/macos/qonversion_flutter.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| s.source_files = 'Classes/**/*' s.dependency 'FlutterMacOS' s.platform = :osx, '10.12' - s.dependency 'Qonversion', '2.18.2' + s.dependency 'Qonversion', '2.18.3' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.swift_version = '5.0' s.static_framework = true From 38f1b67c13afb10df2696d980211c2c72d2db79b Mon Sep 17 00:00:00 2001 From: Maria-Bordunova Date: Mon, 21 Feb 2022 14:36:08 +0300 Subject: [PATCH 4/4] Apply suggestions from code review --- lib/src/qonversion.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/src/qonversion.dart b/lib/src/qonversion.dart index 73abdf60..c5b986e0 100644 --- a/lib/src/qonversion.dart +++ b/lib/src/qonversion.dart @@ -296,11 +296,12 @@ class Qonversion { /// Enable attribution collection from Apple Search Ads. NO by default. static Future setAppleSearchAdsAttributionEnabled(bool enable) async { - if (Platform.isIOS) { - return _channel.invokeMethod( - Constants.mSetAppleSearchAdsAttributionEnabled, - {Constants.kEnableAppleSearchAdsAttribution: enable}); + if (!Platform.isIOS) { + return null; } + + return _channel.invokeMethod(Constants.mSetAppleSearchAdsAttributionEnabled, + {Constants.kEnableAppleSearchAdsAttribution: enable}); } // Private methods