diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 20b13ddb8282..347340ae32bc 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.3+12 + +* Fixes appending request agent to ad tags that contain a query. + ## 0.2.3+11 * Updates pigeon generated code to fix `ImplicitSamInstance` and `SyntheticAccessor` Kotlin lint diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt index d5229e4aa476..2e46d3435d50 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -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" + // Add a request agent only if the adTagUrl can append a custom parameter. + if (!adTagUrl.contains("#") && adTagUrl.contains("?")) { + pigeon_instance.adTagUrl = "$adTagUrl&request_agent=Flutter-IMA-$pluginVersion" + } else { + pigeon_instance.adTagUrl = adTagUrl + } } override fun setContentProgressProvider( diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt index 42f0cc88b84e..e3e9e2baf557 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt @@ -22,6 +22,19 @@ class AdsRequestProxyApiTest { "adTag?&request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}" } + @Test + fun setAdTagUrlDoesNotAddRequestAgentToIncompatibleUrls() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + + api.setAdTagUrl(instance, "adTag#") + verify(instance).adTagUrl = "adTag#" + + api.setAdTagUrl(instance, "adTag?#") + verify(instance).adTagUrl = "adTag?#" + } + @Test fun setContentProgressProvider() { val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() diff --git a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift index 21b52654ad9d..c7b6c0b4ed63 100644 --- a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift +++ b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift @@ -25,4 +25,28 @@ final class AdsRequestTests: XCTestCase { "adTag?&request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)") XCTAssertIdentical(instance?.adDisplayContainer, container) } + + func testPigeonDefaultConstructorDoesNotAddRequestAgentToIncompatibleURLs() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + + var instance = try? api.pigeonDelegate.pigeonDefaultConstructor( + pigeonApi: api, adTagUrl: "adTag#", adDisplayContainer: container, + contentPlayhead: contentPlayhead) + XCTAssertNotNil(instance) + XCTAssertEqual( + instance?.adTagUrl, + "adTag#") + + instance = try? api.pigeonDelegate.pigeonDefaultConstructor( + pigeonApi: api, adTagUrl: "adTag#?", adDisplayContainer: container, + contentPlayhead: contentPlayhead) + XCTAssertNotNil(instance) + XCTAssertEqual( + instance?.adTagUrl, + "adTag#?") + } } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift index 8f926613c6ea..c6ce12f4793e 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,20 +13,20 @@ 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("#")) + // Add a request agent only if the adTagUrl can append a custom parameter. + let modifiedURL = + !adTagUrl.contains("#") && adTagUrl.contains("?") + ? "\(adTagUrl)&request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)" + : adTagUrl - let adTagWithRequestAgent = - "\(adTagUrl)&request_agent=Flutter-IMA-\(AdsRequestProxyAPIDelegate.pluginVersion)" return IMAAdsRequest( - adTagUrl: adTagWithRequestAgent, adDisplayContainer: adDisplayContainer, + adTagUrl: modifiedURL, adDisplayContainer: adDisplayContainer, contentPlayhead: contentPlayhead as? ContentPlayheadImpl, userContext: nil) } } diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 2c4a1d24cd45..69a19874a871 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -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`