diff --git a/skills/levelplay-unity-integration/CHANGELOG.md b/skills/levelplay-unity-integration/CHANGELOG.md index d64b97c..580a05f 100644 --- a/skills/levelplay-unity-integration/CHANGELOG.md +++ b/skills/levelplay-unity-integration/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## v0.7.0 โ€” 2026-06-05 โ€” Initial public beta release +## v0.7.0 โ€” 2026-06-12 โ€” Initial public beta release First release of the LevelPlay Unity integration skill, released as public beta. @@ -17,4 +17,4 @@ First release of the LevelPlay Unity integration skill, released as public beta. ## Feedback -This skill is currently in beta. Share your feedback here: https://docs.google.com/forms/d/e/1FAIpQLSe7WvWozJ67KjgOLglSBvLug8JdgEYk895nn_BHZs0HS_bWJA/viewform?usp=sharing&ouid=116753073211029919766 +This skill is currently in beta. [Share your feedback here](https://docs.google.com/forms/d/e/1FAIpQLSe7WvWozJ67KjgOLglSBvLug8JdgEYk895nn_BHZs0HS_bWJA/viewform). diff --git a/skills/levelplay-unity-integration/README.md b/skills/levelplay-unity-integration/README.md index 511c1d6..c61c004 100644 --- a/skills/levelplay-unity-integration/README.md +++ b/skills/levelplay-unity-integration/README.md @@ -2,7 +2,7 @@ ![Beta](https://img.shields.io/badge/status-beta-orange) ![Version](https://img.shields.io/badge/version-0.7.0-blue) ![License](https://img.shields.io/badge/license-Unity%20Companion-blue) -> ๐Ÿงช **Note:** This skill is in beta and will be shaped by your feedback. Try it out and [let us know what you think](https://docs.google.com/forms/d/e/1FAIpQLSe7WvWozJ67KjgOLglSBvLug8JdgEYk895nn_BHZs0HS_bWJA/viewform?usp=sharing&ouid=116753073211029919766)! +> ๐Ÿงช **Note:** This skill is in beta and will be shaped by your feedback. Try it out and [let us know what you think](https://docs.google.com/forms/d/e/1FAIpQLSe7WvWozJ67KjgOLglSBvLug8JdgEYk895nn_BHZs0HS_bWJA/viewform)! A skill that guides Unity developers through integrating the LevelPlay SDK using the Ads Mediation package in Unity Package Manager: from installation to fully working rewarded ads, interstitials, and banners. @@ -50,6 +50,10 @@ Type `/levelplay-unity-integration` to activate the skill, then describe what yo You can jump in at any step. If the Unity package and SDK are already installed, your agent will pick up from where you are. +## Privacy & Legal + +> **Note:** This skill provides technical integration guidance, including for LevelPlay's privacy APIs. It is not legal advice, and it does not determine which laws apply to your app โ€” that depends on your users, your data practices, and your distribution. Consult your own legal counsel, and refer to [Regulation Advanced Settings for Unity](https://docs.unity.com/en-us/grow/levelplay/sdk/unity/regulation-advanced-settings) for the authoritative LevelPlay documentation. + ## What's in this folder ``` diff --git a/skills/levelplay-unity-integration/SKILL.md b/skills/levelplay-unity-integration/SKILL.md index 2801e55..46f9160 100644 --- a/skills/levelplay-unity-integration/SKILL.md +++ b/skills/levelplay-unity-integration/SKILL.md @@ -5,11 +5,11 @@ description: Use when integrating LevelPlay (IronSource) ads into a Unity projec # LevelPlay Unity package/SDK Integration -Use Unity.RunCommand for editor-side checks and operations. The C# scripts generated in this skill are MonoBehaviour files for the user to save to their project, not for inline execution. +The C# scripts generated in this skill are MonoBehaviour files for the user to save to their project, not for inline execution. Follow the integration workflow sequentially, one step at a time. Ask only the questions for the current step โ€” do not gather information for future steps in advance. Wait for the user's response at each checkpoint before proceeding. -LevelPlay is Unity's ad mediation platform: it connects your game to multiple ad networks simultaneously and automatically shows the highest-paying ad available. This guide walks you through the full integration: installing the SDK, configuring dependencies for Android and iOS, initializing LevelPlay in your project, and implementing rewarded, interstitial, and banner ads. If you already have part of this set up, you can skip ahead to the relevant step. +LevelPlay is Unity's ad mediation platform: it connects your game to multiple ad networks simultaneously and runs a unified auction across multiple ad networks and bidders to maximize competition for each impression. This guide walks you through the full integration: installing the SDK, configuring dependencies for Android and iOS, initializing LevelPlay in your project, and implementing rewarded, interstitial, and banner ads. If you already have part of this set up, you can skip ahead to the relevant step. ## Integration Workflow @@ -164,14 +164,9 @@ This configuration is required for AdMob to work as a mediation network in Level ### 6.5. Privacy & Regulation Settings (If Required) -**When to use**: If your app serves users in the EU (GDPR), California (CCPA), or is directed at children (COPPA). +> **Note:** This skill provides technical integration guidance, including for LevelPlay's privacy APIs. It is not legal advice, and it does not determine which laws apply to your app โ€” that depends on your users, your data practices, and your distribution. Consult your own legal counsel, and refer to [Regulation Advanced Settings for Unity](https://docs.unity.com/en-us/grow/levelplay/sdk/unity/regulation-advanced-settings) for the authoritative LevelPlay documentation. -Ask the user: "Does your app need to comply with any privacy regulations?" -- **GDPR** (EU users): Requires user consent for data collection -- **CCPA** (California users): Requires "Do Not Sell" opt-out option -- **COPPA** (Child-directed apps): Restricts data collection for children under 13 - -If you're unsure whether your app reaches EU users, implement GDPR handling as a precaution โ€” it's better to request consent you don't strictly need than to miss it where you do. +Ask the user: "Do you need to configure privacy settings for GDPR, CCPA/CPRA (or certain state privacy consumer acts), or for child-directed apps?" **If YES to any:** @@ -224,7 +219,7 @@ Call these BEFORE `LevelPlay.Init()` in Step 7. For complete implementation with UI, consent management, and combined regulations, see `references/privacy-settings.md`. -**For iOS builds โ€” required regardless of privacy regulations above:** Also implement App Tracking Transparency (ATT) before proceeding to Step 7. ATT must be called before `LevelPlay.Init()` to maximize ad fill rate on iOS 14+. See `references/ios-setup.md` for the ATT implementation code. +**For iOS builds โ€” required regardless of privacy regulations above:** Also implement App Tracking Transparency (ATT) before proceeding to Step 7. Apple requires ATT authorization before your app tracks users or accesses the device's advertising identifier on iOS 14.5+. Request ATT authorization before calling `LevelPlay.Init()` โ€” this is both an Apple platform requirement and necessary for personalized ads (which also affects fill rate). See `references/ios-setup.md` for the ATT implementation code. **If NO privacy regulations and not targeting iOS:** Skip this step and proceed to Step 7. @@ -1109,3 +1104,4 @@ Read specific references based on what the user is implementing: 8. Recommend balanced strategy (Step 8) 9. Ask to see existing GameManager.cs, then provide code snippets (Step 9) 10. Guide through testing (Step 10) + diff --git a/skills/levelplay-unity-integration/references/interstitial-api.md b/skills/levelplay-unity-integration/references/interstitial-api.md index 7a99111..3aceffa 100644 --- a/skills/levelplay-unity-integration/references/interstitial-api.md +++ b/skills/levelplay-unity-integration/references/interstitial-api.md @@ -45,7 +45,7 @@ public class InterstitialAdManager : MonoBehaviour interstitialAd.OnAdDisplayFailed += OnAdDisplayFailed; interstitialAd.OnAdClicked += OnAdClicked; interstitialAd.OnAdClosed += OnAdClosed; - interstitialAd.OnAdInfoChanged += OnAdInfoChanged; // Fires when the loaded ad swaps to a higher-paying network + interstitialAd.OnAdInfoChanged += OnAdInfoChanged; // Fires when the loaded ad updates after a new auction result // Load the ad LoadAd(); @@ -604,7 +604,7 @@ interstitialAd.OnAdClosed += (adInfo) => **Best practice:** Load the next ad immediately in this callback. #### `OnAdInfoChanged` -Fired when ad information changes, such as when a new highest-paying ad becomes available. +Fired when ad information changes, such as when a new winning ad becomes available after auction. **Signature:** `event Action` @@ -617,7 +617,7 @@ interstitialAd.OnAdInfoChanged += (adInfo) => }; ``` -**Important:** This event indicates that a new ad with potentially different revenue has become available. The SDK automatically selects the highest-paying ad when you call `ShowAd()`, but this event lets you know when the ad info has been updated. This is particularly important for revenue optimization as it signals when a better-paying ad has loaded. +**Important:** This event indicates that a new ad with potentially different revenue has become available. The SDK automatically selects the winning ad from the auction when you call `ShowAd()`, but this event lets you know when the ad info has been updated. This is particularly important for revenue optimization as it signals when a new auction winner has loaded. **When it fires:** - After a new ad loads with different properties than the previous one diff --git a/skills/levelplay-unity-integration/references/ios-setup.md b/skills/levelplay-unity-integration/references/ios-setup.md index 20e0a25..8bff456 100644 --- a/skills/levelplay-unity-integration/references/ios-setup.md +++ b/skills/levelplay-unity-integration/references/ios-setup.md @@ -66,7 +66,7 @@ After building to Xcode, you should see entries like this in Info.plist: ### What is ATT? -Starting with iOS 14.5, apps must request user permission before tracking them across apps and websites. This is required for personalized advertising. ATT must be requested **before** `LevelPlay.Init()` to maximise ad fill rate. +Apple requires ATT authorization before your app tracks users or accesses the device's advertising identifier on iOS 14.5+. Request ATT authorization before calling `LevelPlay.Init()` โ€” this is both an Apple platform requirement and necessary for personalized ads (which also affects fill rate). ### Implementation diff --git a/skills/levelplay-unity-integration/references/privacy-settings.md b/skills/levelplay-unity-integration/references/privacy-settings.md index cdcbbee..3cb426a 100644 --- a/skills/levelplay-unity-integration/references/privacy-settings.md +++ b/skills/levelplay-unity-integration/references/privacy-settings.md @@ -14,7 +14,9 @@ ## Overview -LevelPlay SDK provides APIs to comply with privacy regulations including GDPR, CCPA, and COPPA. These settings must be configured before SDK initialization to ensure compliance with regional privacy laws. +> **Note:** This skill provides technical integration guidance, including for LevelPlay's privacy APIs. It is not legal advice, and it does not determine which laws apply to your app โ€” that depends on your users, your data practices, and your distribution. Consult your own legal counsel, and refer to [Regulation Advanced Settings for Unity](https://docs.unity.com/en-us/grow/levelplay/sdk/unity/regulation-advanced-settings) for the authoritative LevelPlay documentation. + +LevelPlay SDK provides APIs to help facilitate privacy regulation requirements including GDPR, CCPA, and COPPA. These settings must be configured before SDK initialization. **SDK Version Requirement:** SDK 9.4.0+ for current APIs (older deprecated APIs available in SDK 9.3.0 and lower) @@ -352,7 +354,7 @@ If your app is child-directed: 1. **Disable personalized ads**: COPPA requires non-personalized ads only 2. **Google Play Families Policy**: If targeting children on Google Play: - Set COPPA flag: `LevelPlayPrivacySettings.SetCOPPA(true)` - - Ensure ad networks comply with Google Play Families requirements + - Review Google Play Families requirements for child-directed apps - Test thoroughly before submission 3. **App Store age ratings**: Set appropriate age ratings in both app stores 4. **Privacy policy**: Clearly state data collection practices for children @@ -536,7 +538,7 @@ LevelPlay.SetMetaData("is_child_directed", "false"); 4. **Provide UI controls**: Give users easy access to privacy settings 5. **Respect user choices**: Honor opt-outs and consent denials 6. **Update promptly**: When user changes preferences, apply immediately via privacy APIs -7. **Test thoroughly**: Verify compliance in all supported regions +7. **Test thoroughly**: Test your privacy settings in all supported regions 8. **Document clearly**: Include privacy policy links in your app 9. **Use consent management platforms**: Consider third-party CMPs for complex consent requirements 10. **Stay updated**: Privacy regulations evolve, monitor SDK updates for compliance changes diff --git a/skills/levelplay-unity-integration/references/rewarded-api.md b/skills/levelplay-unity-integration/references/rewarded-api.md index 0e38c19..26bdd89 100644 --- a/skills/levelplay-unity-integration/references/rewarded-api.md +++ b/skills/levelplay-unity-integration/references/rewarded-api.md @@ -46,7 +46,7 @@ public class RewardedAdManager : MonoBehaviour rewardedAd.OnAdRewarded += OnAdRewarded; rewardedAd.OnAdClosed += OnAdClosed; rewardedAd.OnAdClicked += OnAdClicked; - rewardedAd.OnAdInfoChanged += OnAdInfoChanged; // Fires when the loaded ad swaps to a higher-paying network + rewardedAd.OnAdInfoChanged += OnAdInfoChanged; // Fires when the loaded ad updates after a new auction result // Load the ad LoadAd(); @@ -580,7 +580,7 @@ rewardedAd.OnAdClicked += (adInfo) => ``` #### `OnAdInfoChanged` -Fired when ad information changes, such as when a new highest-paying ad becomes available. +Fired when ad information changes, such as when a new winning ad becomes available after auction. **Signature:** `event Action` @@ -593,7 +593,7 @@ rewardedAd.OnAdInfoChanged += (adInfo) => }; ``` -**Important:** This event indicates that a new ad with potentially different revenue has become available. The SDK automatically selects the highest-paying ad when you call `ShowAd()`, but this event lets you know when the ad info has been updated. This is particularly important for revenue optimization as it signals when a better-paying ad has loaded. +**Important:** This event indicates that a new ad with potentially different revenue has become available. The SDK automatically selects the winning ad from the auction when you call `ShowAd()`, but this event lets you know when the ad info has been updated. This is particularly important for revenue optimization as it signals when a new auction winner has loaded. **When it fires:** - After a new ad loads with different properties than the previous one