Skip to content

Commit 6b2e34e

Browse files
[interactive_media_ads] Adds support to set general SDK settings (#9648)
Adds support for: https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMASettings.html ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
1 parent 10b3d18 commit 6b2e34e

34 files changed

+2785
-88
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.5
2+
3+
* Adds support to set general SDK settings. See `ImaSettings` and `AdsLoader.settings`.
4+
15
## 0.2.4+2
26

37
* Bumps gradle from 8.9.0 to 8.11.1.

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.4+2"
24+
const val pluginVersion = "0.2.5"
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/InteractiveMediaAdsLibrary.g.kt

Lines changed: 1 addition & 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 (v25.5.0), do not edit directly.
4+
// Autogenerated from Pigeon (v26.0.0), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
77

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.4+2"
16+
static let pluginVersion = "0.2.5"
1717

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

packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift

Lines changed: 1 addition & 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 (v25.5.0), do not edit directly.
4+
// Autogenerated from Pigeon (v26.0.0), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66

77
import Foundation

packages/interactive_media_ads/lib/interactive_media_ads.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export 'src/android/android_interactive_media_ads.dart'
1111
show AndroidInteractiveMediaAds;
1212
export 'src/companion_ad_slot.dart';
1313
export 'src/content_progress_provider.dart';
14+
export 'src/ima_settings.dart';
1415
export 'src/ios/ios_interactive_media_ads.dart' show IOSInteractiveMediaAds;
1516
export 'src/platform_interface/platform_interface.dart'
1617
show

packages/interactive_media_ads/lib/src/ads_loader.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'ad_display_container.dart';
88
import 'ads_manager_delegate.dart';
99
import 'ads_rendering_settings.dart';
1010
import 'ads_request.dart';
11+
import 'ima_settings.dart';
1112
import 'platform_interface/platform_interface.dart';
1213

1314
/// Allows publishers to request ads from ad servers or a dynamic ad insertion
@@ -42,9 +43,11 @@ class AdsLoader {
4243
required AdDisplayContainer container,
4344
required void Function(OnAdsLoadedData data) onAdsLoaded,
4445
required void Function(AdsLoadErrorData data) onAdsLoadError,
46+
ImaSettings? settings,
4547
}) : this.fromPlatformCreationParams(
4648
PlatformAdsLoaderCreationParams(
4749
container: container.platform,
50+
settings: settings?.platform ?? ImaSettings().platform,
4851
onAdsLoaded: (PlatformOnAdsLoadedData data) {
4952
onAdsLoaded(OnAdsLoadedData._(platform: data));
5053
},
@@ -89,6 +92,10 @@ class AdsLoader {
8992
/// Implementation of [PlatformAdsLoader] for the current platform.
9093
final PlatformAdsLoader platform;
9194

95+
/// Defines general SDK settings.
96+
ImaSettings get settings =>
97+
ImaSettings.fromPlatform(platform.params.settings);
98+
9299
/// Signals to the SDK that the content has completed.
93100
Future<void> contentComplete() {
94101
return platform.contentComplete();

packages/interactive_media_ads/lib/src/android/android_ads_loader.dart

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import '../platform_interface/platform_interface.dart';
1010
import 'android_ad_display_container.dart';
1111
import 'android_ads_manager.dart';
1212
import 'android_content_progress_provider.dart';
13+
import 'android_ima_settings.dart';
1314
import 'enum_converter_utils.dart';
1415
import 'interactive_media_ads.g.dart' as ima;
1516
import 'interactive_media_ads_proxy.dart';
@@ -19,6 +20,7 @@ final class AndroidAdsLoaderCreationParams
1920
extends PlatformAdsLoaderCreationParams {
2021
/// Constructs a [AndroidAdsLoaderCreationParams].
2122
const AndroidAdsLoaderCreationParams({
23+
required super.settings,
2224
required super.container,
2325
required super.onAdsLoaded,
2426
required super.onAdsLoadError,
@@ -33,6 +35,7 @@ final class AndroidAdsLoaderCreationParams
3335
@visibleForTesting InteractiveMediaAdsProxy? proxy,
3436
}) {
3537
return AndroidAdsLoaderCreationParams(
38+
settings: params.settings,
3639
container: params.container,
3740
onAdsLoaded: params.onAdsLoaded,
3841
onAdsLoadError: params.onAdsLoadError,
@@ -97,11 +100,13 @@ base class AndroidAdsLoader extends PlatformAdsLoader {
97100
}
98101

99102
Future<ima.AdsLoader> _createAdsLoader() async {
100-
final ima.ImaSdkSettings settings =
101-
await _sdkFactory.createImaSdkSettings();
103+
final AndroidImaSettings settings = switch (_androidParams.settings) {
104+
final AndroidImaSettings androidSettings => androidSettings,
105+
_ => AndroidImaSettings(_androidParams.settings.params),
106+
};
102107

103108
final ima.AdsLoader adsLoader = await _sdkFactory.createAdsLoader(
104-
settings,
109+
await settings.nativeSettingsFuture,
105110
(params.container as AndroidAdDisplayContainer).adDisplayContainer!,
106111
);
107112

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'dart:async';
6+
7+
import 'package:meta/meta.dart';
8+
9+
import '../platform_interface/platform_ima_settings.dart';
10+
import 'interactive_media_ads.g.dart';
11+
12+
/// Android implementation of [PlatformImaSettings].
13+
final class AndroidImaSettings extends PlatformImaSettings {
14+
/// Constructs an [AndroidImaSettings].
15+
AndroidImaSettings(super.params) : super.implementation();
16+
17+
/// The native Android ImaSdkSettings.
18+
///
19+
/// Defines general SDK settings that are used when creating an `AdsLoader`.
20+
@internal
21+
late final Future<ImaSdkSettings> nativeSettingsFuture = _createSettings();
22+
23+
@override
24+
Future<void> setAutoPlayAdBreaks(bool autoPlayAdBreaks) async {
25+
final ImaSdkSettings settings = await nativeSettingsFuture;
26+
await settings.setAutoPlayAdBreaks(autoPlayAdBreaks);
27+
}
28+
29+
@override
30+
Future<void> setDebugMode(bool enabled) async {
31+
final ImaSdkSettings settings = await nativeSettingsFuture;
32+
await settings.setDebugMode(enabled);
33+
}
34+
35+
@override
36+
Future<void> setFeatureFlags(Map<String, String> featureFlags) async {
37+
final ImaSdkSettings settings = await nativeSettingsFuture;
38+
await settings.setFeatureFlags(featureFlags);
39+
}
40+
41+
@override
42+
Future<void> setMaxRedirects(int maxRedirects) async {
43+
final ImaSdkSettings settings = await nativeSettingsFuture;
44+
await settings.setMaxRedirects(maxRedirects);
45+
}
46+
47+
@override
48+
Future<void> setPlayerType(String playerType) async {
49+
final ImaSdkSettings settings = await nativeSettingsFuture;
50+
await settings.setPlayerType(playerType);
51+
}
52+
53+
@override
54+
Future<void> setPlayerVersion(String playerVersion) async {
55+
final ImaSdkSettings settings = await nativeSettingsFuture;
56+
await settings.setPlayerVersion(playerVersion);
57+
}
58+
59+
@override
60+
Future<void> setPpid(String ppid) async {
61+
final ImaSdkSettings settings = await nativeSettingsFuture;
62+
await settings.setPpid(ppid);
63+
}
64+
65+
@override
66+
Future<void> setSessionID(String sessionID) async {
67+
final ImaSdkSettings settings = await nativeSettingsFuture;
68+
await settings.setSessionId(sessionID);
69+
}
70+
71+
Future<ImaSdkSettings> _createSettings() async {
72+
final ImaSdkSettings settings =
73+
await ImaSdkFactory.instance.createImaSdkSettings();
74+
if (params.language case final String language) {
75+
await settings.setLanguage(language);
76+
}
77+
return settings;
78+
}
79+
}

packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ import '../platform_interface/platform_ads_manager_delegate.dart';
99
import '../platform_interface/platform_ads_rendering_settings.dart';
1010
import '../platform_interface/platform_companion_ad_slot.dart';
1111
import '../platform_interface/platform_content_progress_provider.dart';
12+
import '../platform_interface/platform_ima_settings.dart';
1213
import 'android_ad_display_container.dart';
1314
import 'android_ads_loader.dart';
1415
import 'android_ads_manager_delegate.dart';
1516
import 'android_ads_rendering_settings.dart';
1617
import 'android_companion_ad_slot.dart';
1718
import 'android_content_progress_provider.dart';
19+
import 'android_ima_settings.dart';
1820

1921
/// Android implementation of [InteractiveMediaAdsPlatform].
2022
final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform {
@@ -24,28 +26,28 @@ final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform {
2426
}
2527

2628
@override
27-
PlatformAdDisplayContainer createPlatformAdDisplayContainer(
29+
AndroidAdDisplayContainer createPlatformAdDisplayContainer(
2830
PlatformAdDisplayContainerCreationParams params,
2931
) {
3032
return AndroidAdDisplayContainer(params);
3133
}
3234

3335
@override
34-
PlatformAdsLoader createPlatformAdsLoader(
36+
AndroidAdsLoader createPlatformAdsLoader(
3537
PlatformAdsLoaderCreationParams params,
3638
) {
3739
return AndroidAdsLoader(params);
3840
}
3941

4042
@override
41-
PlatformAdsManagerDelegate createPlatformAdsManagerDelegate(
43+
AndroidAdsManagerDelegate createPlatformAdsManagerDelegate(
4244
PlatformAdsManagerDelegateCreationParams params,
4345
) {
4446
return AndroidAdsManagerDelegate(params);
4547
}
4648

4749
@override
48-
PlatformContentProgressProvider createPlatformContentProgressProvider(
50+
AndroidContentProgressProvider createPlatformContentProgressProvider(
4951
PlatformContentProgressProviderCreationParams params,
5052
) {
5153
return AndroidContentProgressProvider(params);
@@ -64,4 +66,11 @@ final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform {
6466
) {
6567
return AndroidCompanionAdSlot(params);
6668
}
69+
70+
@override
71+
AndroidImaSettings createPlatformImaSettings(
72+
PlatformImaSettingsCreationParams params,
73+
) {
74+
return AndroidImaSettings(params);
75+
}
6776
}

0 commit comments

Comments
 (0)