From 50f57a70783533df58c166560a852fb7d9b5a33c Mon Sep 17 00:00:00 2001 From: Deepak Date: Wed, 15 Jul 2026 21:20:52 +0530 Subject: [PATCH 1/3] Add suppressProactiveContent in platform_interface --- .../CHANGELOG.md | 4 +++ .../lib/enumeral.dart | 7 +++++ .../intercom_flutter_platform_interface.dart | 11 +++++++ .../lib/method_channel_intercom_flutter.dart | 8 +++++ .../pubspec.yaml | 2 +- .../method_channel_intercom_flutter_test.dart | 29 +++++++++++++++++++ 6 files changed, 60 insertions(+), 1 deletion(-) diff --git a/intercom_flutter_platform_interface/CHANGELOG.md b/intercom_flutter_platform_interface/CHANGELOG.md index e4ee1eff..df375615 100755 --- a/intercom_flutter_platform_interface/CHANGELOG.md +++ b/intercom_flutter_platform_interface/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 2.0.8 + +* Added method `suppressProactiveContent`. + ## 2.0.7 * Added method `getWindowDidHideStream`. diff --git a/intercom_flutter_platform_interface/lib/enumeral.dart b/intercom_flutter_platform_interface/lib/enumeral.dart index 3a6892d9..87ec5158 100644 --- a/intercom_flutter_platform_interface/lib/enumeral.dart +++ b/intercom_flutter_platform_interface/lib/enumeral.dart @@ -3,6 +3,13 @@ enum IntercomVisibility { visible, } +/// Proactive content types whose visibility can be controlled via +/// `suppressProactiveContent`. +enum IntercomProactiveContentType { + carousel, + survey, +} + enum IntercomTheme { // // Enable dark mode dark, diff --git a/intercom_flutter_platform_interface/lib/intercom_flutter_platform_interface.dart b/intercom_flutter_platform_interface/lib/intercom_flutter_platform_interface.dart index 6f0bdadc..dd56e308 100644 --- a/intercom_flutter_platform_interface/lib/intercom_flutter_platform_interface.dart +++ b/intercom_flutter_platform_interface/lib/intercom_flutter_platform_interface.dart @@ -302,4 +302,15 @@ abstract class IntercomFlutterPlatform extends PlatformInterface { Future setThemeMode(IntercomTheme theme) { throw UnimplementedError('setThemeMode() has not been implemented.'); } + + /// To suppress the given proactive content [types] (carousels, surveys) + /// from being displayed. + /// + /// All the proactive content types are visible by default. + /// Pass an empty list to unsuppress all. + Future suppressProactiveContent( + List types) { + throw UnimplementedError( + 'suppressProactiveContent() has not been implemented.'); + } } diff --git a/intercom_flutter_platform_interface/lib/method_channel_intercom_flutter.dart b/intercom_flutter_platform_interface/lib/method_channel_intercom_flutter.dart index aee16ca2..63af7d20 100644 --- a/intercom_flutter_platform_interface/lib/method_channel_intercom_flutter.dart +++ b/intercom_flutter_platform_interface/lib/method_channel_intercom_flutter.dart @@ -271,6 +271,14 @@ class MethodChannelIntercomFlutter extends IntercomFlutterPlatform { await _channel.invokeMethod('setThemeMode', {'theme': theme.name}); } + @override + Future suppressProactiveContent( + List types) async { + await _channel.invokeMethod('suppressProactiveContent', { + 'types': types.map((type) => type.name).toList(), + }); + } + /// Convert the [PlatformException] details to [IntercomError]. /// From the Platform side if the intercom operation failed then error details /// will be sent as details in [PlatformException]. diff --git a/intercom_flutter_platform_interface/pubspec.yaml b/intercom_flutter_platform_interface/pubspec.yaml index ad4e8d51..c5b24f27 100644 --- a/intercom_flutter_platform_interface/pubspec.yaml +++ b/intercom_flutter_platform_interface/pubspec.yaml @@ -1,6 +1,6 @@ name: intercom_flutter_platform_interface description: A common platform interface for the intercom_flutter plugin. -version: 2.0.7 +version: 2.0.8 homepage: https://github.com/v3rm0n/intercom_flutter dependencies: diff --git a/intercom_flutter_platform_interface/test/method_channel_intercom_flutter_test.dart b/intercom_flutter_platform_interface/test/method_channel_intercom_flutter_test.dart index 0f962659..97cca4a7 100644 --- a/intercom_flutter_platform_interface/test/method_channel_intercom_flutter_test.dart +++ b/intercom_flutter_platform_interface/test/method_channel_intercom_flutter_test.dart @@ -530,6 +530,35 @@ void main() { ); }); }); + + group('suppressProactiveContent', () { + test('suppress carousel and survey', () async { + await intercom.suppressProactiveContent([ + IntercomProactiveContentType.carousel, + IntercomProactiveContentType.survey, + ]); + expect( + log, + [ + isMethodCall('suppressProactiveContent', arguments: { + 'types': ['carousel', 'survey'], + }) + ], + ); + }); + + test('unsuppress all', () async { + await intercom.suppressProactiveContent([]); + expect( + log, + [ + isMethodCall('suppressProactiveContent', arguments: { + 'types': [], + }) + ], + ); + }); + }); }); } From 55b73c113632cfae4e89241e8838b7c8bf6dc543 Mon Sep 17 00:00:00 2001 From: Deepak Date: Wed, 15 Jul 2026 21:26:04 +0530 Subject: [PATCH 2/3] Bump intercom_flutter_web --- intercom_flutter_web/CHANGELOG.md | 4 ++++ intercom_flutter_web/README.md | 2 ++ intercom_flutter_web/pubspec.yaml | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/intercom_flutter_web/CHANGELOG.md b/intercom_flutter_web/CHANGELOG.md index 2d5f8905..fa65940e 100755 --- a/intercom_flutter_web/CHANGELOG.md +++ b/intercom_flutter_web/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.1.13 + +* Updated `intercom_flutter_platform_interface` to `^2.0.8`. + ## 1.1.12 * Updated `intercom_flutter_platform_interface` to `^2.0.7`. diff --git a/intercom_flutter_web/README.md b/intercom_flutter_web/README.md index b4b451a5..1b899fba 100755 --- a/intercom_flutter_web/README.md +++ b/intercom_flutter_web/README.md @@ -25,6 +25,8 @@ But you can pre-define some Intercom settings, if you want (optional), such as ` - handlePush - displayCarousel - displayHelpCenterCollections +- getWindowDidHideStream +- suppressProactiveContent [1]: ../intercom_flutter diff --git a/intercom_flutter_web/pubspec.yaml b/intercom_flutter_web/pubspec.yaml index 868d7ff5..d5f0b407 100644 --- a/intercom_flutter_web/pubspec.yaml +++ b/intercom_flutter_web/pubspec.yaml @@ -1,6 +1,6 @@ name: intercom_flutter_web description: Web platform implementation of intercom_flutter -version: 1.1.12 +version: 1.1.13 homepage: https://github.com/v3rm0n/intercom_flutter flutter: @@ -15,7 +15,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter - intercom_flutter_platform_interface: ^2.0.7 + intercom_flutter_platform_interface: ^2.0.8 uuid: ^4.2.1 # to get the random uuid for loginUnidentifiedUser in web web: ^1.0.0 From b7152198246346659c0e3cc4fc5fe89cb00d7f2a Mon Sep 17 00:00:00 2001 From: Deepak Date: Wed, 15 Jul 2026 21:28:49 +0530 Subject: [PATCH 3/3] Implement suppressProactiveContent --- intercom_flutter/CHANGELOG.md | 3 +++ intercom_flutter/README.md | 1 + .../maido/intercom/IntercomFlutterPlugin.kt | 12 ++++++++++++ .../intercom_flutter/IntercomFlutterPlugin.m | 14 ++++++++++++++ intercom_flutter/lib/intercom_flutter.dart | 14 +++++++++++++- intercom_flutter/pubspec.yaml | 4 ++-- .../test/intercom_flutter_test.dart | 19 +++++++++++++++++++ 7 files changed, 64 insertions(+), 3 deletions(-) diff --git a/intercom_flutter/CHANGELOG.md b/intercom_flutter/CHANGELOG.md index 8398e871..857f5ab9 100755 --- a/intercom_flutter/CHANGELOG.md +++ b/intercom_flutter/CHANGELOG.md @@ -4,6 +4,9 @@ * Bump Intercom Android SDK version to [18.5.0](https://github.com/intercom/intercom-android/releases/tag/18.5.0) * Bump Intercom iOS SDK version to [19.7.0](https://github.com/intercom/intercom-ios/releases/tag/19.7.0) +* Added API `suppressProactiveContent` to control which proactive content types (carousels, surveys) can be displayed. Not supported on web. +* Updated dependency `intercom_flutter_platform_interface: ^2.0.8` +* Updated dependency `intercom_flutter_web: ^1.1.13` ## 9.6.16 diff --git a/intercom_flutter/README.md b/intercom_flutter/README.md index f4534110..0aeb2a95 100755 --- a/intercom_flutter/README.md +++ b/intercom_flutter/README.md @@ -149,6 +149,7 @@ But you can pre-define some Intercom settings, if you want (optional). - [ ] displayCarousel - [ ] displayHelpCenterCollections - [ ] getWindowDidHideStream +- [ ] suppressProactiveContent ## Using Intercom keys with `--dart-define` diff --git a/intercom_flutter/android/src/main/kotlin/io/maido/intercom/IntercomFlutterPlugin.kt b/intercom_flutter/android/src/main/kotlin/io/maido/intercom/IntercomFlutterPlugin.kt index a233b993..9e3da50e 100644 --- a/intercom_flutter/android/src/main/kotlin/io/maido/intercom/IntercomFlutterPlugin.kt +++ b/intercom_flutter/android/src/main/kotlin/io/maido/intercom/IntercomFlutterPlugin.kt @@ -303,6 +303,18 @@ class IntercomFlutterPlugin : FlutterPlugin, MethodCallHandler, EventChannel.Str }) } } + "suppressProactiveContent" -> { + val types = call.argument>("types") ?: emptyList() + val contentTypes = types.mapNotNull { type -> + when (type) { + "carousel" -> Intercom.ContentType.CAROUSEL + "survey" -> Intercom.ContentType.SURVEY + else -> null + } + } + Intercom.client().suppressProactiveContent(contentTypes) + result.success("Suppressed proactive content: $types") + } "setThemeMode" -> { val theme = call.argument("theme") when (theme) { diff --git a/intercom_flutter/ios/intercom_flutter/Sources/intercom_flutter/IntercomFlutterPlugin.m b/intercom_flutter/ios/intercom_flutter/Sources/intercom_flutter/IntercomFlutterPlugin.m index 393cab6c..dc24a137 100644 --- a/intercom_flutter/ios/intercom_flutter/Sources/intercom_flutter/IntercomFlutterPlugin.m +++ b/intercom_flutter/ios/intercom_flutter/Sources/intercom_flutter/IntercomFlutterPlugin.m @@ -303,6 +303,20 @@ - (void) handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result details: [self getIntercomError:errorCode:errorMsg]]); }]; } + } else if([@"suppressProactiveContent" isEqualToString:call.method]) { + NSArray *types = call.arguments[@"types"]; + NSMutableArray *contentTypes = [NSMutableArray array]; + if(types != (id)[NSNull null] && types != nil) { + for (NSString *type in types) { + if([@"carousel" isEqualToString:type]) { + [contentTypes addObject:@(IntercomProactiveContentTypeCarousel)]; + } else if([@"survey" isEqualToString:type]) { + [contentTypes addObject:@(IntercomProactiveContentTypeSurvey)]; + } + } + } + [Intercom suppressProactiveContent:contentTypes]; + result(@"Suppressed proactive content"); } else if([@"setThemeMode" isEqualToString:call.method]) { NSString *theme = call.arguments[@"theme"]; diff --git a/intercom_flutter/lib/intercom_flutter.dart b/intercom_flutter/lib/intercom_flutter.dart index af18f858..45c7ceb5 100755 --- a/intercom_flutter/lib/intercom_flutter.dart +++ b/intercom_flutter/lib/intercom_flutter.dart @@ -8,7 +8,7 @@ import 'package:intercom_flutter_platform_interface/intercom_status_callback.dar /// export the [IntercomVisibility] enum export 'package:intercom_flutter_platform_interface/enumeral.dart' - show IntercomVisibility, IntercomTheme; + show IntercomVisibility, IntercomTheme, IntercomProactiveContentType; export 'package:intercom_flutter_platform_interface/intercom_status_callback.dart' show IntercomStatusCallback, IntercomError; @@ -312,4 +312,16 @@ class Intercom { Future setThemeMode(IntercomTheme theme) { return IntercomFlutterPlatform.instance.setThemeMode(theme); } + + /// To suppress the given proactive content [types] (carousels, surveys) + /// from being displayed. + /// + /// All the proactive content types are visible by default. + /// Pass an empty list to unsuppress all. + /// + /// Note: this is not supported on web. + Future suppressProactiveContent( + List types) { + return IntercomFlutterPlatform.instance.suppressProactiveContent(types); + } } diff --git a/intercom_flutter/pubspec.yaml b/intercom_flutter/pubspec.yaml index f078e67e..1d96227e 100644 --- a/intercom_flutter/pubspec.yaml +++ b/intercom_flutter/pubspec.yaml @@ -9,8 +9,8 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter - intercom_flutter_platform_interface: ^2.0.7 - intercom_flutter_web: ^1.1.12 + intercom_flutter_platform_interface: ^2.0.8 + intercom_flutter_web: ^1.1.13 dev_dependencies: flutter_test: diff --git a/intercom_flutter/test/intercom_flutter_test.dart b/intercom_flutter/test/intercom_flutter_test.dart index e611fcc5..5b220860 100755 --- a/intercom_flutter/test/intercom_flutter_test.dart +++ b/intercom_flutter/test/intercom_flutter_test.dart @@ -355,4 +355,23 @@ void main() { }); }); }); + + group('suppressProactiveContent', () { + test('suppress carousel and survey', () { + Intercom.instance.suppressProactiveContent([ + IntercomProactiveContentType.carousel, + IntercomProactiveContentType.survey, + ]); + expectMethodCall('suppressProactiveContent', arguments: { + 'types': ['carousel', 'survey'], + }); + }); + + test('unsuppress all', () { + Intercom.instance.suppressProactiveContent([]); + expectMethodCall('suppressProactiveContent', arguments: { + 'types': [], + }); + }); + }); }