Skip to content

Commit 0e73a05

Browse files
[interactive_media_ads] Adds support to define parameters that control the rendering of ads (#8057)
Changes `PlatformAdsManager.init(AdsManagerInitParams)` to the correct shared `PlatformAdsManager.init(PlatformAdsRenderingSettings?)` feature. **Android:** https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html#init(com.google.ads.interactivemedia.v3.api.AdsRenderingSettings) **iOS:** https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMAAdsManager#/c:objc(cs)IMAAdsManager(im)initializeWithAdsRenderingSettings: The platform interface and implementation aren't exposed yet, so this change should not be breaking. Fixes flutter/flutter#152253
1 parent fb3a936 commit 0e73a05

32 files changed

+1274
-62
lines changed

packages/interactive_media_ads/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.2.3
2+
3+
* Adds parameters to control the rendering of ads. See `AdsManager.init`.
4+
15
## 0.2.2+15
26

37
* Adds remaining methods for internal wrapper of the Android native `BaseManager`.

packages/interactive_media_ads/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ late final AdDisplayContainer _adDisplayContainer = AdDisplayContainer(
154154
},
155155
));
156156
157-
manager.init();
157+
manager.init(settings: AdsRenderingSettings(enablePreloading: true));
158158
},
159159
onAdsLoadError: (AdsLoadErrorData data) {
160160
debugPrint('OnAdsLoadError: ${data.error.message}');

packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) :
2121
*
2222
* This must match the version in pubspec.yaml.
2323
*/
24-
const val pluginVersion = "0.2.2+15"
24+
const val pluginVersion = "0.2.3"
2525
}
2626

2727
override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) {

packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package dev.flutter.packages.interactive_media_ads
77
import android.view.ViewGroup
88
import com.google.ads.interactivemedia.v3.api.AdDisplayContainer
99
import com.google.ads.interactivemedia.v3.api.AdsLoader
10+
import com.google.ads.interactivemedia.v3.api.AdsRenderingSettings
1011
import com.google.ads.interactivemedia.v3.api.AdsRequest
1112
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory
1213
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings
@@ -46,4 +47,8 @@ class ImaSdkFactoryProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) :
4647
override fun createAdsRequest(pigeon_instance: ImaSdkFactory): AdsRequest {
4748
return pigeon_instance.createAdsRequest()
4849
}
50+
51+
override fun createAdsRenderingSettings(pigeon_instance: ImaSdkFactory): AdsRenderingSettings {
52+
return pigeon_instance.createAdsRenderingSettings()
53+
}
4954
}

packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2013 The Flutter Authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
4-
// Autogenerated from Pigeon (v22.5.0), do not edit directly.
4+
// Autogenerated from Pigeon (v22.6.0), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass", "SyntheticAccessor")
77

@@ -2236,6 +2236,14 @@ abstract class PigeonApiImaSdkFactory(
22362236
pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory
22372237
): com.google.ads.interactivemedia.v3.api.AdsRequest
22382238

2239+
/**
2240+
* Creates an `AdsRenderingSettings` object to give the AdsManager parameters that control the
2241+
* rendering of ads.
2242+
*/
2243+
abstract fun createAdsRenderingSettings(
2244+
pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory
2245+
): com.google.ads.interactivemedia.v3.api.AdsRenderingSettings
2246+
22392247
companion object {
22402248
@Suppress("LocalVariableName")
22412249
fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiImaSdkFactory?) {
@@ -2355,6 +2363,28 @@ abstract class PigeonApiImaSdkFactory(
23552363
channel.setMessageHandler(null)
23562364
}
23572365
}
2366+
run {
2367+
val channel =
2368+
BasicMessageChannel<Any?>(
2369+
binaryMessenger,
2370+
"dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsRenderingSettings",
2371+
codec)
2372+
if (api != null) {
2373+
channel.setMessageHandler { message, reply ->
2374+
val args = message as List<Any?>
2375+
val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkFactory
2376+
val wrapped: List<Any?> =
2377+
try {
2378+
listOf(api.createAdsRenderingSettings(pigeon_instanceArg))
2379+
} catch (exception: Throwable) {
2380+
wrapError(exception)
2381+
}
2382+
reply.reply(wrapped)
2383+
}
2384+
} else {
2385+
channel.setMessageHandler(null)
2386+
}
2387+
}
23582388
}
23592389
}
23602390

packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package dev.flutter.packages.interactive_media_ads
66

77
import com.google.ads.interactivemedia.v3.api.AdDisplayContainer
88
import com.google.ads.interactivemedia.v3.api.AdsLoader
9+
import com.google.ads.interactivemedia.v3.api.AdsRenderingSettings
910
import com.google.ads.interactivemedia.v3.api.AdsRequest
1011
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory
1112
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings
@@ -51,4 +52,15 @@ class ImaSdkFactoryProxyApiTest {
5152

5253
assertEquals(mockRequest, api.createAdsRequest(instance))
5354
}
55+
56+
@Test
57+
fun createAdsRenderingSettings() {
58+
val api = TestProxyApiRegistrar().getPigeonApiImaSdkFactory()
59+
60+
val instance = mock<ImaSdkFactory>()
61+
val mockSettings = mock<AdsRenderingSettings>()
62+
whenever(instance.createAdsRenderingSettings()).thenReturn(mockSettings)
63+
64+
assertEquals(mockSettings, api.createAdsRenderingSettings(instance))
65+
}
5466
}

packages/interactive_media_ads/example/lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class _AdExampleWidgetState extends State<AdExampleWidget>
100100
},
101101
));
102102

103-
manager.init();
103+
manager.init(settings: AdsRenderingSettings(enablePreloading: true));
104104
},
105105
onAdsLoadError: (AdsLoadErrorData data) {
106106
debugPrint('OnAdsLoadError: ${data.error.message}');

packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest {
1313
/// The current version of the `interactive_media_ads` plugin.
1414
///
1515
/// This must match the version in pubspec.yaml.
16-
static let pluginVersion = "0.2.2+15"
16+
static let pluginVersion = "0.2.3"
1717

1818
func pigeonDefaultConstructor(
1919
pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer,

packages/interactive_media_ads/lib/interactive_media_ads.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
export 'src/ad_display_container.dart';
66
export 'src/ads_loader.dart';
77
export 'src/ads_manager_delegate.dart';
8+
export 'src/ads_rendering_settings.dart';
89
export 'src/ads_request.dart';
910
export 'src/android/android_interactive_media_ads.dart'
1011
show AndroidInteractiveMediaAds;
@@ -18,4 +19,5 @@ export 'src/platform_interface/platform_interface.dart'
1819
AdErrorType,
1920
AdEvent,
2021
AdEventType,
22+
AdUIElement,
2123
AdsLoadErrorData;

packages/interactive_media_ads/lib/src/ads_loader.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
66

77
import 'ad_display_container.dart';
88
import 'ads_manager_delegate.dart';
9+
import 'ads_rendering_settings.dart';
910
import 'ads_request.dart';
1011
import 'platform_interface/platform_interface.dart';
1112

@@ -145,8 +146,8 @@ class AdsManager {
145146
final PlatformAdsManager platform;
146147

147148
/// Initializes the ad experience using default rendering settings.
148-
Future<void> init() {
149-
return platform.init(AdsManagerInitParams());
149+
Future<void> init({AdsRenderingSettings? settings}) {
150+
return platform.init(settings: settings?.platform);
150151
}
151152

152153
/// Starts playing the ads.

0 commit comments

Comments
 (0)