diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 20b13ddb8282..1092b3bdddb9 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -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 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..fc7c4ab3e4e2 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" + val urlHasQuery = adTagUrl.contains("?") + pigeon_instance.adTagUrl = + "$adTagUrl${if (urlHasQuery) "&" else "?"}request_agent=Flutter-IMA-$pluginVersion" } 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..10d9e6ad2f4e 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,17 @@ class AdsRequestProxyApiTest { "adTag?&request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}" } + @Test + fun setAdTagUrlHandlesAUrlWithoutAQuery() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + api.setAdTagUrl(instance, "adTag") + + verify(instance).adTagUrl = + "adTag?request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}" + } + @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..f4c53c113a75 100644 --- a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift +++ b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift @@ -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) + } } 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..3f8aa4674db5 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,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) 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`