From d407945e867f520c04c8c2684517991fdb41dfb6 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:46:45 -0400 Subject: [PATCH 1/5] move location where loader is initialized --- packages/interactive_media_ads/README.md | 78 +++++++++---------- .../example/lib/main.dart | 76 +++++++++--------- 2 files changed, 76 insertions(+), 78 deletions(-) diff --git a/packages/interactive_media_ads/README.md b/packages/interactive_media_ads/README.md index 74441a71def5..108131e1e15e 100644 --- a/packages/interactive_media_ads/README.md +++ b/packages/interactive_media_ads/README.md @@ -14,8 +14,6 @@ a separate video player positioned on top of the app's content video player. | **Support** | SDK 21+ | 12.0+ | **NOTE:** -* The initial release for this package supports linear pre-roll video ads on iOS and Android - platforms. * Companion ads, Background Audio ads and Google Dynamic Ad Insertion methods are currently not supported. @@ -126,6 +124,44 @@ for playing content. ```dart late final AdDisplayContainer _adDisplayContainer = AdDisplayContainer( onContainerAdded: (AdDisplayContainer container) { + _adsLoader = AdsLoader( + container: container, + onAdsLoaded: (OnAdsLoadedData data) { + final AdsManager manager = data.manager; + _adsManager = data.manager; + + manager.setAdsManagerDelegate(AdsManagerDelegate( + onAdEvent: (AdEvent event) { + debugPrint('OnAdEvent: ${event.type} => ${event.adData}'); + switch (event.type) { + case AdEventType.loaded: + manager.start(); + case AdEventType.contentPauseRequested: + _pauseContent(); + case AdEventType.contentResumeRequested: + _resumeContent(); + case AdEventType.allAdsCompleted: + manager.destroy(); + _adsManager = null; + case AdEventType.clicked: + case AdEventType.complete: + case _: + } + }, + onAdErrorEvent: (AdErrorEvent event) { + debugPrint('AdErrorEvent: ${event.error.message}'); + _resumeContent(); + }, + )); + + manager.init(); + }, + onAdsLoadError: (AdsLoadErrorData data) { + debugPrint('OnAdsLoadError: ${data.error.message}'); + _resumeContent(); + }, + ); + // Ads can't be requested until the `AdDisplayContainer` has been added to // the native View hierarchy. _requestAds(container); @@ -211,44 +247,6 @@ Handle requesting ads and add event listeners to handle when content should be d ```dart Future _requestAds(AdDisplayContainer container) { - _adsLoader = AdsLoader( - container: container, - onAdsLoaded: (OnAdsLoadedData data) { - final AdsManager manager = data.manager; - _adsManager = data.manager; - - manager.setAdsManagerDelegate(AdsManagerDelegate( - onAdEvent: (AdEvent event) { - debugPrint('OnAdEvent: ${event.type} => ${event.adData}'); - switch (event.type) { - case AdEventType.loaded: - manager.start(); - case AdEventType.contentPauseRequested: - _pauseContent(); - case AdEventType.contentResumeRequested: - _resumeContent(); - case AdEventType.allAdsCompleted: - manager.destroy(); - _adsManager = null; - case AdEventType.clicked: - case AdEventType.complete: - case _: - } - }, - onAdErrorEvent: (AdErrorEvent event) { - debugPrint('AdErrorEvent: ${event.error.message}'); - _resumeContent(); - }, - )); - - manager.init(); - }, - onAdsLoadError: (AdsLoadErrorData data) { - debugPrint('OnAdsLoadError: ${data.error.message}'); - _resumeContent(); - }, - ); - return _adsLoader.requestAds(AdsRequest( adTagUrl: _adTagUrl, contentProgressProvider: _contentProgressProvider, diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index 9bafdda819e9..6996cb611a54 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -70,6 +70,44 @@ class _AdExampleWidgetState extends State // #docregion ad_and_content_players late final AdDisplayContainer _adDisplayContainer = AdDisplayContainer( onContainerAdded: (AdDisplayContainer container) { + _adsLoader = AdsLoader( + container: container, + onAdsLoaded: (OnAdsLoadedData data) { + final AdsManager manager = data.manager; + _adsManager = data.manager; + + manager.setAdsManagerDelegate(AdsManagerDelegate( + onAdEvent: (AdEvent event) { + debugPrint('OnAdEvent: ${event.type} => ${event.adData}'); + switch (event.type) { + case AdEventType.loaded: + manager.start(); + case AdEventType.contentPauseRequested: + _pauseContent(); + case AdEventType.contentResumeRequested: + _resumeContent(); + case AdEventType.allAdsCompleted: + manager.destroy(); + _adsManager = null; + case AdEventType.clicked: + case AdEventType.complete: + case _: + } + }, + onAdErrorEvent: (AdErrorEvent event) { + debugPrint('AdErrorEvent: ${event.error.message}'); + _resumeContent(); + }, + )); + + manager.init(); + }, + onAdsLoadError: (AdsLoadErrorData data) { + debugPrint('OnAdsLoadError: ${data.error.message}'); + _resumeContent(); + }, + ); + // Ads can't be requested until the `AdDisplayContainer` has been added to // the native View hierarchy. _requestAds(container); @@ -127,44 +165,6 @@ class _AdExampleWidgetState extends State // #docregion request_ads Future _requestAds(AdDisplayContainer container) { - _adsLoader = AdsLoader( - container: container, - onAdsLoaded: (OnAdsLoadedData data) { - final AdsManager manager = data.manager; - _adsManager = data.manager; - - manager.setAdsManagerDelegate(AdsManagerDelegate( - onAdEvent: (AdEvent event) { - debugPrint('OnAdEvent: ${event.type} => ${event.adData}'); - switch (event.type) { - case AdEventType.loaded: - manager.start(); - case AdEventType.contentPauseRequested: - _pauseContent(); - case AdEventType.contentResumeRequested: - _resumeContent(); - case AdEventType.allAdsCompleted: - manager.destroy(); - _adsManager = null; - case AdEventType.clicked: - case AdEventType.complete: - case _: - } - }, - onAdErrorEvent: (AdErrorEvent event) { - debugPrint('AdErrorEvent: ${event.error.message}'); - _resumeContent(); - }, - )); - - manager.init(); - }, - onAdsLoadError: (AdsLoadErrorData data) { - debugPrint('OnAdsLoadError: ${data.error.message}'); - _resumeContent(); - }, - ); - return _adsLoader.requestAds(AdsRequest( adTagUrl: _adTagUrl, contentProgressProvider: _contentProgressProvider, From f4d6e8a4a6e7301ce96d48bdb2ec3207c4019d5e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:51:33 -0400 Subject: [PATCH 2/5] version bump --- packages/interactive_media_ads/CHANGELOG.md | 4 ++++ .../packages/interactive_media_ads/AdsRequestProxyApi.kt | 2 +- .../interactive_media_ads/AdsRequestProxyAPIDelegate.swift | 2 +- packages/interactive_media_ads/pubspec.yaml | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index af8606dce335..06fd2da886af 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.2+4 + +* Changes the example app to initialize the `AdsLoader` in `onContainerAdded`. + ## 0.2.2+3 * Adds internal wrapper for iOS native `IMAFriendlyObstruction`. diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt index 74c520939af5..08333ec3d989 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : * * This must match the version in pubspec.yaml. */ - const val pluginVersion = "0.2.2+3" + const val pluginVersion = "0.2.2+4" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift index e35885250184..9e3efc5a5e32 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { /// The current version of the `interactive_media_ads` plugin. /// /// This must match the version in pubspec.yaml. - static let pluginVersion = "0.2.2+3" + static let pluginVersion = "0.2.2+4" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index dcd422cbe4ea..0fc37ddec897 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -2,7 +2,7 @@ name: interactive_media_ads description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS. repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22 -version: 0.2.2+3 # This must match the version in +version: 0.2.2+4 # This must match the version in # `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and # `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift` From 7addf46c6b099f6051d6fd841bff808229d0850e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:42:36 -0400 Subject: [PATCH 3/5] change default to false --- packages/interactive_media_ads/example/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index 6996cb611a54..01cdb603dc01 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -52,7 +52,7 @@ class _AdExampleWidgetState extends State // #docregion example_widget // Whether the widget should be displaying the content video. The content // player is hidden while Ads are playing. - bool _shouldShowContentVideo = true; + bool _shouldShowContentVideo = false; // Controls the content video player. late final VideoPlayerController _contentVideoController; From ee110099cdd3eb5b9a9e827aa5aed31b14112b60 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:44:31 -0400 Subject: [PATCH 4/5] revert version bump --- packages/interactive_media_ads/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index b113ce43d853..8cdac5d3c915 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -31,7 +31,7 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.4 - pigeon: ^22.4.1 + pigeon: ^22.2.0 topics: - ads From 6a56966ce869adcf06a496d63e3caed9c9819b9c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:49:05 -0400 Subject: [PATCH 5/5] update readme --- packages/interactive_media_ads/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/README.md b/packages/interactive_media_ads/README.md index 108131e1e15e..d3e1817f09ba 100644 --- a/packages/interactive_media_ads/README.md +++ b/packages/interactive_media_ads/README.md @@ -93,7 +93,7 @@ class _AdExampleWidgetState extends State // ยทยทยท // Whether the widget should be displaying the content video. The content // player is hidden while Ads are playing. - bool _shouldShowContentVideo = true; + bool _shouldShowContentVideo = false; // Controls the content video player. late final VideoPlayerController _contentVideoController;