Skip to content

Releases: HaseebDev/LevelPlay-Mediation-Package

v1.2.2

Choose a tag to compare

@HaseebDev HaseebDev released this 26 Sep 07:35

The iOS ATT prompt is no longer lost when the app is not active at the moment it is requested.

Fixed

  • iOS only presents the App Tracking Transparency prompt while the app is active, and silently drops a request made otherwise: another system alert on screen, an incoming call, Control Center pulled down. The old fire-once request then left the status NotDetermined for the whole session, so the user was never asked.
  • The request is now armed instead of fired once:
    • it asks only while the app is active
    • it asks again every time the app becomes active, while the status is still NotDetermined
    • it stops listening as soon as the user answers
  • The 90 second wait before init is unchanged. On timeout, ads still start without IDFA, but the request stays armed and the prompt appears the next time the app becomes active.
  • Applies to the local consent path and requestAttAuthorization. The InMobi CMP path is unchanged: the CMP raises its own prompt and the package only waits for the answer.

What to look for on device

In a Development Build, pull down Control Center just as the consent form closes, then dismiss it. The log shows:

[Autech.LevelPlay] App lost focus while waiting for ATT; iOS will not show the prompt until it returns.
[Autech.LevelPlay] App became active while ATT is still undetermined, so the prompt is being asked again.

and the prompt appears straight away.

Install

https://github.com/HaseebDev/LevelPlay-Mediation-Package.git#v1.2.2

Or import the attached .unitypackage.

v1.2.1

Choose a tag to compare

@HaseebDev HaseebDev released this 12 Sep 14:51

Diagnostic logging is now compiled out of release builds.

Changed

  • All package logging goes through a new AdLog helper. Info and Warn carry [Conditional] attributes for UNITY_EDITOR and DEVELOPMENT_BUILD, so a release build removes the call entirely, arguments included. That matters because most messages interpolate a string: a runtime flag would still pay to build every message before discarding it, whereas this costs nothing at all.
  • Error and Exception are deliberately not conditional. They fire only when something is genuinely broken, and a shipping game that fails silently is far harder to diagnose than one that leaves a line in the device log.
  • Much deeper tracing on the consent path, all of it development-build only:
    • which consent path was chosen (local form or InMobi CMP)
    • the ATT plan, which component owns the prompt, and the settled ATT status before init
    • the geo lookup endpoint and how long it took
    • prefab load and instantiation
    • what the form was seeded with, and whether it is answerable and readable
    • EventSystem creation and which input backend, plus recovery after a scene load
    • which button was tapped and the resulting decision, and the guard being released

To see any of it on device, tick Development Build in Build Settings.

Install

https://github.com/HaseebDev/LevelPlay-Mediation-Package.git#v1.2.1

Or import the attached .unitypackage.

v1.2.0

Choose a tag to compare

@HaseebDev HaseebDev released this 12 Sep 14:43

Adds a second GDPR consent path alongside the InMobi CMP, selected by the new Use Local Consent toggle on the LevelPlayBootstrap prefab. Off by default, so existing projects are unchanged.

Added

  • Local consent form. Ships inside the package (Runtime/Resources), loaded at runtime, so there is nothing to import or wire. Collects personalised-ads and analytics choices, stores them with a timestamp and policy version, and hands the ads decision to LevelPlay, which forwards it to every mediated adapter. No InMobi account or p-code needed. Not an IAB TCF CMP and not Google-certified, so do not use it with AdMob demand.
  • Privacy policy link on the form, driven by the existing privacyPolicyUrl setting.
  • Consent records now carry a timestamp and a policy version. Bump consentPolicyVersion when your policy or partner list changes and existing answers stop counting, so those users are asked again.
  • Region-limited asking (onlyAskWhereGdprApplies), resolved from the user's IP. Every failure path (timeout, no network, blocked endpoint) shows the form anyway, so a lookup problem can never silently skip somebody who should have been asked.
  • Meta Audience Network setAdvertiserTrackingEnabled is now set by the package from the device's ATT status before LevelPlay init, which Meta requires and no mediation adapter does for you. Safe no-op without the Meta adapter.
  • Build-time check: a build fails if the local form is enabled but TextMeshPro or TMP Essential Resources are missing, instead of shipping a form whose labels cannot render.

