Skip to content

Commit 8982feb

Browse files
da2glclaude
andauthored
release/4.2.0: update Appodeal SDK to 4.2.0 (#119)
* release/4.2.0: update Appodeal SDK to 4.2.0 - Updated Appodeal Android SDK to 4.2.0 (core 4.2.0) - Updated Appodeal iOS SDK to 4.2.0 (Appodeal 4.2.0, AppodealIABAdapter 3.5.0.0) - Raised Android minSdk from 23 to 24 (SDK 4.2.0 requirement) - Bumped example compileSdk/targetSdk to 36 - Synced README dependency lists from the Wizard API and aligned the example Android build.gradle and iOS Podfile with them - Added Privacy Entry Point support (US State Regulations / GDPR re-consent): ConsentForm.getPrivacyOptionsRequirementStatus() and ConsentForm.showPrivacyOptionsForm(); new PrivacyOptionsRequirementStatus enum, wired across Dart, Android (Kotlin) and iOS (Swift) with a normalized status mapping (0=unknown, 1=required, 2=notRequired) - Added example UI buttons for the new Privacy APIs and vertical spacing between consent buttons - Bumped example Gradle wrapper to 8.14 - getSDKVersion() now returns 4.2.0 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs: bump README heading and install version to 4.2.0 The Wizard script only updates the dependency blocks between markers, so the top-level "Appodeal SDK 4.x" heading and the pubspec install snippet were still pinned to 4.1.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs: document CocoaPods install! flags for multiple pod sources (#111) The Appodeal Podfile pulls from three sources, so CocoaPods prints a "Found multiple specifications" warning per duplicated pod. Document the recommended install! block (deterministic_uuids + warn_for_multiple_pod_sources) in the iOS setup instructions. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 966e1ff commit 8982feb

14 files changed

Lines changed: 415 additions & 207 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Changelog
22

3+
## 4.2.0
4+
5+
- **Minimum Android API level raised from 23 (Android 6.0) to 24 (Android 7.0)**
6+
- **Added Privacy Entry Point support (US State Regulations / GDPR re-consent)**: `Appodeal.ConsentForm.getPrivacyOptionsRequirementStatus()` and `Appodeal.ConsentForm.showPrivacyOptionsForm(...)`
7+
8+
### Updated SDKs
9+
10+
- Updated Appodeal iOS SDK to [4.2.0](https://docs.appodeal.com/ios/get-started)
11+
- Updated Appodeal Android SDK to [4.2.0](https://docs.appodeal.com/android/get-started)
12+
313
## 4.1.0
414

515
- **Android SDK now uses individual adapter dependencies instead of a single umbrella SDK**

README.md

Lines changed: 68 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Official Appodeal Flutter Plugin for your Flutter application.
44

5-
## Appodeal SDK 4.1.0
5+
## Appodeal SDK 4.2.0
66

77
- **Google CMP and TCF v2 Support**
88
- To enhance the relevance of ads for your users and comply with regulations like GDPR and CCPA,
@@ -53,7 +53,7 @@ Add the dependency to the `pubspec.yaml` file in your project:
5353

5454
```yaml
5555
dependencies:
56-
stack_appodeal_flutter: 4.1.0
56+
stack_appodeal_flutter: 4.2.0
5757
```
5858
5959
Install the plugin by running the command below in the terminal:
@@ -84,10 +84,10 @@ source 'https://cdn.cocoapods.org'
8484
use_frameworks!
8585

8686
def appodeal
87-
pod 'Appodeal', '4.1.0'
87+
pod 'Appodeal', '4.2.0'
8888
# AppLovin MAX
8989
pod 'AppLovinMediationAmazonAdMarketplaceAdapter', '5.3.2.0'
90-
pod 'AppLovinMediationBidMachineAdapter', '3.6.1.0.0'
90+
pod 'AppLovinMediationBidMachineAdapter', '3.7.1.0.0'
9191
pod 'AppLovinMediationBigoAdsAdapter', '5.0.0.0'
9292
pod 'AppLovinMediationByteDanceAdapter', '7.7.0.7.0'
9393
pod 'AppLovinMediationChartboostAdapter', '9.10.1.0'
@@ -111,7 +111,7 @@ def appodeal
111111
# Level Play
112112
pod 'IronSourceAdMobAdapter', '5.3.0.0'
113113
pod 'IronSourceAppLovinAdapter', '5.3.0.0'
114-
pod 'IronSourceBidMachineAdapter', '5.5.0.0'
114+
pod 'IronSourceBidMachineAdapter', '5.7.0.0'
115115
pod 'IronSourceBigoAdapter', '5.1.0.0'
116116
pod 'IronSourceFacebookAdapter', '5.0.0.0'
117117
pod 'IronSourceFyberAdapter', '5.2.0.0'
@@ -126,40 +126,20 @@ def appodeal
126126
pod 'IronSourceUnityAdsAdapter', '5.2.0.0'
127127
pod 'IronSourceVerveAdapter', '5.5.0.0'
128128
pod 'IronSourceVungleAdapter', '5.3.0.0'
129-
# Bidon
130-
pod 'BidonAdapterAmazon', '5.3.2.0'
131-
pod 'BidonAdapterAppLovin', '13.5.1.0'
132-
pod 'BidonAdapterBidMachine', '3.6.1.1'
133-
pod 'BidonAdapterBigoAds', '5.0.0.0'
134-
pod 'BidonAdapterChartboost', '9.10.1.0'
135-
pod 'BidonAdapterDTExchange', '8.4.1.0'
136-
pod 'BidonAdapterInMobi', '11.1.0.0'
137-
pod 'BidonAdapterIronSource', '9.1.0.0.0'
138-
pod 'BidonAdapterMetaAudienceNetwork', '6.20.1.0'
139-
pod 'BidonAdapterMintegral', '7.7.9.0'
140-
pod 'BidonAdapterMobileFuse', '1.9.3.0'
141-
pod 'BidonAdapterMoloco', '4.1.0.0'
142-
pod 'BidonAdapterMyTarget', '5.36.2.0'
143-
pod 'BidonAdapterStartIo', '4.13.0.0'
144-
pod 'BidonAdapterTaurusX', '1.15.0.0'
145-
pod 'BidonAdapterUnityAds', '4.16.3.0'
146-
pod 'BidonAdapterVungle', '7.6.2.0'
147-
pod 'BidonAdapterYandex', '7.17.0.0'
148-
pod 'BidonAdapterZmaticoo', '2.2.0.0'
149129
# Appodeal
150130
pod 'AppodealAdjustAdapter', '5.4.6.1'
151131
pod 'AppodealAmazonAdapter', '5.3.2.0'
152132
pod 'AppodealAppLovinAdapter', '13.5.1.0'
153133
pod 'AppodealAppLovinMAXAdapter', '13.5.1.1'
154134
pod 'AppodealAppsFlyerAdapter', '6.17.7.1'
155-
pod 'AppodealBidMachineAdapter', '3.6.1.0'
156-
pod 'AppodealBidonAdapter', '0.14.0.1'
135+
pod 'AppodealBidMachineAdapter', '3.7.1.0'
136+
pod 'AppodealBidonAdapter', '0.15.0.0'
157137
pod 'AppodealBigoAdsAdapter', '5.0.0.0'
158138
pod 'AppodealDTExchangeAdapter', '8.4.1.0'
159139
pod 'AppodealFacebookAdapter', '18.0.1.0'
160140
pod 'AppodealFirebaseAdapter', '12.4.0.1'
161141
pod 'AppodealGoogleAdMobAdapter', '12.13.0.0'
162-
pod 'AppodealIABAdapter', '3.4.7.0'
142+
pod 'AppodealIABAdapter', '3.5.0.0'
163143
pod 'AppodealInMobiAdapter', '11.1.0.0'
164144
pod 'AppodealIronSourceAdapter', '9.1.0.0.0'
165145
pod 'AppodealLevelPlayAdapter', '9.1.0.0.0'
@@ -170,6 +150,26 @@ def appodeal
170150
pod 'AppodealUnityAdapter', '4.16.3.0'
171151
pod 'AppodealVungleAdapter', '7.6.2.0'
172152
pod 'AppodealYandexAdapter', '7.17.0.1'
153+
# Bidon
154+
pod 'BidonAdapterAmazon', '5.3.2.0'
155+
pod 'BidonAdapterAppLovin', '13.5.1.0'
156+
pod 'BidonAdapterBidMachine', '3.7.1.1'
157+
pod 'BidonAdapterBigoAds', '5.0.0.0'
158+
pod 'BidonAdapterChartboost', '9.10.1.0'
159+
pod 'BidonAdapterDTExchange', '8.4.1.0'
160+
pod 'BidonAdapterInMobi', '11.1.0.0'
161+
pod 'BidonAdapterIronSource', '9.1.0.0.0'
162+
pod 'BidonAdapterMetaAudienceNetwork', '6.20.1.0'
163+
pod 'BidonAdapterMintegral', '7.7.9.0'
164+
pod 'BidonAdapterMobileFuse', '1.9.3.0'
165+
pod 'BidonAdapterMoloco', '4.1.0.0'
166+
pod 'BidonAdapterMyTarget', '5.36.2.0'
167+
pod 'BidonAdapterStartIo', '4.13.0.0'
168+
pod 'BidonAdapterTaurusX', '1.15.0.0'
169+
pod 'BidonAdapterUnityAds', '4.16.3.0'
170+
pod 'BidonAdapterVungle', '7.6.2.0'
171+
pod 'BidonAdapterYandex', '7.17.0.0'
172+
pod 'BidonAdapterZmaticoo', '2.2.0.0'
173173
end
174174

175175
target 'Sample' do
@@ -187,6 +187,15 @@ end
187187
188188
> Note: Appodeal requires to use `use_frameworks!`. You need to remove Flipper dependency from Podfile and AppDelegate.
189189
190+
> [!NOTE]
191+
> The Appodeal dependency list pulls pods from three sources (`appodeal`, `bidon-io`, `cdn.cocoapods.org`). Because some pods are published in more than one of them, CocoaPods prints a `Found multiple specifications` warning for each. Add the following to the top of your `Podfile` to silence those warnings and speed up project generation on this large dependency graph:
192+
>
193+
> ```ruby
194+
> install! 'cocoapods',
195+
> :deterministic_uuids => false,
196+
> :warn_for_multiple_pod_sources => false
197+
> ```
198+
190199
3. Call `pod install`
191200
4. Open `.xcworkspace`
192201
5. Configure `Info.plist`.
@@ -262,32 +271,12 @@ Add dependencies into `build.gradle` (module: app)
262271
<!-- appodeal-deps:android:start -->
263272
``` groovy
264273
dependencies {
265-
implementation "com.appodeal.ads.sdk:core:4.1.0"
266-
// Bidon
267-
implementation "org.bidon:amazon-adapter:11.3.0.0"
268-
implementation "org.bidon:applovin-adapter:13.5.1.0"
269-
implementation "org.bidon:bidmachine-adapter:3.7.1.0"
270-
implementation "org.bidon:bigoads-adapter:5.6.2.0"
271-
implementation "org.bidon:chartboost-adapter:9.10.2.0"
272-
implementation "org.bidon:dtexchange-adapter:8.4.1.0"
273-
implementation "org.bidon:inmobi-adapter:11.1.0.0"
274-
implementation "org.bidon:ironsource-adapter:9.1.0.0"
275-
implementation "org.bidon:meta-adapter:6.21.0.0"
276-
implementation "org.bidon:mintegral-adapter:17.1.61.0"
277-
implementation "org.bidon:mobilefuse-adapter:1.9.3.0"
278-
implementation "org.bidon:moloco-adapter:4.3.1.0"
279-
implementation "org.bidon:startio-adapter:5.2.4.1"
280-
implementation "org.bidon:taurusx-adapter:1.12.2.0"
281-
implementation "org.bidon:unityads-adapter:4.17.0.0"
282-
implementation "org.bidon:vkads-adapter:5.47.1.0"
283-
implementation "org.bidon:vungle-adapter:7.6.1.0"
284-
implementation "org.bidon:yandex-adapter:7.17.0.0"
285-
implementation "org.bidon:zmaticoo-adapter:2.0.6.0.0"
274+
implementation "com.appodeal.ads.sdk:core:4.2.0"
286275
// AppLovin MAX
287276
implementation "com.applovin.mediation:amazon-tam-adapter:11.3.0.0"
288277
implementation "com.applovin.mediation:bidmachine-adapter:3.7.1.0"
289278
implementation "com.applovin.mediation:bigoads-adapter:5.6.2.0"
290-
implementation "com.applovin.mediation:bytedance-adapter:7.7.0.2.0"
279+
implementation "com.applovin.mediation:bytedance-adapter:8.1.0.3.0"
291280
implementation "com.applovin.mediation:chartboost-adapter:9.10.2.0"
292281
implementation "com.applovin.mediation:facebook-adapter:6.21.0.0"
293282
implementation "com.applovin.mediation:fyber-adapter:8.4.1.0"
@@ -319,20 +308,46 @@ dependencies {
319308
implementation "com.unity3d.ads-mediation:moloco-adapter:5.5.0"
320309
implementation "com.unity3d.ads-mediation:mytarget-adapter:5.5.0"
321310
implementation "com.unity3d.ads-mediation:ogury-adapter:5.2.0"
322-
implementation "com.unity3d.ads-mediation:pangle-adapter:5.3.0"
311+
implementation "com.unity3d.ads-mediation:pangle-adapter:5.18.0"
323312
implementation "com.unity3d.ads-mediation:smaato-adapter:5.0.0"
324313
implementation "com.unity3d.ads-mediation:unityads-adapter:5.6.0"
325314
implementation "com.unity3d.ads-mediation:verve-adapter:5.2.0"
326315
implementation "com.unity3d.ads-mediation:vungle-adapter:5.4.0"
316+
// BidMachine
317+
implementation "io.bidmachine:ads.networks.amazon:11.3.0.2"
318+
implementation "io.bidmachine:ads.networks.meta_audience:6.21.0.1"
319+
implementation "io.bidmachine:ads.networks.mintegral:17.1.61.1"
320+
implementation "io.bidmachine:ads.networks.my_target:5.47.1.2"
321+
implementation "io.bidmachine:ads.networks.vungle:7.6.1.2"
322+
// Bidon
323+
implementation "org.bidon:amazon-adapter:11.3.0.0"
324+
implementation "org.bidon:applovin-adapter:13.5.1.0"
325+
implementation "org.bidon:bidmachine-adapter:3.7.1.0"
326+
implementation "org.bidon:bigoads-adapter:5.6.2.0"
327+
implementation "org.bidon:chartboost-adapter:9.10.2.0"
328+
implementation "org.bidon:dtexchange-adapter:8.4.1.0"
329+
implementation "org.bidon:inmobi-adapter:11.1.0.0"
330+
implementation "org.bidon:ironsource-adapter:9.1.0.0"
331+
implementation "org.bidon:meta-adapter:6.21.0.0"
332+
implementation "org.bidon:mintegral-adapter:17.1.61.0"
333+
implementation "org.bidon:mobilefuse-adapter:1.9.3.0"
334+
implementation "org.bidon:moloco-adapter:4.3.1.0"
335+
implementation "org.bidon:startio-adapter:5.2.4.1"
336+
implementation "org.bidon:taurusx-adapter:1.12.2.0"
337+
implementation "org.bidon:unityads-adapter:4.17.0.0"
338+
implementation "org.bidon:vkads-adapter:5.47.1.0"
339+
implementation "org.bidon:vungle-adapter:7.6.1.0"
340+
implementation "org.bidon:yandex-adapter:7.17.0.0"
341+
implementation "org.bidon:zmaticoo-adapter:2.0.6.0.0"
327342
// Appodeal
328343
implementation "com.appodeal.ads.sdk.adapters:adjust:5.4.6.1"
329344
implementation "com.appodeal.ads.sdk.adapters:admob:24.7.0.0"
330345
implementation "com.appodeal.ads.sdk.adapters:amazon:11.3.0.0"
331346
implementation "com.appodeal.ads.sdk.adapters:applovin:13.5.1.0"
332347
implementation "com.appodeal.ads.sdk.adapters:applovin_max:13.5.1.1"
333-
implementation "com.appodeal.ads.sdk.adapters:appsflyer:6.17.3.1"
348+
implementation "com.appodeal.ads.sdk.adapters:appsflyer:6.18.0.1"
334349
implementation "com.appodeal.ads.sdk.adapters:bidmachine:3.7.1.0"
335-
implementation "com.appodeal.ads.sdk.adapters:bidon:0.13.0.0"
350+
implementation "com.appodeal.ads.sdk.adapters:bidon:0.14.0.0"
336351
implementation "com.appodeal.ads.sdk.adapters:bigo_ads:5.6.2.0"
337352
implementation "com.appodeal.ads.sdk.adapters:chartboost:9.10.2.0"
338353
implementation "com.appodeal.ads.sdk.adapters:dt_exchange:8.4.1.0"
@@ -348,7 +363,6 @@ dependencies {
348363
implementation "com.appodeal.ads.sdk.adapters:moloco:4.3.1.0"
349364
implementation "com.appodeal.ads.sdk.adapters:my_target:5.47.1.0"
350365
implementation "com.appodeal.ads.sdk.adapters:ogury:6.2.0.0"
351-
implementation "com.appodeal.ads.sdk.adapters:pangle:7.7.0.2.0"
352366
implementation "com.appodeal.ads.sdk.adapters:pubmatic:4.10.0.0"
353367
implementation "com.appodeal.ads.sdk.adapters:sentry_analytics:8.26.0.0"
354368
implementation "com.appodeal.ads.sdk.adapters:smaato:22.7.2.0"
@@ -358,13 +372,6 @@ dependencies {
358372
implementation "com.appodeal.ads.sdk.adapters:verve:3.7.1.0"
359373
implementation "com.appodeal.ads.sdk.adapters:vungle:7.6.1.0"
360374
implementation "com.appodeal.ads.sdk.adapters:yandex:7.17.0.0"
361-
// BidMachine
362-
implementation "io.bidmachine:ads.networks.amazon:11.3.0.2"
363-
implementation "io.bidmachine:ads.networks.meta_audience:6.21.0.1"
364-
implementation "io.bidmachine:ads.networks.mintegral:17.1.61.1"
365-
implementation "io.bidmachine:ads.networks.my_target:5.47.1.2"
366-
implementation "io.bidmachine:ads.networks.pangle:7.7.0.2.2"
367-
implementation "io.bidmachine:ads.networks.vungle:7.6.1.2"
368375
}
369376
```
370377
<!-- appodeal-deps:android:end -->

android/build.gradle

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ android {
3030
namespace 'com.appodeal.appodeal_flutter'
3131
}
3232

33-
compileSdk 35
33+
compileSdk 36
3434

3535
defaultConfig {
36-
minSdk 23
37-
targetSdk 35
36+
minSdk 24
37+
targetSdk 36
3838
}
3939

4040
compileOptions {
@@ -53,7 +53,7 @@ android {
5353

5454
dependencies {
5555
implementation(platform("org.jetbrains.kotlin:kotlin-bom:$kotlin_version"))
56-
// Appodeal SDK 4.1.0
57-
implementation 'com.appodeal.ads.sdk:core:4.1.0'
56+
// Appodeal SDK 4.2.0
57+
implementation 'com.appodeal.ads.sdk:core:4.2.0'
5858
implementation 'com.appodeal.ads.sdk.adapters:iab:1.8.1.0'
5959
}

android/src/main/kotlin/com/appodeal/appodeal_flutter/AppodealConsentManager.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import com.appodeal.consent.ConsentInfoUpdateCallback
66
import com.appodeal.consent.ConsentManager
77
import com.appodeal.consent.ConsentManagerError
88
import com.appodeal.consent.ConsentUpdateRequestParameters
9+
import com.appodeal.consent.OnConsentFormDismissedListener
10+
import com.appodeal.consent.PrivacyOptionsRequirementStatus
911
import io.flutter.embedding.engine.plugins.FlutterPlugin
1012
import io.flutter.plugin.common.MethodCall
1113
import io.flutter.plugin.common.MethodChannel
@@ -28,6 +30,8 @@ internal class AppodealConsentManager(
2830
"show" -> show(call, result)
2931
"loadAndShowIfRequired" -> loadAndShowIfRequired(call, result)
3032
"revoke" -> revoke(call, result)
33+
"getPrivacyOptionsRequirementStatus" -> getPrivacyOptionsRequirementStatus(call, result)
34+
"showPrivacyOptionsForm" -> showPrivacyOptionsForm(call, result)
3135
else -> result.notImplemented()
3236
}
3337
}
@@ -123,4 +127,29 @@ internal class AppodealConsentManager(
123127
ConsentManager.revoke(flutterPlugin.context)
124128
result.success(null)
125129
}
130+
131+
private fun getPrivacyOptionsRequirementStatus(call: MethodCall, result: MethodChannel.Result) {
132+
// Normalized to match the Dart PrivacyOptionsRequirementStatus enum and the iOS side:
133+
// 0 = unknown, 1 = required, 2 = notRequired.
134+
val normalized = when (ConsentManager.getPrivacyOptionsRequirementStatus()) {
135+
PrivacyOptionsRequirementStatus.Required -> 1
136+
PrivacyOptionsRequirementStatus.NotRequired -> 2
137+
else -> 0
138+
}
139+
result.success(normalized)
140+
}
141+
142+
private fun showPrivacyOptionsForm(call: MethodCall, result: MethodChannel.Result) {
143+
val activity = flutterPlugin.activity
144+
ConsentManager.showPrivacyOptionsForm(
145+
activity,
146+
object : OnConsentFormDismissedListener {
147+
override fun onConsentFormDismissed(error: ConsentManagerError?) {
148+
val invokeArgs = error?.let { mapOf("error" to it.localizedMessage) }
149+
adChannel.invokeMethod("onConsentFormDismissed", invokeArgs)
150+
}
151+
}
152+
)
153+
result.success(null)
154+
}
126155
}

0 commit comments

Comments
 (0)