diff --git a/android/build.gradle b/android/build.gradle index 794d5040..6e84658b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -36,6 +36,7 @@ android { dependencies { implementation 'com.segment.analytics.android:analytics:4.10.0' implementation 'com.segment.analytics.android.integrations:amplitude:3.0.3' + implementation 'com.appsflyer:segment-android-integration:6.5.2' } } diff --git a/android/src/main/java/com/example/flutter_segment/FlutterSegmentOptions.java b/android/src/main/java/com/example/flutter_segment/FlutterSegmentOptions.java index 3b225b0d..2c0975d9 100644 --- a/android/src/main/java/com/example/flutter_segment/FlutterSegmentOptions.java +++ b/android/src/main/java/com/example/flutter_segment/FlutterSegmentOptions.java @@ -8,12 +8,20 @@ public class FlutterSegmentOptions { private final String writeKey; private final Boolean trackApplicationLifecycleEvents; private final Boolean amplitudeIntegrationEnabled; + private final Boolean appsflyerIntegrationEnabled; private final Boolean debug; - public FlutterSegmentOptions(String writeKey, Boolean trackApplicationLifecycleEvents, Boolean amplitudeIntegrationEnabled,Boolean debug) { + public FlutterSegmentOptions( + String writeKey, + Boolean trackApplicationLifecycleEvents, + Boolean amplitudeIntegrationEnabled, + Boolean appsflyerIntegrationEnabled, + Boolean debug + ) { this.writeKey = writeKey; this.trackApplicationLifecycleEvents = trackApplicationLifecycleEvents; this.amplitudeIntegrationEnabled = amplitudeIntegrationEnabled; + this.appsflyerIntegrationEnabled = appsflyerIntegrationEnabled; this.debug = debug; } @@ -29,6 +37,10 @@ public Boolean isAmplitudeIntegrationEnabled() { return amplitudeIntegrationEnabled; } + public Boolean isAppsflyerIntegrationEnabled() { + return appsflyerIntegrationEnabled; + } + public Boolean getDebug() { return debug; } @@ -37,16 +49,18 @@ static FlutterSegmentOptions create(Bundle bundle) { String writeKey = bundle.getString("com.claimsforce.segment.WRITE_KEY"); Boolean trackApplicationLifecycleEvents = bundle.getBoolean("com.claimsforce.segment.TRACK_APPLICATION_LIFECYCLE_EVENTS"); Boolean isAmplitudeIntegrationEnabled = bundle.getBoolean("com.claimsforce.segment.ENABLE_AMPLITUDE_INTEGRATION", false); + Boolean isAppsflyerIntegrationEnabled = bundle.getBoolean("com.claimsforce.segment.ENABLE_APPSFLYER_INTEGRATION", false); Boolean debug = bundle.getBoolean("com.claimsforce.segment.DEBUG", false); - return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, debug); + return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, isAppsflyerIntegrationEnabled, debug); } static FlutterSegmentOptions create(HashMap options) { String writeKey = (String) options.get("writeKey"); Boolean trackApplicationLifecycleEvents = (Boolean) options.get("trackApplicationLifecycleEvents"); Boolean isAmplitudeIntegrationEnabled = orFalse((Boolean) options.get("amplitudeIntegrationEnabled")); + Boolean isAppsflyerIntegrationEnabled = orFalse((Boolean) options.get("appsflyerIntegrationEnabled")); Boolean debug = orFalse((Boolean) options.get("debug")); - return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, debug); + return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, isAppsflyerIntegrationEnabled, debug); } private static Boolean orFalse(Boolean value) { diff --git a/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java b/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java index 547e21e4..43331f54 100644 --- a/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java +++ b/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java @@ -15,6 +15,7 @@ import com.segment.analytics.Middleware; import com.segment.analytics.integrations.BasePayload; import com.segment.analytics.android.integrations.amplitude.AmplitudeIntegration; +import com.segment.analytics.android.integrations.appsflyer.AppsflyerIntegration; import static com.segment.analytics.Analytics.LogLevel; import java.util.LinkedHashMap; @@ -87,6 +88,10 @@ private void setupChannels(FlutterSegmentOptions options) { analyticsBuilder.use(AmplitudeIntegration.FACTORY); } + if (options.isAppsflyerIntegrationEnabled()) { + analyticsBuilder.use(AppsflyerIntegration.FACTORY); + } + // Here we build a middleware that just appends data to the current context // using the [deepMerge] strategy. analyticsBuilder.middleware( diff --git a/example/lib/generated_plugin_registrant.dart b/example/lib/generated_plugin_registrant.dart index 40bfcb8b..1db9790c 100644 --- a/example/lib/generated_plugin_registrant.dart +++ b/example/lib/generated_plugin_registrant.dart @@ -5,9 +5,8 @@ // ignore_for_file: directives_ordering // ignore_for_file: lines_longer_than_80_chars -// ignore: implementation_imports import 'package:flutter_segment/src/segment_web.dart'; - +// ignore: implementation_imports import 'package:flutter_web_plugins/flutter_web_plugins.dart'; // ignore: public_member_api_docs diff --git a/ios/Classes/FlutterSegmentPlugin.m b/ios/Classes/FlutterSegmentPlugin.m index b5aea645..2c7b1245 100644 --- a/ios/Classes/FlutterSegmentPlugin.m +++ b/ios/Classes/FlutterSegmentPlugin.m @@ -1,3 +1,4 @@ +#import "SEGAppsFlyerIntegrationFactory.h" #import "FlutterSegmentPlugin.h" #import #import @@ -364,6 +365,7 @@ + (SEGAnalyticsConfiguration*)createConfigFromDict:(NSDictionary*) dict { NSString *writeKey = [dict objectForKey: @"writeKey"]; BOOL trackApplicationLifecycleEvents = [[dict objectForKey: @"trackApplicationLifecycleEvents"] boolValue]; BOOL isAmplitudeIntegrationEnabled = [[dict objectForKey: @"amplitudeIntegrationEnabled"] boolValue]; + BOOL isAppsflyerIntegrationEnabled = [[dict objectForKey: @"appsflyerIntegrationEnabled"] boolValue]; SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:writeKey]; configuration.trackApplicationLifecycleEvents = trackApplicationLifecycleEvents; @@ -371,6 +373,10 @@ + (SEGAnalyticsConfiguration*)createConfigFromDict:(NSDictionary*) dict { [configuration use:[SEGAmplitudeIntegrationFactory instance]]; } + if (isAppsflyerIntegrationEnabled) { + [configuration use:[SEGAppsFlyerIntegrationFactory instance]]; + } + return configuration; } diff --git a/ios/flutter_segment.podspec b/ios/flutter_segment.podspec index dd86f8d1..40d406a0 100644 --- a/ios/flutter_segment.podspec +++ b/ios/flutter_segment.podspec @@ -17,6 +17,7 @@ A new flutter plugin project. s.dependency 'Flutter' s.dependency 'Analytics', '4.1.6' s.dependency 'Segment-Amplitude', '3.3.2' + s.dependency 'segment-appsflyer-ios', '6.5.2' s.ios.deployment_target = '11.0' # Added because Segment-Amplitude dependencies on iOS cause this error: diff --git a/lib/src/segment_config.dart b/lib/src/segment_config.dart index 906cda69..6dbdd660 100644 --- a/lib/src/segment_config.dart +++ b/lib/src/segment_config.dart @@ -3,12 +3,14 @@ class SegmentConfig { required this.writeKey, this.trackApplicationLifecycleEvents = false, this.amplitudeIntegrationEnabled = false, + this.appsflyerIntegrationEnabled = false, this.debug = false, }); final String writeKey; final bool trackApplicationLifecycleEvents; final bool amplitudeIntegrationEnabled; + final bool appsflyerIntegrationEnabled; final bool debug; Map toMap() { @@ -16,6 +18,7 @@ class SegmentConfig { 'writeKey': writeKey, 'trackApplicationLifecycleEvents': trackApplicationLifecycleEvents, 'amplitudeIntegrationEnabled': amplitudeIntegrationEnabled, + 'appsflyerIntegrationEnabled': appsflyerIntegrationEnabled, 'debug': debug, }; }