Changed

  • Requires Unity 6 and LevelPlay 9.5.1 (was 2021.3 / 9.4.1).
  • GDPR consent uses LevelPlayPrivacySettings.SetGDPRConsent(bool), gated behind a LEVELPLAY_9_5_OR_NEWER version define. The per-network SetGDPRConsents(Dictionary) is deliberately not used: 9.5.0 deprecated it, and it replaces every stored entry on each call, silently revoking consent for any network missing from the map.
  • iOS ATT is now awaited on every path that expects a prompt, including the InMobi path, so anything reading the status afterwards sees a settled value rather than a pending one.

Fixed

  • The consent form can no longer be opened twice and stack two full-screen canvases.
  • The EventSystem the form creates survives a scene load and is cleaned up on destroy, and the form recovers if the scene's own EventSystem is destroyed while it is up.
  • An unanswered consent no longer pushes "denied" to the networks; it leaves the GDPR flag untouched.
  • Consent flags are no longer applied twice on the first answer.
  • The on-device privacy snapshot reports the active consent path instead of always querying the InMobi component.

Install

https://github.com/HaseebDev/LevelPlay-Mediation-Package.git#v1.2.0

Or import the attached .unitypackage. See INSTALL.md.

v1.1.3 — critical iOS launch-crash fix

Choose a tag to compare

@HaseebDev HaseebDev released this 01 Jul 20:41

Fixed: iOS apps crashed on launch (InMobiCMP.framework was not embedded)

InMobiCMP is a dynamic (Swift) framework, but EDM4U's use_frameworks! :linkage => :static Podfile linked it via @rpath without embedding it into the app bundle — so every iOS build from v1.1.1 / v1.1.2 crashed on launch with:

dyld: Library not loaded: @rpath/InMobiCMP.framework/InMobiCMP

v1.1.3 adds a post-build step (ChoiceCMPFrameworkEmbed, ships with the InMobi CMP sample) that copies + code-signs InMobiCMP.framework into the app's Frameworks folder at Xcode build time (device and simulator). Verified on a physical iOS device: the app launches and the ATT prompt fires. (IronSource is static — no embedding needed.)

v1.1.1's <iosPods> fix made iOS compile; this makes it run.

⚠️ If you're on v1.1.1 or v1.1.2, update to v1.1.3 — those iOS builds crash on launch.

Install

https://github.com/HaseebDev/LevelPlay-Mediation-Package.git#v1.1.3

Or download the .unitypackage below. See the changelog.

v1.1.2 — fix UPM import warnings

Choose a tag to compare

@HaseebDev HaseebDev released this 28 Jun 12:16

Patch release that removes the Unity import warnings when installing via git URL:

Asset Packages/com.autech.levelplay-mediation/INSTALL.md has no meta file, but it's in an immutable folder. The asset will be ignored.

Fix: added the missing .meta files for INSTALL.md and RELEASING.md, and removed the temporary IOS-HANDOFF.md dev doc that the v1.1.1 tag still carried. No code changes — same functionality as v1.1.1 (iOS InMobi CMP native SDK, ATT via the CMP, privacy debug snapshot).

Install

https://github.com/HaseebDev/LevelPlay-Mediation-Package.git#v1.1.2

Or download the .unitypackage below. See the changelog.

v1.1.1 — iOS InMobi CMP + ATT + privacy

Choose a tag to compare

@HaseebDev HaseebDev released this 28 Jun 10:22

Autech LevelPlay Mediation v1.1.1 — iOS hardening (InMobi CMP native SDK, ATT, privacy).

Highlights

