Skip to content

Commit d59d222

Browse files
authored
Merge branch 'main' into go-router/add-relative-go-route-data
2 parents 998cb50 + b535930 commit d59d222

File tree

13 files changed

+700
-40
lines changed

13 files changed

+700
-40
lines changed

packages/interactive_media_ads/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## 0.2.6+1
2+
3+
* Fixes passing ads response to Android native `AdsRequest`.
4+
5+
## 0.2.6
6+
7+
* Adds support to configure ad requests. See `AdsRequest`.
8+
19
## 0.2.5+1
210

311
* Adds remaining methods for internal wrapper of the Android native `AdsRequest`.

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.5+1"
24+
const val pluginVersion = "0.2.6+1"
2525
}
2626

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

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.5+1"
16+
static let pluginVersion = "0.2.6+1"
1717

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

packages/interactive_media_ads/lib/src/ads_request.dart

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,57 @@ import 'platform_interface/platform_interface.dart';
77

88
/// An object containing the data used to request ads from the server.
99
class AdsRequest {
10-
/// Creates an [AdsRequest].
10+
/// Creates an [AdsRequest] with the given ad tag URL.
1111
AdsRequest({
1212
required String adTagUrl,
1313
ContentProgressProvider? contentProgressProvider,
14+
bool? adWillAutoPlay,
15+
bool? adWillPlayMuted,
16+
bool? continuousPlayback,
17+
Duration? contentDuration,
18+
List<String>? contentKeywords,
19+
String? contentTitle,
20+
Duration? liveStreamPrefetchMaxWaitTime,
21+
Duration? vastLoadTimeout,
1422
}) : this.fromPlatform(
15-
PlatformAdsRequest(
23+
PlatformAdsRequest.withAdTagUrl(
1624
adTagUrl: adTagUrl,
1725
contentProgressProvider: contentProgressProvider?.platform,
26+
adWillAutoPlay: adWillAutoPlay,
27+
adWillPlayMuted: adWillPlayMuted,
28+
continuousPlayback: continuousPlayback,
29+
contentDuration: contentDuration,
30+
contentKeywords: contentKeywords,
31+
contentTitle: contentTitle,
32+
liveStreamPrefetchMaxWaitTime: liveStreamPrefetchMaxWaitTime,
33+
vastLoadTimeout: vastLoadTimeout,
34+
),
35+
);
36+
37+
/// Creates an [AdsRequest] with the given canned ads response.
38+
AdsRequest.withAdsResponse({
39+
required String adsResponse,
40+
ContentProgressProvider? contentProgressProvider,
41+
bool? adWillAutoPlay,
42+
bool? adWillPlayMuted,
43+
bool? continuousPlayback,
44+
Duration? contentDuration,
45+
List<String>? contentKeywords,
46+
String? contentTitle,
47+
Duration? liveStreamPrefetchMaxWaitTime,
48+
Duration? vastLoadTimeout,
49+
}) : this.fromPlatform(
50+
PlatformAdsRequest.withAdsResponse(
51+
adsResponse: adsResponse,
52+
contentProgressProvider: contentProgressProvider?.platform,
53+
adWillAutoPlay: adWillAutoPlay,
54+
adWillPlayMuted: adWillPlayMuted,
55+
continuousPlayback: continuousPlayback,
56+
contentDuration: contentDuration,
57+
contentKeywords: contentKeywords,
58+
contentTitle: contentTitle,
59+
liveStreamPrefetchMaxWaitTime: liveStreamPrefetchMaxWaitTime,
60+
vastLoadTimeout: vastLoadTimeout,
1861
),
1962
);
2063

@@ -25,7 +68,20 @@ class AdsRequest {
2568
final PlatformAdsRequest platform;
2669

2770
/// The URL from which ads will be requested.
28-
String get adTagUrl => platform.adTagUrl;
71+
String get adTagUrl => switch (platform) {
72+
final PlatformAdsRequestWithAdTagUrl request => request.adTagUrl,
73+
// TODO(bparrishMines): This returns an empty string rather than null
74+
// to prevent a breaking change. This should be updated to return null
75+
// on the next major release.
76+
PlatformAdsRequestWithAdsResponse() => '',
77+
};
78+
79+
/// Specifies a VAST, VMAP, or ad rules response to be used instead of making
80+
/// a request through an ad tag URL.
81+
String? get adsResponse => switch (platform) {
82+
final PlatformAdsRequestWithAdsResponse request => request.adsResponse,
83+
PlatformAdsRequestWithAdTagUrl() => null,
84+
};
2985

3086
/// A [ContentProgressProvider] instance to allow scheduling of ad breaks
3187
/// based on content progress (cue points).
@@ -34,4 +90,33 @@ class AdsRequest {
3490
null
3591
? ContentProgressProvider.fromPlatform(platform.contentProgressProvider!)
3692
: null;
93+
94+
/// Notifies the SDK whether the player intends to start the content and ad in
95+
/// response to a user action or whether it will be automatically played.
96+
bool? get adWillAutoPlay => platform.adWillAutoPlay;
97+
98+
/// Notifies the SDK whether the player intends to start the content and ad
99+
/// while muted.
100+
bool? get adWillPlayMuted => platform.adWillPlayMuted;
101+
102+
/// Notifies the SDK whether the player intends to continuously play the
103+
/// content videos one after another similar to TV broadcast.
104+
bool? get continuousPlayback => platform.continuousPlayback;
105+
106+
/// Specifies the duration of the content to be shown.
107+
Duration? get contentDuration => platform.contentDuration;
108+
109+
/// Specifies the keywords used to describe the content to be shown.
110+
List<String>? get contentKeywords => platform.contentKeywords;
111+
112+
/// Specifies the title of the content to be shown.
113+
String? get contentTitle => platform.contentTitle;
114+
115+
/// Specifies the maximum amount of time to wait, after calling requestAds,
116+
/// before requesting the ad tag URL.
117+
Duration? get liveStreamPrefetchMaxWaitTime =>
118+
platform.liveStreamPrefetchMaxWaitTime;
119+
120+
/// Specifies the VAST load timeout in milliseconds for a single wrapper.
121+
Duration? get vastLoadTimeout => platform.vastLoadTimeout;
37122
}

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

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,36 @@ base class AndroidAdsLoader extends PlatformAdsLoader {
8989
final ima.AdsRequest androidRequest = await _sdkFactory.createAdsRequest();
9090

9191
await Future.wait(<Future<void>>[
92-
androidRequest.setAdTagUrl(request.adTagUrl),
93-
if (request.contentProgressProvider != null)
92+
if (request case final PlatformAdsRequestWithAdTagUrl request)
93+
androidRequest.setAdTagUrl(request.adTagUrl),
94+
if (request case final PlatformAdsRequestWithAdsResponse request)
95+
androidRequest.setAdsResponse(request.adsResponse),
96+
if (request.adWillAutoPlay case final bool adWillAutoPlay)
97+
androidRequest.setAdWillAutoPlay(adWillAutoPlay),
98+
if (request.adWillPlayMuted case final bool adWillPlayMuted)
99+
androidRequest.setAdWillPlayMuted(adWillPlayMuted),
100+
if (request.continuousPlayback case final bool continuousPlayback)
101+
androidRequest.setContinuousPlayback(continuousPlayback),
102+
if (request.contentDuration case final Duration contentDuration)
103+
androidRequest.setContentDuration(
104+
contentDuration.inMilliseconds / Duration.millisecondsPerSecond),
105+
if (request.contentKeywords case final List<String> contentKeywords)
106+
androidRequest.setContentKeywords(contentKeywords),
107+
if (request.contentTitle case final String contentTitle)
108+
androidRequest.setContentTitle(contentTitle),
109+
if (request.liveStreamPrefetchMaxWaitTime
110+
case final Duration liveStreamPrefetchMaxWaitTime)
111+
androidRequest.setLiveStreamPrefetchSeconds(
112+
liveStreamPrefetchMaxWaitTime.inMilliseconds /
113+
Duration.millisecondsPerSecond,
114+
),
115+
if (request.vastLoadTimeout case final Duration vastLoadTimeout)
116+
androidRequest
117+
.setVastLoadTimeout(vastLoadTimeout.inMilliseconds.toDouble()),
118+
if (request.contentProgressProvider
119+
case final PlatformContentProgressProvider contentProgressProvider)
94120
androidRequest.setContentProgressProvider(
95-
(request.contentProgressProvider! as AndroidContentProgressProvider)
121+
(contentProgressProvider as AndroidContentProgressProvider)
96122
.progressProvider,
97123
),
98124
adsLoader.requestAds(androidRequest),

packages/interactive_media_ads/lib/src/ios/ios_ads_loader.dart

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,55 @@ base class IOSAdsLoader extends PlatformAdsLoader {
7373
}
7474

7575
@override
76-
Future<void> requestAds(PlatformAdsRequest request) async {
77-
return _adsLoader.requestAds(_iosParams._proxy.newIMAAdsRequest(
78-
adTagUrl: request.adTagUrl,
79-
adDisplayContainer:
80-
(_iosParams.container as IOSAdDisplayContainer).adDisplayContainer!,
81-
contentPlayhead: request.contentProgressProvider != null
82-
? (request.contentProgressProvider! as IOSContentProgressProvider)
83-
.contentPlayhead
84-
: null,
85-
));
76+
Future<void> requestAds(PlatformAdsRequest request) {
77+
final IMAAdDisplayContainer adDisplayContainer =
78+
(_iosParams.container as IOSAdDisplayContainer).adDisplayContainer!;
79+
final IMAContentPlayhead? contentProgressProvider =
80+
request.contentProgressProvider != null
81+
? (request.contentProgressProvider! as IOSContentProgressProvider)
82+
.contentPlayhead
83+
: null;
84+
85+
final IMAAdsRequest adsRequest = switch (request) {
86+
final PlatformAdsRequestWithAdTagUrl request => IMAAdsRequest(
87+
adTagUrl: request.adTagUrl,
88+
adDisplayContainer: adDisplayContainer,
89+
contentPlayhead: contentProgressProvider,
90+
),
91+
PlatformAdsRequestWithAdsResponse() => IMAAdsRequest.withAdsResponse(
92+
adsResponse: request.adsResponse,
93+
adDisplayContainer: adDisplayContainer,
94+
contentPlayhead: contentProgressProvider,
95+
),
96+
};
97+
98+
return Future.wait(<Future<void>>[
99+
if (request.adWillAutoPlay case final bool adWillAutoPlay)
100+
adsRequest.setAdWillAutoPlay(adWillAutoPlay),
101+
if (request.adWillPlayMuted case final bool adWillPlayMuted)
102+
adsRequest.setAdWillPlayMuted(adWillPlayMuted),
103+
if (request.continuousPlayback case final bool continuousPlayback)
104+
adsRequest.setContinuousPlayback(continuousPlayback),
105+
if (request.contentDuration case final Duration contentDuration)
106+
adsRequest.setContentDuration(
107+
contentDuration.inMilliseconds / Duration.millisecondsPerSecond,
108+
),
109+
if (request.contentKeywords case final List<String> contentKeywords)
110+
adsRequest.setContentKeywords(contentKeywords),
111+
if (request.contentTitle case final String contentTitle)
112+
adsRequest.setContentTitle(contentTitle),
113+
if (request.liveStreamPrefetchMaxWaitTime
114+
case final Duration liveStreamPrefetchMaxWaitTime)
115+
adsRequest.setLiveStreamPrefetchSeconds(
116+
liveStreamPrefetchMaxWaitTime.inMilliseconds /
117+
Duration.millisecondsPerSecond,
118+
),
119+
if (request.vastLoadTimeout case final Duration vastLoadTimeout)
120+
adsRequest.setVastLoadTimeout(
121+
vastLoadTimeout.inMilliseconds.toDouble(),
122+
),
123+
_adsLoader.requestAds(adsRequest),
124+
]);
86125
}
87126

88127
// This value is created in a static method because the callback methods for

0 commit comments

Comments
 (0)