Skip to content

[interactive_media_ads] Fixes support for ad tag URLs that do not contain a query #9176

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/interactive_media_ads/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.2.3+12

* Fixes support for ad tag URLs that do not contain a query.

## 0.2.3+11

* Updates pigeon generated code to fix `ImplicitSamInstance` and `SyntheticAccessor` Kotlin lint
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,16 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) :
*
* This must match the version in pubspec.yaml.
*/
const val pluginVersion = "0.2.3+11"
const val pluginVersion = "0.2.3+12"
}

override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) {
// Ensure adTag can append a custom parameter.
require(adTagUrl.contains("?"))
require(!adTagUrl.contains("#"))

pigeon_instance.adTagUrl = "$adTagUrl&request_agent=Flutter-IMA-$pluginVersion"
val urlHasQuery = adTagUrl.contains("?")
pigeon_instance.adTagUrl =
"$adTagUrl${if (urlHasQuery) "&" else "?"}request_agent=Flutter-IMA-$pluginVersion"
}

override fun setContentProgressProvider(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,17 @@ class AdsRequestProxyApiTest {
"adTag?&request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}"
}

@Test
fun setAdTagUrlHandlesAUrlWithoutAQuery() {
val api = TestProxyApiRegistrar().getPigeonApiAdsRequest()

val instance = mock<AdsRequest>()
api.setAdTagUrl(instance, "adTag")

verify(instance).adTagUrl =
"adTag?request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}"
}

@Test
fun setContentProgressProvider() {
val api = TestProxyApiRegistrar().getPigeonApiAdsRequest()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,21 @@ final class AdsRequestTests: XCTestCase {
"adTag?&request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)")
XCTAssertIdentical(instance?.adDisplayContainer, container)
}

func testPigeonDefaultConstructorHandlesURLWithoutAQuery() {
let registrar = TestProxyApiRegistrar()
let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar)

let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil)
let contentPlayhead = ContentPlayheadImpl()
let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(
pigeonApi: api, adTagUrl: "adTag", adDisplayContainer: container,
contentPlayhead: contentPlayhead)

XCTAssertNotNil(instance)
XCTAssertEqual(
instance?.adTagUrl,
"adTag?request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)")
XCTAssertIdentical(instance?.adDisplayContainer, container)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@ 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.3+11"
static let pluginVersion = "0.2.3+12"

func pigeonDefaultConstructor(
pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer,
contentPlayhead: IMAContentPlayhead?
) throws -> IMAAdsRequest {
// Ensure adTag can append a custom parameter.
assert(adTagUrl.contains("?"))
assert(!adTagUrl.contains("#"))

let urlHasQuery = adTagUrl.contains("?")
let adTagWithRequestAgent =
"\(adTagUrl)&request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)"
"\(adTagUrl)\(urlHasQuery ? "&" : "?")request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)"
return IMAAdsRequest(
adTagUrl: adTagWithRequestAgent, adDisplayContainer: adDisplayContainer,
contentPlayhead: contentPlayhead as? ContentPlayheadImpl, userContext: nil)
Expand Down
2 changes: 1 addition & 1 deletion packages/interactive_media_ads/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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.3+11 # This must match the version in
version: 0.2.3+12 # 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`

Expand Down