iOS InMobi CMP native SDK now integrated (build-breaker fix)

The iOS Obj-C binding imports <InMobiCMP/InMobiCMP-Swift.h>, but nothing provided the
native framework, so iOS builds failed with 'InMobiCMP/InMobiCMP-Swift.h' file not found.
ChoiceCMPDependencies.xml now declares the InMobiCMP CocoaPod (pinned to 2.4.2,
matching the bundled Android native InMobi-CMP-2.4.2.aar). EDM4U's iOS Resolver writes it
into the generated Xcode Podfile and runs pod install. Verified end-to-end on macOS
(Unity 6000.4.6f1 / Xcode 26.2): Podfile generated, InMobiCMP.xcframework resolved, the
binding compiles/links, and the full app builds unsigned (BUILD SUCCEEDED).

ATT is now owned by the InMobi CMP (single source of truth)

cmpShowIdfaPopup defaults ON and the app-side prompt (requestAttAuthorization)
defaults OFF, so the iOS ATT "Allow tracking" popup is presented by the CMP as part of
its consent flow instead of by a separate app-side step. AttInfoPlistPostprocessor injects
NSUserTrackingUsageDescription whenever either ATT path is enabled, so the prompt always has
its required usage string. AttManager remains as a read-only ATT status source / opt-in fallback.

Privacy/consent debug snapshot in the demo scene

The example scene's on-screen debug log now dumps a full snapshot once initialised (and after
the privacy form): ATT trigger + status, CCPA/COPPA, the IAB-TCF values the CMP wrote
(gdprApplies, consent type, Purpose 1/3, PurposeConsents, VendorConsents, TC string,
US-Privacy/GPP) and the device advertising ID (IDFA/GAID) — so you can verify on device that
consent + ATT were actually grabbed.

Other

  • Removed a stray NSLocationWhenInUseUsageDescription injection (InMobi's iOS CMP does not
    need it; it determines GDPR region by IP geolocation, not device location).
  • Corrected the SKAdNetwork note: LevelPlay 8.8.0+ writes SKAdNetworkItems only when you
    enable SKAdNetwork IDs in the LevelPlay Network Manager (opt-in). See README/INSTALL.

Note: ironSource/LevelPlay + InMobi are device-only SDKs and do not run on the iOS Simulator —
verify the ATT/GDPR prompts on a physical device.

Install

Package Manager (git URL):

https://github.com/HaseebDev/LevelPlay-Mediation-Package.git#v1.1.1

Or download com.autech.levelplay-mediation-1.1.1.unitypackage below and
Assets → Import Package → Custom Package….

See the full changelog.

v1.1.0

Choose a tag to compare

@HaseebDev HaseebDev released this 16 Jun 11:11

Autech LevelPlay Mediation v1.1.0.

Added

  • Global ad test mode on VerifyLevelPlay (Auto / AlwaysOn / AlwaysOff). Auto ties test mode to Unity's Development Build (Debug.isDebugBuild) — ON in dev builds and the Editor, OFF in production (iOS & Android). It enables the LevelPlay integration test suite and logs the device advertising ID for test-device registration. Adds AdsManager.IsTestMode / LaunchTestSuite() and an on-screen Launch Test Suite button in the example scene.

Fixed

  • InMobi CMP Android build failure + on-launch crashes. InMobi's plugin declares none of its Android dependencies, so on Unity the build failed (AAPT: Theme.Design.BottomSheetDialog not found) and the app crashed on scene load (NoClassDefFoundError for Gson, then androidx.preference.PreferenceManager). Added ChoiceCMPDependencies.xml (EDM4U), shipped with the InMobi CMP sample, declaring the libraries the Choice SDK actually uses: material, gson, androidx.preference, androidx.constraintlayout. The auto-import prompt also triggers an EDM resolve.

Removed

  • The EnableAdsOnIosAppOnMac option; an iOS build on Apple-silicon Mac now always runs ad-free.

Install