diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 5eabc0cf558..b02b9f73ce4 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.2+8 + +* Adds remaining methods for internal wrapper of the iOS native `IMAAdsRenderingSettings`. + ## 0.2.2+7 * Updates Java compatibility version to 11. diff --git a/packages/interactive_media_ads/CONTRIBUTING.md b/packages/interactive_media_ads/CONTRIBUTING.md index e16bd92cbe5..1578ce8d8ca 100644 --- a/packages/interactive_media_ads/CONTRIBUTING.md +++ b/packages/interactive_media_ads/CONTRIBUTING.md @@ -147,10 +147,10 @@ iOS: ```yaml pigeon: - git: - url: git@github.com:bparrishMines/packages.git - ref: pigeon_wrapper_swift - path: packages/pigeon + git: + url: git@github.com:bparrishMines/packages.git + ref: pigeon_wrapper_swift + path: packages/pigeon ``` ##### 3. Uncomment the multiline comments in the pigeon file 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 a9b616f8e18..a15b427afda 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : * * This must match the version in pubspec.yaml. */ - const val pluginVersion = "0.2.2+7" + const val pluginVersion = "0.2.2+8" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { diff --git a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRenderingSettingsTests.swift b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRenderingSettingsTests.swift index 5964ac4b866..2c49b859eb0 100644 --- a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRenderingSettingsTests.swift +++ b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRenderingSettingsTests.swift @@ -18,4 +18,87 @@ final class AdsRenderingSettingsTests: XCTestCase { XCTAssertTrue(instance != nil) } + + func testSetMimeTypes() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRenderingSettings(registrar) + + let instance = IMAAdsRenderingSettings() + let types = ["myString"] + try? api.pigeonDelegate.setMimeTypes(pigeonApi: api, pigeonInstance: instance, types: types) + + XCTAssertEqual(instance.mimeTypes, types) + } + + func testSetBitrate() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRenderingSettings(registrar) + + let instance = IMAAdsRenderingSettings() + let bitrate = 0 + try? api.pigeonDelegate.setBitrate( + pigeonApi: api, pigeonInstance: instance, bitrate: Int64(bitrate)) + + XCTAssertEqual(instance.bitrate, bitrate) + } + + func testSetLoadVideoTimeout() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRenderingSettings(registrar) + + let instance = IMAAdsRenderingSettings() + let seconds = 1.0 + try? api.pigeonDelegate.setLoadVideoTimeout( + pigeonApi: api, pigeonInstance: instance, seconds: seconds) + + XCTAssertEqual(instance.loadVideoTimeout, seconds) + } + + func testSetPlayAdsAfterTime() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRenderingSettings(registrar) + + let instance = IMAAdsRenderingSettings() + let seconds = 1.0 + try? api.pigeonDelegate.setPlayAdsAfterTime( + pigeonApi: api, pigeonInstance: instance, seconds: seconds) + + XCTAssertEqual(instance.playAdsAfterTime, seconds) + } + + func testSetUIElements() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRenderingSettings(registrar) + + let instance = IMAAdsRenderingSettings() + let types = [UIElementType.adAttribution] + try? api.pigeonDelegate.setUIElements(pigeonApi: api, pigeonInstance: instance, types: types) + + XCTAssertEqual( + instance.uiElements, [IMAUiElementType.elements_AD_ATTRIBUTION.rawValue as NSNumber]) + } + + func testSetEnablePreloading() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRenderingSettings(registrar) + + let instance = IMAAdsRenderingSettings() + let enable = true + try? api.pigeonDelegate.setEnablePreloading( + pigeonApi: api, pigeonInstance: instance, enable: enable) + + XCTAssertTrue(instance.enablePreloading) + } + + func testSetLinkOpenerPresentingController() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRenderingSettings(registrar) + + let instance = IMAAdsRenderingSettings() + let controller = UIViewController() + try? api.pigeonDelegate.setLinkOpenerPresentingController( + pigeonApi: api, pigeonInstance: instance, controller: controller) + + XCTAssertEqual(instance.linkOpenerPresentingController, controller) + } } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRenderingSettingsProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRenderingSettingsProxyAPIDelegate.swift index 8567aded6b2..bf63b7ecdb8 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRenderingSettingsProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRenderingSettingsProxyAPIDelegate.swift @@ -15,4 +15,65 @@ class AdsRenderingSettingsProxyAPIDelegate: PigeonApiDelegateIMAAdsRenderingSett { return IMAAdsRenderingSettings() } + + func setMimeTypes( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + types: [String]? + ) throws { + pigeonInstance.mimeTypes = types + } + + func setBitrate( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + bitrate: Int64 + ) throws { + pigeonInstance.bitrate = Int(bitrate) + } + + func setLoadVideoTimeout( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + seconds: Double + ) throws { + pigeonInstance.loadVideoTimeout = seconds + } + + func setPlayAdsAfterTime( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + seconds: Double + ) throws { + pigeonInstance.playAdsAfterTime = seconds + } + + func setUIElements( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + types: [UIElementType]? + ) throws { + let nativeUiElementTypes: [NSNumber]? = try types?.map { type in + switch type { + case .adAttribution: + return IMAUiElementType.elements_AD_ATTRIBUTION.rawValue as NSNumber + case .countdown: + return IMAUiElementType.elements_COUNTDOWN.rawValue as NSNumber + case .unknown: + throw (pigeonApi.pigeonRegistrar.apiDelegate as! ProxyApiDelegate).createUnknownEnumError( + withEnum: type) + } + } + + pigeonInstance.uiElements = nativeUiElementTypes + } + + func setEnablePreloading( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + enable: Bool + ) throws { + pigeonInstance.enablePreloading = enable + } + + func setLinkOpenerPresentingController( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + controller: UIViewController + ) throws { + pigeonInstance.linkOpenerPresentingController = controller + } } 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 e24f32c4d9b..44a6ba7b8e8 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { /// The current version of the `interactive_media_ads` plugin. /// /// This must match the version in pubspec.yaml. - static let pluginVersion = "0.2.2+7" + static let pluginVersion = "0.2.2+8" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, 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 a80d27d8bb9..ae9d85ce911 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 @@ -593,6 +593,7 @@ private class InteractiveMediaAdsLibraryPigeonInternalProxyApiCodecReaderWriter: || value is AdErrorType || value is AdErrorCode || value is AdEventType || value is KeyValueObservingOptions || value is KeyValueChange || value is KeyValueChangeKey || value is FriendlyObstructionPurpose + || value is UIElementType { super.writeValue(value) return @@ -1030,6 +1031,18 @@ enum FriendlyObstructionPurpose: Int { case unknown = 4 } +/// Different UI elements that can be customized. +/// +/// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/ios/reference/Enums/IMAUiElementType.html. +enum UIElementType: Int { + /// Ad attribution UI element. + case adAttribution = 0 + /// Ad countdown element. + case countdown = 1 + /// The element is not recognized by this wrapper. + case unknown = 2 +} + private class InteractiveMediaAdsLibraryPigeonCodecReader: FlutterStandardReader { override func readValue(ofType type: UInt8) -> Any? { switch type { @@ -1075,6 +1088,12 @@ private class InteractiveMediaAdsLibraryPigeonCodecReader: FlutterStandardReader return FriendlyObstructionPurpose(rawValue: enumResultAsInt) } return nil + case 136: + let enumResultAsInt: Int? = nilOrValue(self.readValue() as! Int?) + if let enumResultAsInt = enumResultAsInt { + return UIElementType(rawValue: enumResultAsInt) + } + return nil default: return super.readValue(ofType: type) } @@ -1104,6 +1123,9 @@ private class InteractiveMediaAdsLibraryPigeonCodecWriter: FlutterStandardWriter } else if let value = value as? FriendlyObstructionPurpose { super.writeByte(135) super.writeValue(value.rawValue) + } else if let value = value as? UIElementType { + super.writeByte(136) + super.writeValue(value.rawValue) } else { super.writeValue(value) } @@ -2789,6 +2811,42 @@ final class PigeonApiIMAAdEvent: PigeonApiProtocolIMAAdEvent { protocol PigeonApiDelegateIMAAdsRenderingSettings { func pigeonDefaultConstructor(pigeonApi: PigeonApiIMAAdsRenderingSettings) throws -> IMAAdsRenderingSettings + /// If specified, the SDK will play the media with MIME type on the list. + func setMimeTypes( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + types: [String]?) throws + /// Maximum recommended bitrate. + /// + /// The value is in kbit/s. + func setBitrate( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + bitrate: Int64) throws + /// Timeout (in seconds) when loading a video ad media file. + /// + /// Use -1 for the default of 8 seconds. + func setLoadVideoTimeout( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + seconds: Double) throws + /// For VMAP and ad rules playlists, only play ad breaks scheduled after this + /// time (in seconds). + func setPlayAdsAfterTime( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + seconds: Double) throws + /// Specifies the list of UI elements that should be visible. + func setUIElements( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + types: [UIElementType]?) throws + /// Whether or not the SDK will preload ad media. + /// + /// Default is YES. + func setEnablePreloading( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + enable: Bool) throws + /// Specifies the optional UIViewController that will be used to open links + /// in-app. + func setLinkOpenerPresentingController( + pigeonApi: PigeonApiIMAAdsRenderingSettings, pigeonInstance: IMAAdsRenderingSettings, + controller: UIViewController) throws } protocol PigeonApiProtocolIMAAdsRenderingSettings { @@ -2838,6 +2896,140 @@ final class PigeonApiIMAAdsRenderingSettings: PigeonApiProtocolIMAAdsRenderingSe } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } + let setMimeTypesChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setMimeTypes", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setMimeTypesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRenderingSettings + let typesArg: [String]? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setMimeTypes( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, types: typesArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setMimeTypesChannel.setMessageHandler(nil) + } + let setBitrateChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setBitrate", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBitrateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRenderingSettings + let bitrateArg = args[1] as! Int64 + do { + try api.pigeonDelegate.setBitrate( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, bitrate: bitrateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setBitrateChannel.setMessageHandler(nil) + } + let setLoadVideoTimeoutChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setLoadVideoTimeout", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setLoadVideoTimeoutChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRenderingSettings + let secondsArg = args[1] as! Double + do { + try api.pigeonDelegate.setLoadVideoTimeout( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, seconds: secondsArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setLoadVideoTimeoutChannel.setMessageHandler(nil) + } + let setPlayAdsAfterTimeChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setPlayAdsAfterTime", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setPlayAdsAfterTimeChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRenderingSettings + let secondsArg = args[1] as! Double + do { + try api.pigeonDelegate.setPlayAdsAfterTime( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, seconds: secondsArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setPlayAdsAfterTimeChannel.setMessageHandler(nil) + } + let setUIElementsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setUIElements", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setUIElementsChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRenderingSettings + let typesArg: [UIElementType]? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setUIElements( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, types: typesArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setUIElementsChannel.setMessageHandler(nil) + } + let setEnablePreloadingChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setEnablePreloading", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setEnablePreloadingChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRenderingSettings + let enableArg = args[1] as! Bool + do { + try api.pigeonDelegate.setEnablePreloading( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, enable: enableArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setEnablePreloadingChannel.setMessageHandler(nil) + } + let setLinkOpenerPresentingControllerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setLinkOpenerPresentingController", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setLinkOpenerPresentingControllerChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRenderingSettings + let controllerArg = args[1] as! UIViewController + do { + try api.pigeonDelegate.setLinkOpenerPresentingController( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, controller: controllerArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setLinkOpenerPresentingControllerChannel.setMessageHandler(nil) + } } ///Creates a Dart instance of IMAAdsRenderingSettings and attaches it to [pigeonInstance]. 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 5abeb01a7a8..2e6d58ad45e 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 @@ -701,6 +701,20 @@ enum FriendlyObstructionPurpose { unknown, } +/// Different UI elements that can be customized. +/// +/// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/ios/reference/Enums/IMAUiElementType.html. +enum UIElementType { + /// Ad attribution UI element. + adAttribution, + + /// Ad countdown element. + countdown, + + /// The element is not recognized by this wrapper. + unknown, +} + class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -729,6 +743,9 @@ class _PigeonCodec extends StandardMessageCodec { } else if (value is FriendlyObstructionPurpose) { buffer.putUint8(135); writeValue(buffer, value.index); + } else if (value is UIElementType) { + buffer.putUint8(136); + writeValue(buffer, value.index); } else { super.writeValue(buffer, value); } @@ -758,6 +775,9 @@ class _PigeonCodec extends StandardMessageCodec { case 135: final int? value = readValue(buffer) as int?; return value == null ? null : FriendlyObstructionPurpose.values[value]; + case 136: + final int? value = readValue(buffer) as int?; + return value == null ? null : UIElementType.values[value]; default: return super.readValueOfType(type, buffer); } @@ -3030,6 +3050,211 @@ class IMAAdsRenderingSettings extends NSObject { } } + /// If specified, the SDK will play the media with MIME type on the list. + Future setMimeTypes(List? types) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRenderingSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setMimeTypes'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([this, types]) 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; + } + } + + /// Maximum recommended bitrate. + /// + /// The value is in kbit/s. + Future setBitrate(int bitrate) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRenderingSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setBitrate'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([this, bitrate]) 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; + } + } + + /// Timeout (in seconds) when loading a video ad media file. + /// + /// Use -1 for the default of 8 seconds. + Future setLoadVideoTimeout(double seconds) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRenderingSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setLoadVideoTimeout'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([this, seconds]) 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; + } + } + + /// For VMAP and ad rules playlists, only play ad breaks scheduled after this + /// time (in seconds). + Future setPlayAdsAfterTime(double seconds) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRenderingSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setPlayAdsAfterTime'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([this, seconds]) 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 list of UI elements that should be visible. + Future setUIElements(List? types) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRenderingSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setUIElements'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([this, types]) 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; + } + } + + /// Whether or not the SDK will preload ad media. + /// + /// Default is YES. + Future setEnablePreloading(bool enable) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRenderingSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setEnablePreloading'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([this, enable]) 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 optional UIViewController that will be used to open links + /// in-app. + Future setLinkOpenerPresentingController( + UIViewController controller) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRenderingSettings; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRenderingSettings.setLinkOpenerPresentingController'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([this, controller]) 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 IMAAdsRenderingSettings pigeon_copy() { return IMAAdsRenderingSettings.pigeon_detached( 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 5fb0d887766..5b878583403 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart @@ -291,6 +291,20 @@ enum FriendlyObstructionPurpose { unknown, } +/// Different UI elements that can be customized. +/// +/// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/ios/reference/Enums/IMAUiElementType.html. +enum UIElementType { + /// Ad attribution UI element. + adAttribution, + + /// Ad countdown element. + countdown, + + /// The element is not recognized by this wrapper. + unknown, +} + /// The `IMAAdDisplayContainer` is responsible for managing the ad container /// view and companion ad slots used for ad playback. /// @@ -515,6 +529,35 @@ abstract class IMAAdEvent extends NSObject { @ProxyApi() abstract class IMAAdsRenderingSettings extends NSObject { IMAAdsRenderingSettings(); + + /// If specified, the SDK will play the media with MIME type on the list. + void setMimeTypes(List? types); + + /// Maximum recommended bitrate. + /// + /// The value is in kbit/s. + void setBitrate(int bitrate); + + /// Timeout (in seconds) when loading a video ad media file. + /// + /// Use -1 for the default of 8 seconds. + void setLoadVideoTimeout(double seconds); + + /// For VMAP and ad rules playlists, only play ad breaks scheduled after this + /// time (in seconds). + void setPlayAdsAfterTime(double seconds); + + /// Specifies the list of UI elements that should be visible. + void setUIElements(List? types); + + /// Whether or not the SDK will preload ad media. + /// + /// Default is YES. + void setEnablePreloading(bool enable); + + /// Specifies the optional UIViewController that will be used to open links + /// in-app. + void setLinkOpenerPresentingController(UIViewController controller); } /// The root class of most Objective-C class hierarchies, from which subclasses diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 8e804b0647c..09ace13b720 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -2,7 +2,7 @@ name: interactive_media_ads description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS. repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22 -version: 0.2.2+7 # This must match the version in +version: 0.2.2+8 # 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`