Skip to content

Commit dea9b0b

Browse files
[interactive_media_ads] Fixes support for ad tag URLs that do not contain a query (#9176)
Fixes flutter/flutter#166453 ## Pre-Review Checklist [^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 b2ce3b0 commit dea9b0b

File tree

6 files changed

+56
-14
lines changed

6 files changed

+56
-14
lines changed

packages/interactive_media_ads/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.2.3+12
2+
3+
* Fixes appending request agent to ad tags that contain a query.
4+
15
## 0.2.3+11
26

37
* Updates pigeon generated code to fix `ImplicitSamInstance` and `SyntheticAccessor` Kotlin lint

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

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

2727
override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) {
28-
// Ensure adTag can append a custom parameter.
29-
require(adTagUrl.contains("?"))
30-
require(!adTagUrl.contains("#"))
31-
32-
pigeon_instance.adTagUrl = "$adTagUrl&request_agent=Flutter-IMA-$pluginVersion"
28+
// Add a request agent only if the adTagUrl can append a custom parameter.
29+
if (!adTagUrl.contains("#") && adTagUrl.contains("?")) {
30+
pigeon_instance.adTagUrl = "$adTagUrl&request_agent=Flutter-IMA-$pluginVersion"
31+
} else {
32+
pigeon_instance.adTagUrl = adTagUrl
33+
}
3334
}
3435

3536
override fun setContentProgressProvider(

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

+13
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,19 @@ class AdsRequestProxyApiTest {
2222
"adTag?&request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}"
2323
}
2424

25+
@Test
26+
fun setAdTagUrlDoesNotAddRequestAgentToIncompatibleUrls() {
27+
val api = TestProxyApiRegistrar().getPigeonApiAdsRequest()
28+
29+
val instance = mock<AdsRequest>()
30+
31+
api.setAdTagUrl(instance, "adTag#")
32+
verify(instance).adTagUrl = "adTag#"
33+
34+
api.setAdTagUrl(instance, "adTag?#")
35+
verify(instance).adTagUrl = "adTag?#"
36+
}
37+
2538
@Test
2639
fun setContentProgressProvider() {
2740
val api = TestProxyApiRegistrar().getPigeonApiAdsRequest()

packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift

+24
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,28 @@ final class AdsRequestTests: XCTestCase {
2525
"adTag?&request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)")
2626
XCTAssertIdentical(instance?.adDisplayContainer, container)
2727
}
28+
29+
func testPigeonDefaultConstructorDoesNotAddRequestAgentToIncompatibleURLs() {
30+
let registrar = TestProxyApiRegistrar()
31+
let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar)
32+
33+
let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil)
34+
let contentPlayhead = ContentPlayheadImpl()
35+
36+
var instance = try? api.pigeonDelegate.pigeonDefaultConstructor(
37+
pigeonApi: api, adTagUrl: "adTag#", adDisplayContainer: container,
38+
contentPlayhead: contentPlayhead)
39+
XCTAssertNotNil(instance)
40+
XCTAssertEqual(
41+
instance?.adTagUrl,
42+
"adTag#")
43+
44+
instance = try? api.pigeonDelegate.pigeonDefaultConstructor(
45+
pigeonApi: api, adTagUrl: "adTag#?", adDisplayContainer: container,
46+
contentPlayhead: contentPlayhead)
47+
XCTAssertNotNil(instance)
48+
XCTAssertEqual(
49+
instance?.adTagUrl,
50+
"adTag#?")
51+
}
2852
}

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

+7-7
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,20 @@ 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.3+11"
16+
static let pluginVersion = "0.2.3+12"
1717

1818
func pigeonDefaultConstructor(
1919
pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer,
2020
contentPlayhead: IMAContentPlayhead?
2121
) throws -> IMAAdsRequest {
22-
// Ensure adTag can append a custom parameter.
23-
assert(adTagUrl.contains("?"))
24-
assert(!adTagUrl.contains("#"))
22+
// Add a request agent only if the adTagUrl can append a custom parameter.
23+
let modifiedURL =
24+
!adTagUrl.contains("#") && adTagUrl.contains("?")
25+
? "\(adTagUrl)&request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)"
26+
: adTagUrl
2527

26-
let adTagWithRequestAgent =
27-
"\(adTagUrl)&request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)"
2828
return IMAAdsRequest(
29-
adTagUrl: adTagWithRequestAgent, adDisplayContainer: adDisplayContainer,
29+
adTagUrl: modifiedURL, adDisplayContainer: adDisplayContainer,
3030
contentPlayhead: contentPlayhead as? ContentPlayheadImpl, userContext: nil)
3131
}
3232
}

packages/interactive_media_ads/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: interactive_media_ads
22
description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS.
33
repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22
5-
version: 0.2.3+11 # This must match the version in
5+
version: 0.2.3+12 # This must match the version in
66
# `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and
77
# `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift`
88

0 commit comments

Comments
 (0)