From 25a5806c62c188005014b2a5b0a9b3b58a4a0f00 Mon Sep 17 00:00:00 2001 From: Shubham Date: Mon, 7 Feb 2022 12:19:30 +0530 Subject: [PATCH 1/5] Add webengage integration flow --- .DS_Store | Bin 8196 -> 8196 bytes android/build.gradle | 1 + .../FlutterSegmentOptions.java | 14 +++++++++++--- .../flutter_segment/FlutterSegmentPlugin.java | 5 +++++ example/pubspec.lock | 2 +- ios/Classes/FlutterSegmentPlugin.m | 10 ++++++++++ ios/flutter_segment.podspec | 1 + lib/src/segment_config.dart | 3 +++ 8 files changed, 32 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index 04bbfa6363160952aa4d92a3ebb635df4b891467..d8f10d3d7fadb8b7af7527af62c974d42f376b10 100644 GIT binary patch delta 57 zcmZp1XmOa}FDTEzz`)4BAi$85ZWx@LpIfl8a2or>2Eonj94s7+@|(8^EN9ugnJ0vK NGrPn$mW>tc%mBUl5NH4Z delta 230 zcmZp1XmOa}FRIMIz`)4BAi%&-!VnL{`9PSnF>x{bW_Au1j(U(Z7lR%{3PU185wen; zbi?4}{M-VdJP;^d0uor&<>tG%B<18M0p&T;br!5yI^nP*ZnY_BYPE1HF33Q3fCIy3 a9)aa78`IY?ZDyDF#xglnByMB+N+tlMAU13O diff --git a/android/build.gradle b/android/build.gradle index 794d5040..0ebf02a7 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -34,6 +34,7 @@ android { } dependencies { + implementation 'com.webengage:android-segment:2.+' implementation 'com.segment.analytics.android:analytics:4.10.0' implementation 'com.segment.analytics.android.integrations:amplitude:3.0.3' } 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..991a2a9a 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,14 @@ public class FlutterSegmentOptions { private final String writeKey; private final Boolean trackApplicationLifecycleEvents; private final Boolean amplitudeIntegrationEnabled; + private final Boolean webEngageIntegrationEnabled; private final Boolean debug; - public FlutterSegmentOptions(String writeKey, Boolean trackApplicationLifecycleEvents, Boolean amplitudeIntegrationEnabled,Boolean debug) { + public FlutterSegmentOptions(String writeKey, Boolean trackApplicationLifecycleEvents, Boolean amplitudeIntegrationEnabled, Boolean webEngageIntegrationEnabled, Boolean debug) { this.writeKey = writeKey; this.trackApplicationLifecycleEvents = trackApplicationLifecycleEvents; this.amplitudeIntegrationEnabled = amplitudeIntegrationEnabled; + this.webEngageIntegrationEnabled = webEngageIntegrationEnabled; this.debug = debug; } @@ -29,6 +31,10 @@ public Boolean isAmplitudeIntegrationEnabled() { return amplitudeIntegrationEnabled; } + public Boolean isWebEngageIntegrationEnabled() { + return webEngageIntegrationEnabled; + } + public Boolean getDebug() { return debug; } @@ -37,16 +43,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 isWebEngageIntegrationEnabled = bundle.getBoolean("com.claimsforce.segment.ENABLE_WEBENGAGE_INTEGRATION", false); Boolean debug = bundle.getBoolean("com.claimsforce.segment.DEBUG", false); - return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, debug); + return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, isWebEngageIntegrationEnabled, 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 isWebEngageIntegrationEnabled = orFalse((Boolean) options.get("webEngageIntegrationEnabled")); Boolean debug = orFalse((Boolean) options.get("debug")); - return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, debug); + return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, isWebEngageIntegrationEnabled, 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..16adaa05 100644 --- a/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java +++ b/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java @@ -16,6 +16,7 @@ import com.segment.analytics.integrations.BasePayload; import com.segment.analytics.android.integrations.amplitude.AmplitudeIntegration; import static com.segment.analytics.Analytics.LogLevel; +import com.webengage.sdk.android.integrations.segment.WebEngageIntegration; import java.util.LinkedHashMap; import java.util.HashMap; @@ -87,6 +88,10 @@ private void setupChannels(FlutterSegmentOptions options) { analyticsBuilder.use(AmplitudeIntegration.FACTORY); } + if (options.isWebEngageIntegrationEnabled()) { + analyticsBuilder.use(WebEngageIntegration.FACTORY); + } + // Here we build a middleware that just appends data to the current context // using the [deepMerge] strategy. analyticsBuilder.middleware( diff --git a/example/pubspec.lock b/example/pubspec.lock index 5e07c384..bd22c5bb 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -68,7 +68,7 @@ packages: path: ".." relative: true source: path - version: "3.5.0" + version: "3.7.0" flutter_test: dependency: "direct dev" description: flutter diff --git a/ios/Classes/FlutterSegmentPlugin.m b/ios/Classes/FlutterSegmentPlugin.m index b5aea645..58ccbcd9 100644 --- a/ios/Classes/FlutterSegmentPlugin.m +++ b/ios/Classes/FlutterSegmentPlugin.m @@ -347,6 +347,7 @@ + (SEGAnalyticsConfiguration*)createConfigFromFile { NSString *writeKey = [dict objectForKey: @"com.claimsforce.segment.WRITE_KEY"]; BOOL trackApplicationLifecycleEvents = [[dict objectForKey: @"com.claimsforce.segment.TRACK_APPLICATION_LIFECYCLE_EVENTS"] boolValue]; BOOL isAmplitudeIntegrationEnabled = [[dict objectForKey: @"com.claimsforce.segment.ENABLE_AMPLITUDE_INTEGRATION"] boolValue]; + BOOL isWebEngageIntegrationEnabled = [[dict objectForKey: @"com.claimsforce.segment.ENABLE_WEBENGAGE_INTEGRATION"] boolValue]; if(!writeKey) { return nil; } @@ -357,6 +358,10 @@ + (SEGAnalyticsConfiguration*)createConfigFromFile { [configuration use:[SEGAmplitudeIntegrationFactory instance]]; } + if (isWebEngageIntegrationEnabled) { + [configuration use:[WEGSegmentIntegrationFactory instanceWithApplication:application launchOptions:launchOptions]]; + } + return configuration; } @@ -364,6 +369,7 @@ + (SEGAnalyticsConfiguration*)createConfigFromDict:(NSDictionary*) dict { NSString *writeKey = [dict objectForKey: @"writeKey"]; BOOL trackApplicationLifecycleEvents = [[dict objectForKey: @"trackApplicationLifecycleEvents"] boolValue]; BOOL isAmplitudeIntegrationEnabled = [[dict objectForKey: @"amplitudeIntegrationEnabled"] boolValue]; + BOOL isWebEngageIntegrationEnabled = [[dict objectForKey: @"webEngageIntegrationEnabled"] boolValue]; SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:writeKey]; configuration.trackApplicationLifecycleEvents = trackApplicationLifecycleEvents; @@ -371,6 +377,10 @@ + (SEGAnalyticsConfiguration*)createConfigFromDict:(NSDictionary*) dict { [configuration use:[SEGAmplitudeIntegrationFactory instance]]; } + if (isWebEngageIntegrationEnabled) { + [configuration use:[WEGSegmentIntegrationFactory instanceWithApplication:application launchOptions:launchOptions]]; + } + return configuration; } diff --git a/ios/flutter_segment.podspec b/ios/flutter_segment.podspec index dd86f8d1..c49a4e08 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-WebEngage' 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..7f2004e1 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.webEngageIntegrationEnabled = false, this.debug = false, }); final String writeKey; final bool trackApplicationLifecycleEvents; final bool amplitudeIntegrationEnabled; + final bool webEngageIntegrationEnabled; final bool debug; Map toMap() { @@ -16,6 +18,7 @@ class SegmentConfig { 'writeKey': writeKey, 'trackApplicationLifecycleEvents': trackApplicationLifecycleEvents, 'amplitudeIntegrationEnabled': amplitudeIntegrationEnabled, + 'webEngageIntegrationEnabled': webEngageIntegrationEnabled, 'debug': debug, }; } From a3f9d21685c8fd3062bf119c3e214a29bb792ede Mon Sep 17 00:00:00 2001 From: Shubham Date: Mon, 7 Feb 2022 13:29:24 +0530 Subject: [PATCH 2/5] Add import for Webengage Integration Factory on iOS Side --- ios/Classes/FlutterSegmentPlugin.m | 1 + 1 file changed, 1 insertion(+) diff --git a/ios/Classes/FlutterSegmentPlugin.m b/ios/Classes/FlutterSegmentPlugin.m index 58ccbcd9..f3eeb5a7 100644 --- a/ios/Classes/FlutterSegmentPlugin.m +++ b/ios/Classes/FlutterSegmentPlugin.m @@ -2,6 +2,7 @@ #import #import #import +#import #import @implementation FlutterSegmentPlugin From 88b92879ad106e2b79ce835523732a072eb69132 Mon Sep 17 00:00:00 2001 From: Shubham Date: Tue, 1 Mar 2022 17:14:30 +0530 Subject: [PATCH 3/5] Fix ios webengage not working issue, add android push integration for webengage --- .DS_Store | Bin 8196 -> 0 bytes .gitignore | 6 +++ android/build.gradle | 1 + android/src/main/AndroidManifest.xml | 30 ++++++++++++-- .../flutter_segment/FlutterSegmentPlugin.java | 6 ++- .../flutter_segment/MyApplication.java | 28 +++++++++++++ .../MyFirebaseMessagingService.java | 23 +++++++++++ .../WebEngageFirebaseMessagingReceiver.java | 37 ++++++++++++++++++ ios/Classes/FlutterSegmentPlugin.m | 6 +-- 9 files changed, 130 insertions(+), 7 deletions(-) delete mode 100644 .DS_Store create mode 100644 android/src/main/java/com/example/flutter_segment/MyApplication.java create mode 100644 android/src/main/java/com/example/flutter_segment/MyFirebaseMessagingService.java create mode 100644 android/src/main/java/com/example/flutter_segment/WebEngageFirebaseMessagingReceiver.java diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index d8f10d3d7fadb8b7af7527af62c974d42f376b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMzi-n(6n@vF*ingy1gI4YW@<^<2p(#Ild@y2oO?b zM?&2IiIoM3fr%X!{sSg97Iq|7-umXVZs}iRI(Sn7DP(%?*Dcy>I$#od8a1?pBSpcP0f!1nH0xB_i(AyD@3#vMCu z>(YAN_9z=OU)}rp{?oyi8>-#;tG(BWeH+O0yVMBtLI;LmE7`%Q;Mo%%aSr9nx3~5M zhm_Zh$$T$`k63IBXo3$8^ns!pj>3m*pX7WLk2s%8r+@$W81hMY&G^jsQuv6)Ey3q; zqwjmvZzB)32pZ6WC&;)9J@BAqj|M$CKVR*h=MI8m@f%slWEW2urfDvjdGleTLr0CE z84L%tW`BzvZ8U?9E&F#V^`d^$-gH}|ox+)$)DN1j-|F*V*J+{4_I=lP=%_}AzBAzG zX$V6umosxah2`=1YH`&nUn@^mt?^nJ`<1owWRf$NFP5&a?{=R)8$X}yzs6sIg~%lx zPKo2FeS^KkuTeAVq%=c2}WO0KLOYlj|Nd~VQ3Il~D zY`(-eX^FFY@%>kL#YEN_tF%>N0|$&v24~()-Z_;=GfO<*xwGrx9V6r7Dx|GyzA4L> zg#fR*L1Lu>U(G|#u&=t1-zcv5+ z|IriZNUeZY;Mglbvh_y2hBU($u_R;mI%;9v#mWlvn+oJ1*zh-2M7|wIjQ%jhzJ;zV XrYdnN5J#}+4*^^T-Dm~=sRDlh<1;2R diff --git a/.gitignore b/.gitignore index fa9f0b81..2b526274 100644 --- a/.gitignore +++ b/.gitignore @@ -594,3 +594,9 @@ healthchecksdb MigrationBackup/ # End of https://www.gitignore.io/api/git,dart,flutter,intellij,webstorm,visualstudio + +# Not needed macOS generated files +.DS_Store +example/.DS_Store +example/android/.DS_Store +example/ios/.DS_Store \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 0ebf02a7..06894477 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -35,6 +35,7 @@ android { dependencies { implementation 'com.webengage:android-segment:2.+' + implementation 'com.google.firebase:firebase-messaging:22.0.0' implementation 'com.segment.analytics.android:analytics:4.10.0' implementation 'com.segment.analytics.android.integrations:amplitude:3.0.3' } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 48d11960..ef6cf5cc 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,4 +1,28 @@ + - - + xmlns:tools="http://schemas.android.com/tools" + package="com.example.flutter_segment"> + + + + + + + + + + + + + + + + + \ No newline at end of file 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 16adaa05..ead98bb1 100644 --- a/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java +++ b/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java @@ -17,6 +17,7 @@ import com.segment.analytics.android.integrations.amplitude.AmplitudeIntegration; import static com.segment.analytics.Analytics.LogLevel; import com.webengage.sdk.android.integrations.segment.WebEngageIntegration; +import com.webengage.sdk.android.WebEngageConfig; import java.util.LinkedHashMap; import java.util.HashMap; @@ -89,7 +90,10 @@ private void setupChannels(FlutterSegmentOptions options) { } if (options.isWebEngageIntegrationEnabled()) { - analyticsBuilder.use(WebEngageIntegration.FACTORY); + WebEngageConfig webEngageConfig = new WebEngageConfig.Builder() + .setDebugMode(true) + .build(); + analyticsBuilder.use(WebEngageIntegration.FACTORY.withWebEngageConfig(webEngageConfig)); } // Here we build a middleware that just appends data to the current context diff --git a/android/src/main/java/com/example/flutter_segment/MyApplication.java b/android/src/main/java/com/example/flutter_segment/MyApplication.java new file mode 100644 index 00000000..8fdc79af --- /dev/null +++ b/android/src/main/java/com/example/flutter_segment/MyApplication.java @@ -0,0 +1,28 @@ +package com.example.flutter_segment; +import android.app.Application; + +import androidx.annotation.NonNull; + +import com.webengage.sdk.android.WebEngage; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.messaging.FirebaseMessaging; + +public class MyApplication extends Application { + @Override + public void onCreate() { + super.onCreate(); + + FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + try { + String token = task.getResult(); + WebEngage.get().setRegistrationID(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } +} \ No newline at end of file diff --git a/android/src/main/java/com/example/flutter_segment/MyFirebaseMessagingService.java b/android/src/main/java/com/example/flutter_segment/MyFirebaseMessagingService.java new file mode 100644 index 00000000..54d9097b --- /dev/null +++ b/android/src/main/java/com/example/flutter_segment/MyFirebaseMessagingService.java @@ -0,0 +1,23 @@ +package com.example.flutter_segment; + +import android.util.Log; + +import com.google.firebase.messaging.FirebaseMessagingService; +import com.google.firebase.messaging.RemoteMessage; + +import com.webengage.sdk.android.WebEngage; + +import java.util.Map; + +public class MyFirebaseMessagingService extends FirebaseMessagingService { + @Override + public void onNewToken(String s) { + super.onNewToken(s); + WebEngage.get().setRegistrationID(s); + } + + @Override + public void onMessageReceived(RemoteMessage remoteMessage) { + // Not needed already handling in MessagingReceiver + } +} \ No newline at end of file diff --git a/android/src/main/java/com/example/flutter_segment/WebEngageFirebaseMessagingReceiver.java b/android/src/main/java/com/example/flutter_segment/WebEngageFirebaseMessagingReceiver.java new file mode 100644 index 00000000..523ddaaa --- /dev/null +++ b/android/src/main/java/com/example/flutter_segment/WebEngageFirebaseMessagingReceiver.java @@ -0,0 +1,37 @@ +package com.example.flutter_segment; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import com.google.firebase.messaging.RemoteMessage; +import com.webengage.sdk.android.WebEngage; + +import java.util.HashMap; +import java.util.Map; + +public class WebEngageFirebaseMessagingReceiver extends BroadcastReceiver { + private static final String TAG = "Tournafest-WebEngage"; + static HashMap notifications = new HashMap<>(); + + @Override + public void onReceive(Context context, Intent intent) { + Log.d(TAG, "Webengage broadcast received for message"); + + if (intent.getExtras() == null) { + Log.d( + TAG, + "broadcast received but intent contained no extras to process RemoteMessage. Operation cancelled."); + return; + } + + RemoteMessage remoteMessage = new RemoteMessage(intent.getExtras()); + Map data = remoteMessage.getData(); + if(data != null) { + if(data.containsKey("source") && "webengage".equals(data.get("source"))) { + WebEngage.get().receive(data); + } + } + } +} \ No newline at end of file diff --git a/ios/Classes/FlutterSegmentPlugin.m b/ios/Classes/FlutterSegmentPlugin.m index f3eeb5a7..560a97a4 100644 --- a/ios/Classes/FlutterSegmentPlugin.m +++ b/ios/Classes/FlutterSegmentPlugin.m @@ -2,7 +2,7 @@ #import #import #import -#import +#import #import @implementation FlutterSegmentPlugin @@ -360,7 +360,7 @@ + (SEGAnalyticsConfiguration*)createConfigFromFile { } if (isWebEngageIntegrationEnabled) { - [configuration use:[WEGSegmentIntegrationFactory instanceWithApplication:application launchOptions:launchOptions]]; + [configuration use:[WEGSegmentIntegrationFactory instanceWithApplication:UIApplication.sharedApplication launchOptions:nil]]; } return configuration; @@ -379,7 +379,7 @@ + (SEGAnalyticsConfiguration*)createConfigFromDict:(NSDictionary*) dict { } if (isWebEngageIntegrationEnabled) { - [configuration use:[WEGSegmentIntegrationFactory instanceWithApplication:application launchOptions:launchOptions]]; + [configuration use:[WEGSegmentIntegrationFactory instanceWithApplication:UIApplication.sharedApplication launchOptions:nil]]; } return configuration; From 9c76551444d04258570ddfd30d63fc50a59d231f Mon Sep 17 00:00:00 2001 From: Shubham Bhardwaj Date: Thu, 15 Sep 2022 18:52:00 +0530 Subject: [PATCH 4/5] Add clevertap android integration --- android/build.gradle | 1 + android/src/main/AndroidManifest.xml | 13 +++++++++++++ .../flutter_segment/FlutterSegmentOptions.java | 14 +++++++++++--- .../flutter_segment/FlutterSegmentPlugin.java | 5 +++++ lib/src/segment_config.dart | 3 +++ 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 06894477..fcfa8534 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -37,6 +37,7 @@ android { implementation 'com.webengage:android-segment:2.+' implementation 'com.google.firebase:firebase-messaging:22.0.0' implementation 'com.segment.analytics.android:analytics:4.10.0' + implementation 'com.clevertap.android:clevertap-segment-android:+' implementation 'com.segment.analytics.android.integrations:amplitude:3.0.3' } } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index ef6cf5cc..d9ee07c0 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -15,6 +15,19 @@ + + + + + + + + + + + options) { @@ -53,8 +60,9 @@ static FlutterSegmentOptions create(HashMap options) { Boolean trackApplicationLifecycleEvents = (Boolean) options.get("trackApplicationLifecycleEvents"); Boolean isAmplitudeIntegrationEnabled = orFalse((Boolean) options.get("amplitudeIntegrationEnabled")); Boolean isWebEngageIntegrationEnabled = orFalse((Boolean) options.get("webEngageIntegrationEnabled")); + Boolean isCleverTapIntegrationEnabled = orFalse((Boolean) options.get("cleverTapIntegrationEnabled")); Boolean debug = orFalse((Boolean) options.get("debug")); - return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, isWebEngageIntegrationEnabled, debug); + return new FlutterSegmentOptions(writeKey, trackApplicationLifecycleEvents, isAmplitudeIntegrationEnabled, isWebEngageIntegrationEnabled, isCleverTapIntegrationEnabled, 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 ead98bb1..ce12db65 100644 --- a/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java +++ b/android/src/main/java/com/example/flutter_segment/FlutterSegmentPlugin.java @@ -16,6 +16,7 @@ import com.segment.analytics.integrations.BasePayload; import com.segment.analytics.android.integrations.amplitude.AmplitudeIntegration; import static com.segment.analytics.Analytics.LogLevel; +import com.segment.analytics.android.integrations.clevertap.CleverTapIntegration; import com.webengage.sdk.android.integrations.segment.WebEngageIntegration; import com.webengage.sdk.android.WebEngageConfig; @@ -96,6 +97,10 @@ private void setupChannels(FlutterSegmentOptions options) { analyticsBuilder.use(WebEngageIntegration.FACTORY.withWebEngageConfig(webEngageConfig)); } + if (options.isCleverTapIntegrationEnabled()) { + analyticsBuilder.use(CleverTapIntegration.FACTORY); + } + // Here we build a middleware that just appends data to the current context // using the [deepMerge] strategy. analyticsBuilder.middleware( diff --git a/lib/src/segment_config.dart b/lib/src/segment_config.dart index 7f2004e1..cfda6c19 100644 --- a/lib/src/segment_config.dart +++ b/lib/src/segment_config.dart @@ -4,6 +4,7 @@ class SegmentConfig { this.trackApplicationLifecycleEvents = false, this.amplitudeIntegrationEnabled = false, this.webEngageIntegrationEnabled = false, + this.cleverTapIntegrationEnabled = false, this.debug = false, }); @@ -11,6 +12,7 @@ class SegmentConfig { final bool trackApplicationLifecycleEvents; final bool amplitudeIntegrationEnabled; final bool webEngageIntegrationEnabled; + final bool cleverTapIntegrationEnabled; final bool debug; Map toMap() { @@ -19,6 +21,7 @@ class SegmentConfig { 'trackApplicationLifecycleEvents': trackApplicationLifecycleEvents, 'amplitudeIntegrationEnabled': amplitudeIntegrationEnabled, 'webEngageIntegrationEnabled': webEngageIntegrationEnabled, + 'cleverTapIntegrationEnabled': cleverTapIntegrationEnabled, 'debug': debug, }; } From 267459be7194a13dc0fd443503cacc795dcfed0b Mon Sep 17 00:00:00 2001 From: Shubham Bhardwaj Date: Thu, 15 Sep 2022 19:47:13 +0530 Subject: [PATCH 5/5] Add exported flag to manifest for clevertap services --- android/src/main/AndroidManifest.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index d9ee07c0..658e44e3 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -16,14 +16,16 @@ + android:name="com.clevertap.android.sdk.FcmTokenListenerService" + android:exported="true"> + android:name="com.clevertap.android.sdk.FcmMessageListenerService" + android:exported="true">