From c6c5a222c2172140e52e398add3720b044c4de1c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 23 Jun 2025 20:49:18 -0400 Subject: [PATCH 1/5] implement native settings --- .../ImaSdkSettingsProxyApi.kt | 40 +- .../InteractiveMediaAdsLibrary.g.kt | 327 ++++++++++++- .../ImaSdkSettingsProxyApiTest.kt | 111 +++++ .../ios/Runner.xcodeproj/project.pbxproj | 10 +- .../ios/RunnerTests/SettingsTests.swift | 160 +++++++ .../InteractiveMediaAdsLibrary.g.swift | 342 +++++++++++++- .../ProxyApiDelegate.swift | 6 + .../SettingsProxyAPIDelegate.swift | 86 ++++ .../src/android/interactive_media_ads.g.dart | 300 +++++++++++- .../lib/src/ios/interactive_media_ads.g.dart | 440 +++++++++++++++++- .../interactive_media_ads_android.dart | 50 +- .../pigeons/interactive_media_ads_ios.dart | 73 ++- packages/interactive_media_ads/pubspec.yaml | 2 +- 13 files changed, 1925 insertions(+), 22 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApiTest.kt create mode 100644 packages/interactive_media_ads/example/ios/RunnerTests/SettingsTests.swift create mode 100644 packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/SettingsProxyAPIDelegate.swift diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt index c95fd1d71e0..ed91e3e0093 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt @@ -4,6 +4,8 @@ package dev.flutter.packages.interactive_media_ads +import com.google.ads.interactivemedia.v3.api.ImaSdkSettings + /** * ProxyApi implementation for [com.google.ads.interactivemedia.v3.api.ImaSdkSettings]. * @@ -11,4 +13,40 @@ package dev.flutter.packages.interactive_media_ads * instance or handle method calls on the associated native class or an instance of that class. */ class ImaSdkSettingsProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : - PigeonApiImaSdkSettings(pigeonRegistrar) + PigeonApiImaSdkSettings(pigeonRegistrar) { + override fun setAutoPlayAdBreaks(pigeon_instance: ImaSdkSettings, autoPlayAdBreaks: Boolean) { + pigeon_instance.autoPlayAdBreaks = autoPlayAdBreaks + } + + override fun setDebugMode(pigeon_instance: ImaSdkSettings, debugMode: Boolean) { + pigeon_instance.isDebugMode = debugMode + } + + override fun setFeatureFlags(pigeon_instance: ImaSdkSettings, featureFlags: Map) { + pigeon_instance.featureFlags = featureFlags + } + + override fun setLanguage(pigeon_instance: ImaSdkSettings, language: String) { + pigeon_instance.language = language + } + + override fun setMaxRedirects(pigeon_instance: ImaSdkSettings, maxRedirects: Long) { + pigeon_instance.maxRedirects = maxRedirects.toInt() + } + + override fun setPlayerType(pigeon_instance: ImaSdkSettings, playerType: String) { + pigeon_instance.playerType = playerType + } + + override fun setPlayerVersion(pigeon_instance: ImaSdkSettings, playerVersion: String) { + pigeon_instance.playerVersion = playerVersion + } + + override fun setPpid(pigeon_instance: ImaSdkSettings, ppid: String) { + pigeon_instance.ppid = ppid + } + + override fun setSessionId(pigeon_instance: ImaSdkSettings, sessionId: String) { + pigeon_instance.sessionId = sessionId + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt index 259eaf4ce76..eaf4a77c1c7 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v25.3.2), do not edit directly. +// Autogenerated from Pigeon (v25.5.0), do not edit directly. // See also: https://pub.dev/packages/pigeon @file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") @@ -461,9 +461,7 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar( * An implementation of [PigeonApiImaSdkSettings] used to add a new Dart instance of * `ImaSdkSettings` to the Dart `InstanceManager`. */ - open fun getPigeonApiImaSdkSettings(): PigeonApiImaSdkSettings { - return PigeonApiImaSdkSettings(this) - } + abstract fun getPigeonApiImaSdkSettings(): PigeonApiImaSdkSettings /** * An implementation of [PigeonApiVideoProgressUpdate] used to add a new Dart instance of @@ -599,6 +597,7 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar( PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsManager()) PigeonApiBaseManager.setUpMessageHandlers(binaryMessenger, getPigeonApiBaseManager()) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, getPigeonApiImaSdkFactory()) + PigeonApiImaSdkSettings.setUpMessageHandlers(binaryMessenger, getPigeonApiImaSdkSettings()) PigeonApiVideoProgressUpdate.setUpMessageHandlers( binaryMessenger, getPigeonApiVideoProgressUpdate()) PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, getPigeonApiFrameLayout()) @@ -628,6 +627,7 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar( PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, null) PigeonApiBaseManager.setUpMessageHandlers(binaryMessenger, null) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, null) + PigeonApiImaSdkSettings.setUpMessageHandlers(binaryMessenger, null) PigeonApiVideoProgressUpdate.setUpMessageHandlers(binaryMessenger, null) PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, null) PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, null) @@ -2553,9 +2553,326 @@ abstract class PigeonApiImaSdkFactory( * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. */ @Suppress("UNCHECKED_CAST") -open class PigeonApiImaSdkSettings( +abstract class PigeonApiImaSdkSettings( open val pigeonRegistrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar ) { + /** Sets whether to automatically play VMAP and ad rules ad breaks. */ + abstract fun setAutoPlayAdBreaks( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + autoPlayAdBreaks: Boolean + ) + + /** Enables and disables the debug mode, which is disabled by default. */ + abstract fun setDebugMode( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + debugMode: Boolean + ) + + /** + * Sets the feature flags and their states to control experimental features. + * + * This should be set as early as possible, before requesting ads. Settings will remain constant + * until the next ad request. Calling this method again will reset any feature flags for the next + * ad request. + */ + abstract fun setFeatureFlags( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + featureFlags: Map + ) + + /** + * Sets the preferred language for the ad UI. + * + * The supported codes can be found in the Localization guide and are closely related to the + * two-letter ISO 639-1 language codes. + * + * Once the AdsLoader object has been created, using this setter will have no effect. + */ + abstract fun setLanguage( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + language: String + ) + + /** + * Specifies the maximum number of redirects before the subsequent redirects will be denied and + * the ad load aborted. + * + * The default is 4. + */ + abstract fun setMaxRedirects( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + maxRedirects: Long + ) + + /** + * Sets the partner provided player type. + * + * Player type greater than 20 characters will be truncated. The player type specified should be + * short and unique. + */ + abstract fun setPlayerType( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + playerType: String + ) + + /** + * Sets the partner provided player version. + * + * Player versions greater than 20 characters will be truncated. + */ + abstract fun setPlayerVersion( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + playerVersion: String + ) + + /** Sets the publisher provided ID used for tracking. */ + abstract fun setPpid( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + ppid: String + ) + + /** + * Session ID is a temporary random ID. + * + * A session ID must be a UUID, or an empty string if the SDK should not send a session ID. + */ + abstract fun setSessionId( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + sessionId: String + ) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiImaSdkSettings?) { + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setAutoPlayAdBreaks", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val autoPlayAdBreaksArg = args[1] as Boolean + val wrapped: List = + try { + api.setAutoPlayAdBreaks(pigeon_instanceArg, autoPlayAdBreaksArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setDebugMode", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val debugModeArg = args[1] as Boolean + val wrapped: List = + try { + api.setDebugMode(pigeon_instanceArg, debugModeArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setFeatureFlags", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val featureFlagsArg = args[1] as Map + val wrapped: List = + try { + api.setFeatureFlags(pigeon_instanceArg, featureFlagsArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setLanguage", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val languageArg = args[1] as String + val wrapped: List = + try { + api.setLanguage(pigeon_instanceArg, languageArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setMaxRedirects", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val maxRedirectsArg = args[1] as Long + val wrapped: List = + try { + api.setMaxRedirects(pigeon_instanceArg, maxRedirectsArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setPlayerType", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val playerTypeArg = args[1] as String + val wrapped: List = + try { + api.setPlayerType(pigeon_instanceArg, playerTypeArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setPlayerVersion", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val playerVersionArg = args[1] as String + val wrapped: List = + try { + api.setPlayerVersion(pigeon_instanceArg, playerVersionArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setPpid", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val ppidArg = args[1] as String + val wrapped: List = + try { + api.setPpid(pigeon_instanceArg, ppidArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setSessionId", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val sessionIdArg = args[1] as String + val wrapped: List = + try { + api.setSessionId(pigeon_instanceArg, sessionIdArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of ImaSdkSettings and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApiTest.kt new file mode 100644 index 00000000000..dbedccef361 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApiTest.kt @@ -0,0 +1,111 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.ImaSdkSettings +import kotlin.test.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify + +class ImaSdkSettingsProxyApiTest { + @Test + fun setAutoPlayAdBreaks() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val autoPlayAdBreaks = true + api.setAutoPlayAdBreaks(instance, autoPlayAdBreaks) + + verify(instance).autoPlayAdBreaks = autoPlayAdBreaks + } + + @Test + fun setDebugMode() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val debugMode = true + api.setDebugMode(instance, debugMode) + + verify(instance).isDebugMode = debugMode + } + + @Test + fun setFeatureFlags() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val featureFlags = mapOf("myString" to "myString2") + api.setFeatureFlags(instance, featureFlags) + + verify(instance).featureFlags = featureFlags + } + + @Test + fun setLanguage() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val language = "myString" + api.setLanguage(instance, language) + + verify(instance).language = language + } + + @Test + fun setMaxRedirects() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val maxRedirects = 0 + api.setMaxRedirects(instance, maxRedirects.toLong()) + + verify(instance).maxRedirects = maxRedirects + } + + @Test + fun setPlayerType() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val playerType = "myString" + api.setPlayerType(instance, playerType) + + verify(instance).playerType = playerType + } + + @Test + fun setPlayerVersion() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val playerVersion = "myString" + api.setPlayerVersion(instance, playerVersion) + + verify(instance).playerVersion = playerVersion + } + + @Test + fun setPpid() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val ppid = "myString" + api.setPpid(instance, ppid) + + verify(instance).ppid = ppid + } + + @Test + fun setSessionId() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkSettings() + + val instance = mock() + val sessionId = "myString" + api.setSessionId(instance, sessionId) + + verify(instance).sessionId = sessionId + } +} diff --git a/packages/interactive_media_ads/example/ios/Runner.xcodeproj/project.pbxproj b/packages/interactive_media_ads/example/ios/Runner.xcodeproj/project.pbxproj index ca9d6c51cf6..7950738349b 100644 --- a/packages/interactive_media_ads/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/interactive_media_ads/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -13,6 +13,7 @@ 4E107A500F4C07EF26C07FFF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDCBAC040E6F614A1CDCF896 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + 8F0EDFD12E0A2906001938E6 /* SettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F0EDFD02E0A2906001938E6 /* SettingsTests.swift */; }; 8F599BB12C2DD1FD0090A0DF /* AdsManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F599BB02C2DD1FD0090A0DF /* AdsManagerTests.swift */; }; 8F599BB32C2DD87D0090A0DF /* AdsLoaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F599BB22C2DD87D0090A0DF /* AdsLoaderTests.swift */; }; 8F599BB52C2DD8EC0090A0DF /* AdsLoaderDelegateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F599BB42C2DD8EC0090A0DF /* AdsLoaderDelegateTests.swift */; }; @@ -75,6 +76,7 @@ 7A0E5CD036C0A19847922937 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 89C6230E68C80A6F4B207726 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 8F0EDFD02E0A2906001938E6 /* SettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTests.swift; sourceTree = ""; }; 8F599BB02C2DD1FD0090A0DF /* AdsManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdsManagerTests.swift; sourceTree = ""; }; 8F599BB22C2DD87D0090A0DF /* AdsLoaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdsLoaderTests.swift; sourceTree = ""; }; 8F599BB42C2DD8EC0090A0DF /* AdsLoaderDelegateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdsLoaderDelegateTests.swift; sourceTree = ""; }; @@ -128,6 +130,7 @@ 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( + 8F0EDFD02E0A2906001938E6 /* SettingsTests.swift */, 8FC919912CA5D86F00188068 /* FriendlyObstructionTests.swift */, 8F977DCE2C2B99C600A90D4B /* AdDisplayContainerTests.swift */, 8F977DD22C2BA15100A90D4B /* TestProxyApiRegistrar.swift */, @@ -296,7 +299,7 @@ ); mainGroup = 97C146E51CF9000F007C117D; packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; @@ -414,6 +417,7 @@ files = ( 8F599BBF2C3335B40090A0DF /* ViewControllerTests.swift in Sources */, 8F8382A32CBDB4A4007F28E0 /* CompanionAdProxyApiTests.swift in Sources */, + 8F0EDFD12E0A2906001938E6 /* SettingsTests.swift in Sources */, 8FC919922CA5D86F00188068 /* FriendlyObstructionTests.swift in Sources */, 8F977DD92C2C8C6A00A90D4B /* AdLoadingErrorDataTests.swift in Sources */, 8F599BB32C2DD87D0090A0DF /* AdsLoaderTests.swift in Sources */, @@ -789,7 +793,7 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; diff --git a/packages/interactive_media_ads/example/ios/RunnerTests/SettingsTests.swift b/packages/interactive_media_ads/example/ios/RunnerTests/SettingsTests.swift new file mode 100644 index 00000000000..31a8aa8ef3e --- /dev/null +++ b/packages/interactive_media_ads/example/ios/RunnerTests/SettingsTests.swift @@ -0,0 +1,160 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Flutter +import GoogleInteractiveMediaAds +import XCTest + +@testable import interactive_media_ads + +class SettingsTests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api) + XCTAssertNotNil(instance) + } + + func testSetPPID() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let ppid = "myString" + try? api.pigeonDelegate.setPPID(pigeonApi: api, pigeonInstance: instance, ppid: ppid) + + XCTAssertEqual(instance.ppid, ppid) + } + + func testSetLanguage() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let language = "myString" + try? api.pigeonDelegate.setLanguage( + pigeonApi: api, pigeonInstance: instance, language: language) + + XCTAssertEqual(instance.language, language) + } + + func testSetMaxRedirects() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let max = 0 + try? api.pigeonDelegate.setMaxRedirects( + pigeonApi: api, pigeonInstance: instance, max: Int64(max)) + + XCTAssertEqual(instance.maxRedirects, UInt(max)) + } + + func testSetFeatureFlags() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let flags = ["myString": "myString"] + try? api.pigeonDelegate.setFeatureFlags(pigeonApi: api, pigeonInstance: instance, flags: flags) + + XCTAssertEqual(instance.featureFlags, flags) + } + + func testSetEnableBackgroundPlayback() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let enabled = true + try? api.pigeonDelegate.setEnableBackgroundPlayback( + pigeonApi: api, pigeonInstance: instance, enabled: enabled) + + XCTAssertEqual(instance.enableBackgroundPlayback, enabled) + } + + func testSetAutoPlayAdBreaks() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let autoPlay = true + try? api.pigeonDelegate.setAutoPlayAdBreaks( + pigeonApi: api, pigeonInstance: instance, autoPlay: autoPlay) + + XCTAssertEqual(instance.autoPlayAdBreaks, autoPlay) + } + + func testSetDisableNowPlayingInfo() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let disable = true + try? api.pigeonDelegate.setDisableNowPlayingInfo( + pigeonApi: api, pigeonInstance: instance, disable: disable) + + XCTAssertEqual(instance.disableNowPlayingInfo, disable) + } + + func testSetPlayerType() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let type = "myString" + try? api.pigeonDelegate.setPlayerType(pigeonApi: api, pigeonInstance: instance, type: type) + + XCTAssertEqual(instance.playerType, type) + } + + func testSetPlayerVersion() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let version = "myString" + try? api.pigeonDelegate.setPlayerVersion( + pigeonApi: api, pigeonInstance: instance, version: version) + + XCTAssertEqual(instance.playerVersion, version) + } + + func testSetSessionID() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let sessionID = "myString" + try? api.pigeonDelegate.setSessionID( + pigeonApi: api, pigeonInstance: instance, sessionID: sessionID) + + XCTAssertEqual(instance.sessionID, sessionID) + } + + func testSetSameAppKeyEnabled() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let enabled = true + try? api.pigeonDelegate.setSameAppKeyEnabled( + pigeonApi: api, pigeonInstance: instance, enabled: enabled) + + XCTAssertEqual(instance.sameAppKeyEnabled, enabled) + } + + func testSetEnableDebugMode() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) + + let instance = IMASettings() + let enable = true + try? api.pigeonDelegate.setEnableDebugMode( + pigeonApi: api, pigeonInstance: instance, enable: enable) + + XCTAssertEqual(instance.enableDebugMode, enable) + } +} diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift index abda0e15bd6..198473b1405 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v25.3.2), do not edit directly. +// Autogenerated from Pigeon (v25.5.0), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -475,12 +475,6 @@ protocol InteractiveMediaAdsLibraryPigeonProxyApiDelegate { } extension InteractiveMediaAdsLibraryPigeonProxyApiDelegate { - func pigeonApiIMASettings(_ registrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar) - -> PigeonApiIMASettings - { - return PigeonApiIMASettings( - pigeonRegistrar: registrar, delegate: PigeonApiDelegateIMASettings()) - } func pigeonApiNSObject(_ registrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar) -> PigeonApiNSObject { @@ -544,6 +538,8 @@ open class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar { binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiIMAContentPlayhead(self)) PigeonApiIMAAdsLoader.setUpMessageHandlers( binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiIMAAdsLoader(self)) + PigeonApiIMASettings.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiIMASettings(self)) PigeonApiIMAAdsRequest.setUpMessageHandlers( binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiIMAAdsRequest(self)) PigeonApiIMAAdsLoaderDelegate.setUpMessageHandlers( @@ -569,6 +565,7 @@ open class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar { PigeonApiUIViewController.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiIMAContentPlayhead.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiIMAAdsLoader.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) + PigeonApiIMASettings.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiIMAAdsRequest.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiIMAAdsLoaderDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiIMAAdsManager.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) @@ -1951,7 +1948,76 @@ final class PigeonApiIMAAdsLoader: PigeonApiProtocolIMAAdsLoader { } } } -open class PigeonApiDelegateIMASettings { +protocol PigeonApiDelegateIMASettings { + func pigeonDefaultConstructor(pigeonApi: PigeonApiIMASettings) throws -> IMASettings + /// Publisher Provided Identification (PPID) sent with ads request. + func setPPID(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, ppid: String?) throws + /// Language specification used for localization. + /// + /// `Language` must be formatted as a canonicalized IETF BCP 47 language + /// identifier such as would be returned by [NSLocale preferredLanguages]. + /// + /// Setting this property after it has been sent to the IMAAdsLoader will be + /// ignored and a warning will be logged. + func setLanguage(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, language: String) + throws + /// Specifies maximum number of redirects after which subsequent redirects + /// will be denied, and the ad load aborted. + /// + /// If the number of redirects exceeds |maxRedirects|, the ad request will + /// fail with error code 302. The default value is 4. + func setMaxRedirects(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, max: Int64) + throws + /// Feature flags and their states. + func setFeatureFlags( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, flags: [String: String]) throws + /// Enable background audio playback for the SDK. + /// + /// The default value is false. + func setEnableBackgroundPlayback( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, enabled: Bool) throws + /// Specifies whether to automatically play VMAP and ad rules ad breaks. + /// + /// The default value is true. + func setAutoPlayAdBreaks( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, autoPlay: Bool) throws + /// Specifies whether to update the MPNowPlayingInfoCenter content with the + /// title “Advertisement”. + /// + /// If disabled, MPNowPlayingInfoCenter is untouched. + /// + /// The default value is false. + func setDisableNowPlayingInfo( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, disable: Bool) throws + /// The partner specified video player that is integrating with the SDK. + func setPlayerType(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, type: String?) + throws + /// The partner specified player version that is integrating with the SDK. + func setPlayerVersion( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, version: String?) throws + /// The session ID to identify a single user session. + /// + /// This should be a UUID. + /// + /// It is used exclusively for frequency capping across the user session. + func setSessionID( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, sessionID: String?) throws + /// Controls whether Same App Key is enabled. + /// + /// The value set persists across app sessions. + /// + /// The key is enabled by default. + func setSameAppKeyEnabled( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, enabled: Bool) throws + /// Toggles debug mode which will output detailed log information to the + /// console. + /// + /// Debug mode should be disabled in Release and will display a watermark when + /// enabled. + /// + /// The default value is false. + func setEnableDebugMode( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, enable: Bool) throws } protocol PigeonApiProtocolIMASettings { @@ -1972,6 +2038,264 @@ final class PigeonApiIMASettings: PigeonApiProtocolIMASettings { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiIMASettings? + ) { + let codec: FlutterStandardMessageCodec = + api != nil + ? FlutterStandardMessageCodec( + readerWriter: InteractiveMediaAdsLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) + : FlutterStandardMessageCodec.sharedInstance() + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + pigeonDefaultConstructorChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonIdentifierArg = args[0] as! Int64 + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + pigeonDefaultConstructorChannel.setMessageHandler(nil) + } + let setPPIDChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setPPID", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setPPIDChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let ppidArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setPPID( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, ppid: ppidArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setPPIDChannel.setMessageHandler(nil) + } + let setLanguageChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setLanguage", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setLanguageChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let languageArg = args[1] as! String + do { + try api.pigeonDelegate.setLanguage( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, language: languageArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setLanguageChannel.setMessageHandler(nil) + } + let setMaxRedirectsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setMaxRedirects", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setMaxRedirectsChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let maxArg = args[1] as! Int64 + do { + try api.pigeonDelegate.setMaxRedirects( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, max: maxArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setMaxRedirectsChannel.setMessageHandler(nil) + } + let setFeatureFlagsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setFeatureFlags", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setFeatureFlagsChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let flagsArg = args[1] as! [String: String] + do { + try api.pigeonDelegate.setFeatureFlags( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, flags: flagsArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setFeatureFlagsChannel.setMessageHandler(nil) + } + let setEnableBackgroundPlaybackChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setEnableBackgroundPlayback", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setEnableBackgroundPlaybackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let enabledArg = args[1] as! Bool + do { + try api.pigeonDelegate.setEnableBackgroundPlayback( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, enabled: enabledArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setEnableBackgroundPlaybackChannel.setMessageHandler(nil) + } + let setAutoPlayAdBreaksChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setAutoPlayAdBreaks", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAutoPlayAdBreaksChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let autoPlayArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAutoPlayAdBreaks( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, autoPlay: autoPlayArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setAutoPlayAdBreaksChannel.setMessageHandler(nil) + } + let setDisableNowPlayingInfoChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setDisableNowPlayingInfo", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setDisableNowPlayingInfoChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let disableArg = args[1] as! Bool + do { + try api.pigeonDelegate.setDisableNowPlayingInfo( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, disable: disableArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setDisableNowPlayingInfoChannel.setMessageHandler(nil) + } + let setPlayerTypeChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setPlayerType", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setPlayerTypeChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let typeArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setPlayerType( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, type: typeArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setPlayerTypeChannel.setMessageHandler(nil) + } + let setPlayerVersionChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setPlayerVersion", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setPlayerVersionChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let versionArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setPlayerVersion( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, version: versionArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setPlayerVersionChannel.setMessageHandler(nil) + } + let setSessionIDChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setSessionID", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setSessionIDChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let sessionIDArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setSessionID( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, sessionID: sessionIDArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setSessionIDChannel.setMessageHandler(nil) + } + let setSameAppKeyEnabledChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setSameAppKeyEnabled", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setSameAppKeyEnabledChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let enabledArg = args[1] as! Bool + do { + try api.pigeonDelegate.setSameAppKeyEnabled( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, enabled: enabledArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setSameAppKeyEnabledChannel.setMessageHandler(nil) + } + let setEnableDebugModeChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMASettings.setEnableDebugMode", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setEnableDebugModeChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMASettings + let enableArg = args[1] as! Bool + do { + try api.pigeonDelegate.setEnableDebugMode( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, enable: enableArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setEnableDebugModeChannel.setMessageHandler(nil) + } + } + ///Creates a Dart instance of IMASettings and attaches it to [pigeonInstance]. func pigeonNewInstance( pigeonInstance: IMASettings, completion: @escaping (Result) -> Void @@ -3549,8 +3873,10 @@ protocol PigeonApiDelegateIMACompanionAdSlot { func setDelegate( pigeonApi: PigeonApiIMACompanionAdSlot, pigeonInstance: IMACompanionAdSlot, delegate: IMACompanionDelegate?) throws + /// Width of the slot, in pixels. func width(pigeonApi: PigeonApiIMACompanionAdSlot, pigeonInstance: IMACompanionAdSlot) throws -> Int64 + /// Height of the slot, in pixels. func height(pigeonApi: PigeonApiIMACompanionAdSlot, pigeonInstance: IMACompanionAdSlot) throws -> Int64 } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift index 7bd4f6d9b43..8e36cc3cd2d 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift @@ -151,4 +151,10 @@ open class ProxyApiDelegate: InteractiveMediaAdsLibraryPigeonProxyApiDelegate { { return PigeonApiIMAAdPodInfo(pigeonRegistrar: registrar, delegate: AdPodInfoProxyAPIDelegate()) } + + func pigeonApiIMASettings(_ registrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar) + -> PigeonApiIMASettings + { + return PigeonApiIMASettings(pigeonRegistrar: registrar, delegate: SettingsProxyAPIDelegate()) + } } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/SettingsProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/SettingsProxyAPIDelegate.swift new file mode 100644 index 00000000000..fcbbf377390 --- /dev/null +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/SettingsProxyAPIDelegate.swift @@ -0,0 +1,86 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Foundation +import GoogleInteractiveMediaAds + +/// ProxyApi implementation for `IMASettings`. +/// +/// This class may handle instantiating native object instances that are attached to a Dart instance +/// or handle method calls on the associated native class or an instance of that class. +class SettingsProxyAPIDelegate: PigeonApiDelegateIMASettings { + func pigeonDefaultConstructor(pigeonApi: PigeonApiIMASettings) throws -> IMASettings { + return IMASettings() + } + + func setPPID(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, ppid: String?) throws { + pigeonInstance.ppid = ppid + } + + func setLanguage(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, language: String) + throws + { + pigeonInstance.language = language + } + + func setMaxRedirects(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, max: Int64) + throws + { + pigeonInstance.maxRedirects = UInt(max) + } + + func setFeatureFlags( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, flags: [String: String] + ) throws { + pigeonInstance.featureFlags = flags + } + + func setEnableBackgroundPlayback( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, enabled: Bool + ) throws { + pigeonInstance.enableBackgroundPlayback = enabled + } + + func setAutoPlayAdBreaks( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, autoPlay: Bool + ) throws { + pigeonInstance.autoPlayAdBreaks = autoPlay + } + + func setDisableNowPlayingInfo( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, disable: Bool + ) throws { + pigeonInstance.disableNowPlayingInfo = disable + } + + func setPlayerType(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, type: String?) + throws + { + pigeonInstance.playerType = type + } + + func setPlayerVersion( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, version: String? + ) throws { + pigeonInstance.playerVersion = version + } + + func setSessionID( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, sessionID: String? + ) throws { + pigeonInstance.sessionID = sessionID + } + + func setSameAppKeyEnabled( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, enabled: Bool + ) throws { + pigeonInstance.sameAppKeyEnabled = enabled + } + + func setEnableDebugMode( + pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, enable: Bool + ) throws { + pigeonInstance.enableDebugMode = enable + } +} diff --git a/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart b/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart index 4c4aed56752..9b3946995c5 100644 --- a/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart +++ b/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart @@ -1,11 +1,12 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v25.3.2), do not edit directly. +// Autogenerated from Pigeon (v25.5.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers import 'dart:async'; +import 'dart:io' show Platform; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' @@ -125,6 +126,9 @@ class PigeonInstanceManager { late final void Function(int) onWeakReferenceRemoved; static PigeonInstanceManager _initInstance() { + if (Platform.environment['FLUTTER_TEST'] == 'true') { + return PigeonInstanceManager(onWeakReferenceRemoved: (_) {}); + } WidgetsFlutterBinding.ensureInitialized(); final _PigeonInternalInstanceManagerApi api = _PigeonInternalInstanceManagerApi(); @@ -2673,6 +2677,9 @@ class ImaSdkSettings extends PigeonInternalProxyApiBaseClass { super.pigeon_instanceManager, }); + late final _PigeonInternalProxyApiBaseCodec _pigeonVar_codecImaSdkSettings = + _PigeonInternalProxyApiBaseCodec(pigeon_instanceManager); + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, @@ -2722,6 +2729,297 @@ class ImaSdkSettings extends PigeonInternalProxyApiBaseClass { } } + /// Sets whether to automatically play VMAP and ad rules ad breaks. + Future setAutoPlayAdBreaks(bool autoPlayAdBreaks) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setAutoPlayAdBreaks'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, autoPlayAdBreaks]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Enables and disables the debug mode, which is disabled by default. + Future setDebugMode(bool debugMode) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setDebugMode'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, debugMode]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Sets the feature flags and their states to control experimental features. + /// + /// This should be set as early as possible, before requesting ads. Settings + /// will remain constant until the next ad request. Calling this method again + /// will reset any feature flags for the next ad request. + Future setFeatureFlags(Map featureFlags) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setFeatureFlags'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, featureFlags]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Sets the preferred language for the ad UI. + /// + /// The supported codes can be found in the Localization guide and are closely + /// related to the two-letter ISO 639-1 language codes. + /// + /// Once the AdsLoader object has been created, using this setter will have no + /// effect. + Future setLanguage(String language) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setLanguage'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, language]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the maximum number of redirects before the subsequent redirects + /// will be denied and the ad load aborted. + /// + /// The default is 4. + Future setMaxRedirects(int maxRedirects) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setMaxRedirects'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, maxRedirects]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Sets the partner provided player type. + /// + /// Player type greater than 20 characters will be truncated. The player type + /// specified should be short and unique. + Future setPlayerType(String playerType) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setPlayerType'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, playerType]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Sets the partner provided player version. + /// + /// Player versions greater than 20 characters will be truncated. + Future setPlayerVersion(String playerVersion) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setPlayerVersion'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, playerVersion]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Sets the publisher provided ID used for tracking. + Future setPpid(String ppid) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setPpid'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, ppid]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Session ID is a temporary random ID. + /// + /// A session ID must be a UUID, or an empty string if the SDK should not send + /// a session ID. + Future setSessionId(String sessionId) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecImaSdkSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.setSessionId'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, sessionId]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + @override ImaSdkSettings pigeon_copy() { return ImaSdkSettings.pigeon_detached( diff --git a/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart b/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart index 622941f9836..66712064ecb 100644 --- a/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart +++ b/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart @@ -1,11 +1,12 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v25.3.2), do not edit directly. +// Autogenerated from Pigeon (v25.5.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers import 'dart:async'; +import 'dart:io' show Platform; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' @@ -125,6 +126,9 @@ class PigeonInstanceManager { late final void Function(int) onWeakReferenceRemoved; static PigeonInstanceManager _initInstance() { + if (Platform.environment['FLUTTER_TEST'] == 'true') { + return PigeonInstanceManager(onWeakReferenceRemoved: (_) {}); + } WidgetsFlutterBinding.ensureInitialized(); final _PigeonInternalInstanceManagerApi api = _PigeonInternalInstanceManagerApi(); @@ -1750,6 +1754,42 @@ class IMAAdsLoader extends NSObject { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMASettings.html. class IMASettings extends NSObject { + IMASettings({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached() { + final int pigeonVar_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.pigeon_defaultConstructor'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([pigeonVar_instanceIdentifier]); + () async { + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + }(); + } + /// Constructs [IMASettings] without creating the associated native object. /// /// This should only be used by subclasses created by this library or to @@ -1760,6 +1800,9 @@ class IMASettings extends NSObject { super.pigeon_instanceManager, }) : super.pigeon_detached(); + late final _PigeonInternalProxyApiBaseCodec _pigeonVar_codecIMASettings = + _PigeonInternalProxyApiBaseCodec(pigeon_instanceManager); + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, @@ -1809,6 +1852,399 @@ class IMASettings extends NSObject { } } + /// Publisher Provided Identification (PPID) sent with ads request. + Future setPPID(String? ppid) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setPPID'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, ppid]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Language specification used for localization. + /// + /// `Language` must be formatted as a canonicalized IETF BCP 47 language + /// identifier such as would be returned by [NSLocale preferredLanguages]. + /// + /// Setting this property after it has been sent to the IMAAdsLoader will be + /// ignored and a warning will be logged. + Future setLanguage(String language) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setLanguage'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, language]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies maximum number of redirects after which subsequent redirects + /// will be denied, and the ad load aborted. + /// + /// If the number of redirects exceeds |maxRedirects|, the ad request will + /// fail with error code 302. The default value is 4. + Future setMaxRedirects(int max) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setMaxRedirects'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, max]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Feature flags and their states. + Future setFeatureFlags(Map flags) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setFeatureFlags'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, flags]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Enable background audio playback for the SDK. + /// + /// The default value is false. + Future setEnableBackgroundPlayback(bool enabled) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setEnableBackgroundPlayback'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, enabled]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies whether to automatically play VMAP and ad rules ad breaks. + /// + /// The default value is true. + Future setAutoPlayAdBreaks(bool autoPlay) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setAutoPlayAdBreaks'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, autoPlay]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies whether to update the MPNowPlayingInfoCenter content with the + /// title “Advertisement”. + /// + /// If disabled, MPNowPlayingInfoCenter is untouched. + /// + /// The default value is false. + Future setDisableNowPlayingInfo(bool disable) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setDisableNowPlayingInfo'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, disable]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// The partner specified video player that is integrating with the SDK. + Future setPlayerType(String? type) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setPlayerType'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, type]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// The partner specified player version that is integrating with the SDK. + Future setPlayerVersion(String? version) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setPlayerVersion'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, version]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// The session ID to identify a single user session. + /// + /// This should be a UUID. + /// + /// It is used exclusively for frequency capping across the user session. + Future setSessionID(String? sessionID) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setSessionID'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, sessionID]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Controls whether Same App Key is enabled. + /// + /// The value set persists across app sessions. + /// + /// The key is enabled by default. + Future setSameAppKeyEnabled(bool enabled) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setSameAppKeyEnabled'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, enabled]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Toggles debug mode which will output detailed log information to the + /// console. + /// + /// Debug mode should be disabled in Release and will display a watermark when + /// enabled. + /// + /// The default value is false. + Future setEnableDebugMode(bool enable) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMASettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMASettings.setEnableDebugMode'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, enable]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + @override IMASettings pigeon_copy() { return IMASettings.pigeon_detached( @@ -4050,6 +4486,7 @@ class IMACompanionAdSlot extends PigeonInternalProxyApiBaseClass { } } + /// Width of the slot, in pixels. Future width() async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecIMACompanionAdSlot; @@ -4084,6 +4521,7 @@ class IMACompanionAdSlot extends PigeonInternalProxyApiBaseClass { } } + /// Height of the slot, in pixels. Future height() async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecIMACompanionAdSlot; diff --git a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart index 85c520bfc34..e87b292f8d0 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -491,7 +491,55 @@ abstract class ImaSdkFactory { fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkSettings', ), ) -abstract class ImaSdkSettings {} +abstract class ImaSdkSettings { + /// Sets whether to automatically play VMAP and ad rules ad breaks. + void setAutoPlayAdBreaks(bool autoPlayAdBreaks); + + /// Enables and disables the debug mode, which is disabled by default. + void setDebugMode(bool debugMode); + + /// Sets the feature flags and their states to control experimental features. + /// + /// This should be set as early as possible, before requesting ads. Settings + /// will remain constant until the next ad request. Calling this method again + /// will reset any feature flags for the next ad request. + void setFeatureFlags(Map featureFlags); + + /// Sets the preferred language for the ad UI. + /// + /// The supported codes can be found in the Localization guide and are closely + /// related to the two-letter ISO 639-1 language codes. + /// + /// Once the AdsLoader object has been created, using this setter will have no + /// effect. + void setLanguage(String language); + + /// Specifies the maximum number of redirects before the subsequent redirects + /// will be denied and the ad load aborted. + /// + /// The default is 4. + void setMaxRedirects(int maxRedirects); + + /// Sets the partner provided player type. + /// + /// Player type greater than 20 characters will be truncated. The player type + /// specified should be short and unique. + void setPlayerType(String playerType); + + /// Sets the partner provided player version. + /// + /// Player versions greater than 20 characters will be truncated. + void setPlayerVersion(String playerVersion); + + /// Sets the publisher provided ID used for tracking. + void setPpid(String ppid); + + /// Session ID is a temporary random ID. + /// + /// A session ID must be a UUID, or an empty string if the SDK should not send + /// a session ID. + void setSessionId(String sessionId); +} /// Defines an update to the video's progress. /// diff --git a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart index dbc1a96bd89..e98810b7709 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart @@ -399,7 +399,78 @@ abstract class IMAAdsLoader extends NSObject { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMASettings.html. @ProxyApi() -abstract class IMASettings extends NSObject {} +abstract class IMASettings extends NSObject { + IMASettings(); + + /// Publisher Provided Identification (PPID) sent with ads request. + void setPPID(String? ppid); + + /// Language specification used for localization. + /// + /// `Language` must be formatted as a canonicalized IETF BCP 47 language + /// identifier such as would be returned by [NSLocale preferredLanguages]. + /// + /// Setting this property after it has been sent to the IMAAdsLoader will be + /// ignored and a warning will be logged. + void setLanguage(String language); + + /// Specifies maximum number of redirects after which subsequent redirects + /// will be denied, and the ad load aborted. + /// + /// If the number of redirects exceeds |maxRedirects|, the ad request will + /// fail with error code 302. The default value is 4. + void setMaxRedirects(int max); + + /// Feature flags and their states. + void setFeatureFlags(Map flags); + + /// Enable background audio playback for the SDK. + /// + /// The default value is false. + void setEnableBackgroundPlayback(bool enabled); + + /// Specifies whether to automatically play VMAP and ad rules ad breaks. + /// + /// The default value is true. + void setAutoPlayAdBreaks(bool autoPlay); + + /// Specifies whether to update the MPNowPlayingInfoCenter content with the + /// title “Advertisement”. + /// + /// If disabled, MPNowPlayingInfoCenter is untouched. + /// + /// The default value is false. + void setDisableNowPlayingInfo(bool disable); + + /// The partner specified video player that is integrating with the SDK. + void setPlayerType(String? type); + + /// The partner specified player version that is integrating with the SDK. + void setPlayerVersion(String? version); + + /// The session ID to identify a single user session. + /// + /// This should be a UUID. + /// + /// It is used exclusively for frequency capping across the user session. + void setSessionID(String? sessionID); + + /// Controls whether Same App Key is enabled. + /// + /// The value set persists across app sessions. + /// + /// The key is enabled by default. + void setSameAppKeyEnabled(bool enabled); + + /// Toggles debug mode which will output detailed log information to the + /// console. + /// + /// Debug mode should be disabled in Release and will display a watermark when + /// enabled. + /// + /// The default value is false. + void setEnableDebugMode(bool enable); +} /// Data class describing the ad request. /// diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 12e319b9ec1..837b0d8f111 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: ^25.3.2 + pigeon: ^25.5.0 topics: - ads From 0af73ca4d7640fec65c1a47b8ce4ddc3ddee06c2 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 23 Jun 2025 20:52:27 -0400 Subject: [PATCH 2/5] version bump --- packages/interactive_media_ads/CHANGELOG.md | 5 +++++ .../packages/interactive_media_ads/AdsRequestProxyApi.kt | 2 +- .../interactive_media_ads/AdsRequestProxyAPIDelegate.swift | 2 +- packages/interactive_media_ads/pubspec.yaml | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 1065335d5b6..a51f355de56 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.2.4+1 + +* Adds internal wrapper for Android native `ImaSdkSettings`. +* Adds internal wrapper for iOS native `IMASettings`. + ## 0.2.4 * Adds support for companion ads. See `CompanionAdSlot` and `AdDisplayContainer(companionAds)`. 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 6352bd50d15..248fc8ada08 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.4" + const val pluginVersion = "0.2.4+1" } 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 96be7e5b716..5da124822d5 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.4" + static let pluginVersion = "0.2.4+1" 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 837b0d8f111..d5b2f374c7e 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.4 # This must match the version in +version: 0.2.4+1 # 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 ab7d913ba796264a1f2856742cf82bcfb5d44c84 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 23 Jun 2025 21:23:16 -0400 Subject: [PATCH 3/5] fix test value --- .../example/ios/RunnerTests/SettingsTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/example/ios/RunnerTests/SettingsTests.swift b/packages/interactive_media_ads/example/ios/RunnerTests/SettingsTests.swift index 31a8aa8ef3e..9ad12989a9a 100644 --- a/packages/interactive_media_ads/example/ios/RunnerTests/SettingsTests.swift +++ b/packages/interactive_media_ads/example/ios/RunnerTests/SettingsTests.swift @@ -33,7 +33,7 @@ class SettingsTests: XCTestCase { let api = registrar.apiDelegate.pigeonApiIMASettings(registrar) let instance = IMASettings() - let language = "myString" + let language = "en" try? api.pigeonDelegate.setLanguage( pigeonApi: api, pigeonInstance: instance, language: language) From b09add0f3fb8e9904ba097df3db62146ae00b660 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 23 Jun 2025 21:26:13 -0400 Subject: [PATCH 4/5] update docs --- .../pigeons/interactive_media_ads_ios.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart index e98810b7709..a6ff2729e48 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart @@ -407,8 +407,8 @@ abstract class IMASettings extends NSObject { /// Language specification used for localization. /// - /// `Language` must be formatted as a canonicalized IETF BCP 47 language - /// identifier such as would be returned by [NSLocale preferredLanguages]. + /// `language` must be formatted as a canonicalized IETF BCP 47 language + /// identifier such as would be returned by `[NSLocale preferredLanguages]`. /// /// Setting this property after it has been sent to the IMAAdsLoader will be /// ignored and a warning will be logged. @@ -418,7 +418,9 @@ abstract class IMASettings extends NSObject { /// will be denied, and the ad load aborted. /// /// If the number of redirects exceeds |maxRedirects|, the ad request will - /// fail with error code 302. The default value is 4. + /// fail with error code 302. + /// + /// The default value is 4. void setMaxRedirects(int max); /// Feature flags and their states. From 557b5fa001fb0ba1c21bd50c3e3a326ea2809c85 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 24 Jun 2025 00:37:26 -0400 Subject: [PATCH 5/5] better docs --- .../InteractiveMediaAdsLibrary.g.swift | 10 ++++++---- .../lib/src/ios/interactive_media_ads.g.dart | 10 ++++++---- .../pigeons/interactive_media_ads_ios.dart | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift index 198473b1405..4a2d1684c0d 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift @@ -1954,8 +1954,8 @@ protocol PigeonApiDelegateIMASettings { func setPPID(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, ppid: String?) throws /// Language specification used for localization. /// - /// `Language` must be formatted as a canonicalized IETF BCP 47 language - /// identifier such as would be returned by [NSLocale preferredLanguages]. + /// `language` must be formatted as a canonicalized IETF BCP 47 language + /// identifier such as would be returned by `[NSLocale preferredLanguages]`. /// /// Setting this property after it has been sent to the IMAAdsLoader will be /// ignored and a warning will be logged. @@ -1964,8 +1964,10 @@ protocol PigeonApiDelegateIMASettings { /// Specifies maximum number of redirects after which subsequent redirects /// will be denied, and the ad load aborted. /// - /// If the number of redirects exceeds |maxRedirects|, the ad request will - /// fail with error code 302. The default value is 4. + /// If the number of redirects exceeds `max`, the ad request will fail with + /// error code 302. + /// + /// The default value is 4. func setMaxRedirects(pigeonApi: PigeonApiIMASettings, pigeonInstance: IMASettings, max: Int64) throws /// Feature flags and their states. diff --git a/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart b/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart index 66712064ecb..39db77824e9 100644 --- a/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart +++ b/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart @@ -1884,8 +1884,8 @@ class IMASettings extends NSObject { /// Language specification used for localization. /// - /// `Language` must be formatted as a canonicalized IETF BCP 47 language - /// identifier such as would be returned by [NSLocale preferredLanguages]. + /// `language` must be formatted as a canonicalized IETF BCP 47 language + /// identifier such as would be returned by `[NSLocale preferredLanguages]`. /// /// Setting this property after it has been sent to the IMAAdsLoader will be /// ignored and a warning will be logged. @@ -1921,8 +1921,10 @@ class IMASettings extends NSObject { /// Specifies maximum number of redirects after which subsequent redirects /// will be denied, and the ad load aborted. /// - /// If the number of redirects exceeds |maxRedirects|, the ad request will - /// fail with error code 302. The default value is 4. + /// If the number of redirects exceeds `max`, the ad request will fail with + /// error code 302. + /// + /// The default value is 4. Future setMaxRedirects(int max) async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecIMASettings; diff --git a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart index a6ff2729e48..e1cd0d6a8c3 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart @@ -417,8 +417,8 @@ abstract class IMASettings extends NSObject { /// Specifies maximum number of redirects after which subsequent redirects /// will be denied, and the ad load aborted. /// - /// If the number of redirects exceeds |maxRedirects|, the ad request will - /// fail with error code 302. + /// If the number of redirects exceeds `max`, the ad request will fail with + /// error code 302. /// /// The default value is 4. void setMaxRedirects(int max);