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 @@ { isObserveMode: false, ); + Qonversion.setAppleSearchAdsAttributionEnabled(true); + setState(() {}); } diff --git a/ios/Classes/SwiftQonversionFlutterSdkPlugin.swift b/ios/Classes/SwiftQonversionFlutterSdkPlugin.swift index ee313877..3d351cc6 100644 --- a/ios/Classes/SwiftQonversionFlutterSdkPlugin.swift +++ b/ios/Classes/SwiftQonversionFlutterSdkPlugin.swift @@ -102,6 +102,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) @@ -336,6 +340,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 d062ad41..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.1' + 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/lib/src/constants.dart b/lib/src/constants.dart index 4d9d5f7f..a638bb92 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'; @@ -38,6 +39,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 2faa24c1..91337a86 100644 --- a/lib/src/qonversion.dart +++ b/lib/src/qonversion.dart @@ -296,6 +296,16 @@ 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 null; + } + + 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 d31def41..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.1' + s.dependency 'Qonversion', '2.18.3' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.swift_version = '5.0' s.static_framework = true