Global Data Protection Regulation (GDPR) & You

ForumNinjaForumNinja Key Master, Head Chef, Member, PRO Posts: 554
edited April 2020 in GameSalad Kitchen

The day of reckoning is upon us! Here's an update on the current status of everything in regards to GDPR:


Privacy Policy Update

We’ve updated our Privacy Policy. It now provides more info about what data we collect from you, how it's collected, what we use it for, and what rights you have over your personal information. If you have any questions or requests in regards to your data, please direct them to privacy@gamesalad.com


GDPR in Regards to your Published Apps

GDPR effects everyone who has apps or games published to any of the app stores for a couple reasons:

  1. Our engine has tracking in it, which means that all of your currently published apps on the store are not currently GDPR compliant.
  2. Ad providers have their own tracking that they perform in order to serve targeted ads to your players, so you will need to account for that in your games.

To address this we're in the process of removing the tracking from our engine (the engine for iOS apps is already updated without tracking, so simply republish your apps to the stores and you should be all set for iOS, unless you serve ads).


Republish your iOS apps to the store and, if you serve ads, read the information below first.


Our engine is still being updated for Android (and the API level is being updated to 26 as well), so stay tuned on when to republish Android apps.


If you use advertisements in your games

If you don't use advertisements you can ignore this part.

If you do serve ads in your games, you'll need to create a new game attribute called 'privateDataConsentForAds', and set it to '-1'.

You will need to inform your players that the game/app they're about to use serves targeted ads, and prompt them to give their consent before playing. If they consent to being shown targeted ads, set privateDataConsentForAds to '1' and all the ads should work normally.

If they don't, set privateDataConsentForAds to '0'. This will cause no ads to display for most ad providers. The only exception is AdMob, which will show non-targeted ads.

Make sure to save and load the privateDataConsentForAds attribute so that you only need to prompt the player once! I've attached a super simple project demonstrating how you could set this up.


I hope this helps clear some things up, but feel free to drop questions below!

UPDATE - 2018-06-11

If you see mentions of an "RC" build in this thread, you can ignore those now. The RC build has been promoted to the main build and the RC button has been removed.

«1345

Comments

  • RowdyPantsRowdyPants Member Posts: 465

    @ForumNinja Thank you. Very helpful!

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034

    FYI, the Android build is starting to look good.

    The delay was due to issues with android library incompatibilities we needed to resolve that only popped up in late testing.

    The new build will target API Level 26 while allowing for a minimal API level of 16 (drive by Chartboost). According to Google, this will only exclude 0.7% of devices (Devices before Jellybean).

    Ad Libraries are as follows:
    Chartboost - 7.2.0
    Revmob - 10.0.0
    Tapdaq - 6.2.2

    Because we didn't get a lot of time to test, we'll be putting out this release tomorrow as an Release Candidate (RC) build. You'll be presented with two Generate buttons on your project. If you click the "Generate RC", it will use this new build. If you just hit "Generate", it will use the existing build.

  • freneticzfreneticz SwedenMember, PRO Posts: 774

    If you set privateDataConsentForAds to '0' to use non targeting ads you dont need to prompt the player at all?

  • pinkio75pinkio75 Member, PRO Posts: 1,211

    Hi Alex but about your example we need to join all change scene or AdMob banners etc... to the attribute "privateDataConsentForAds"?

    If i add your scene to my games it working fine? i think that is not enough to limit ADV because the change scenes checked or banners for ADV etc are not "join directly" to this new attribute so i mean i need to "re-edit" all change scenes of my games to working fine??

    Is not more easy to limit this issue with ad new attribute directly from the Creator like "Player1 Keymap" or "purchase Table" i mean You can create a new attribute in the creator not a single scene to add to all my games with ADV...

  • JapsterJapster Member Posts: 672
    edited May 2018

    @pinkio75 said:
    Hi Alex but about your example we need to join all change scene or AdMob banners etc... to the attribute "privateDataConsentForAds"?

    If i add your scene to my games it working fine? i think that is not enough to limit ADV because the change scenes checked or banners for ADV etc are not "join directly" to this new attribute so i mean i need to "re-edit" all change scenes of my games to working fine??

    Is not more easy to limit this issue with ad new attribute directly from the Creator like "Player1 Keymap" or "purchase Table" i mean You can create a new attribute in the creator not a single scene to add to all my games with ADV...

    @pinkio75 - The way I see it, @adent42 has made changes at an engine level, to make calls to the ad providers based on the value, so I'm assuming ALL that needs doing is setting that value on the back of user input, and that's it... :smile:

    ...having said that, I've just put that (int) value in my test project, forced it to a 1, submitted a test build of my CC app, and now I get nothing.... no ads, etc... (whereas the one I just submitted prior to these latest GS changes works fine for Chartboost, Revmob... ...could be me though! (late night code changes etc), so will build and upload the previous version (that worked beautifully) again and submit it when I get home...

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034

    @freneticz - yes, but only for Admob for now. The other networks will probably follow suite eventually, but right now nothing will get serviced for any of the other networks.

    @pinkio75 - @Japster is correct, that's how it should work.

    @Japster, iOS or Android? Android isn't ready yet and I suspect there will be far fewer ads for apps with older SDKs.

    Also, there's a slight bug where the engine will need to try a few times to get an ad. Basically, the first ad request happens before the engine starts, so the value is defaulting to -1. So for the first ad request, it's set to no privacy. Once the second ad request happens, after the engine is loaded, the correct value is used. For video ads, that only allows the caching of ads for the NEXT request.

    So in most cases, nothing happens until the 3rd ad request. I didn't think of that case until android, so android will have a fix for this and iOS will have a fix Coming Soon (tm).

  • indra.azizindra.aziz Member, PRO Posts: 100

    @ForumNinja said:
    The day of reckoning is upon us! Here's an update on the current status of everything in regards to GDPR:

    Ah, thank you for the update. Unfortunately I haven't got time to update my apps, but already made them unavailable in EU. Hopefully will do in a couple days.

  • JapsterJapster Member Posts: 672

    @adent42 said:
    @Japster, iOS or Android? Android isn't ready yet and I suspect there will be far fewer ads for apps with older SDKs.

    Also, there's a slight bug where the engine will need to try a few times to get an ad. Basically, the first ad request happens before the engine starts, so the value is defaulting to -1. So for the first ad request, it's set to no privacy. Once the second ad request happens, after the engine is loaded, the correct value is used. For video ads, that only allows the caching of ads for the NEXT request.

    So in most cases, nothing happens until the 3rd ad request. I didn't think of that case until android, so android will have a fix for this and iOS will have a fix Coming Soon (tm).

    @adent42 - useful to know, cheers... Unfortunately, it's actually iOS I'm trying...

    Had a busy couple of days, so just about to publish my older, working version again, and see if all's well still with that one. If so, I'm guessing I've introduced a bug, but if not... well, let's see...

    Cheers!

  • NKBDLNKBDL Member, PRO Posts: 100

    @adent42 said:
    FYI, the Android build is starting to look good.

    The delay was due to issues with android library incompatibilities we needed to resolve that only popped up in late testing.

    The new build will target API Level 26 while allowing for a minimal API level of 16 (drive by Chartboost). According to Google, this will only exclude 0.7% of devices (Devices before Jellybean).

    Ad Libraries are as follows:
    Chartboost - 7.2.0
    Revmob - 10.0.0
    Tapdaq - 6.2.2

    Because we didn't get a lot of time to test, we'll be putting out this release tomorrow as an Release Candidate (RC) build. You'll be presented with two Generate buttons on your project. If you click the "Generate RC", it will use this new build. If you just hit "Generate", it will use the existing build.

    Cool Thanks @adent42 will feedback after build

  • JapsterJapster Member Posts: 672
    edited May 2018

    @adent42 - Okay, I've uploaded my earlier working build, with the only difference being that I've added the "privateDataConsentForAds" attribute and set it to 1 as a test, and all I get back now is my zero-state failed message... :frowning:

    I'll try some more testing, but a little concerned that the new engine logic might possibly not be picking up the new variable correctly? - I've definitely set it to 1, to test... is it possible you guys actually meant "PrivateDataConsentForAds"? Upper start?

    EDIT - and forgot to mention, DEFINITELY signed it with .92 too... :frowning:

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034

    Found a bug while testing android that could also occasionally hit the iOS build as well.

    After getting it consistently in Android, if figured out that it showed more often if you didn't have the 'privateDataConsentForAds' attribute in your project. Basically once the engine found the 'privateDataConsentForAds' attribute, it wouldn't continue on to the bug code... unless the attributes it was examining were in a slightly different order.

    The bug could potentially cause a crash in the engine depending on the timing of an ad display and the consent lookup in the engine.

    iOS seemed more-or-less fine (I occasionally saw a crash, but couldn't reliably reproduce it, so I just let it go and you have that build in your hands now), but it's possible there too.

    I'm gonna push the android update after it finishes building (which takes FOREVER). After that, I'll work on the iOS update to fix this new bug as well as the behavior @Japster is seeing and hopefully have something for you all later tomorrow.

    I've been banging on this bug for a while (was up til 5am last night), now that I've finally got it fixed I might take a break tonight and go see Deadpool or something while everything builds.

    Also, chickens are assholes. Stay up til 5am and they STILL squawk for food early in the morning. No consideration.

    I know I keep saying this, but I hope to have these problems wrapped up tomorrow (because I'd really like to at least enjoy a little of my 3-day weekend).

    Cheers!

  • JapsterJapster Member Posts: 672
    edited May 2018

    @adent42 said:
    Found a bug while testing android that could also occasionally hit the iOS build as well.

    After getting it consistently in Android, if figured out that it showed more often if you didn't have the 'privateDataConsentForAds' attribute in your project. Basically once the engine found the 'privateDataConsentForAds' attribute, it wouldn't continue on to the bug code... unless the attributes it was examining were in a slightly different order.

    The bug could potentially cause a crash in the engine depending on the timing of an ad display and the consent lookup in the engine.

    iOS seemed more-or-less fine (I occasionally saw a crash, but couldn't reliably reproduce it, so I just let it go and you have that build in your hands now), but it's possible there too.

    I'm gonna push the android update after it finishes building (which takes FOREVER). After that, I'll work on the iOS update to fix this new bug as well as the behavior @Japster is seeing and hopefully have something for you all later tomorrow.

    I've been banging on this bug for a while (was up til 5am last night), now that I've finally got it fixed I might take a break tonight and go see Deadpool or something while everything builds.

    Also, chickens are assholes. Stay up til 5am and they STILL squawk for food early in the morning. No consideration.

    I know I keep saying this, but I hope to have these problems wrapped up tomorrow (because I'd really like to at least enjoy a little of my 3-day weekend).

    Cheers!

    Ouch, up until 5am? - really appreciate the response given that, yep, it's the weekend - so thanks @adent42 , at least it sounds like you have a handle on it - sounds about right, given the behaviour I'm experiencing...

    As you can probably imagine, talking of attribute order, it's the last in the list, as I've not sorted them using DBA's tool etc...

    Thanks again @adent42 - you're renewing my confidence in GS somewhat, I hope they appreciate you... :wink:

  • JapsterJapster Member Posts: 672
    edited May 2018

    @adent42 - Well, fired up a fresh test - with debug code. I get '0' returned from firing off a request for a reward ad for the first time, then every single time after that I get '-1'.

    In 10-12 sessions, unloading the app fully each time, I get the same results, other than ONE session where I actually got Chartboost ads fine, for the entire session - 5 or 6 ads, each time I asked.

    I'm guessing Revmob is not working at all (I have both Chartboost and RevMob selected in publishing, but the odds of it firing up JUST RevMob those other 11 times are pretty slim I guess...) ...So I'd say that yes, that bug might well be there in iOS too... (although my app isn't crashing, just failing to get anything back from a 'show rewarded ad' request via a pause behaviour)...

    Gonna call it a night, and maybe test using just Chartboost ticked, tomorrow...

    Cheers...

  • JapsterJapster Member Posts: 672

    @adent42 - Okay, I've had a bit of sleep, and carried on testing this morning with a Chartboost-only build (as in all of my testing yesterday, not one RevMob ad appeared (although they still appear fine on a device with an older build of Courier Chaos on), so I think I can safely conclude that service's logic might to be screwed atm)...

    In 20 or so tests, across multiple sessions, I load up my app, and with a few seconds in between failed attempts, it's definitely more hit and miss than it was? - I got 2 ads in those 10 attempts. I was getting one almost every time before? (if it wasn't for the '-1' being returned, I'd have suspected Chartboost at fault.. :wink: )

    I can confirm however, that my initial suspicion that I'd never get ANY on first load, without playing a game first, is incorrect, as I could eventually, sometimes, get an ad after a few attempts on first load, without starting a game first, and returning to the menu. (Although oddly, my first action in my game is to attempt to log into GC, and I can NEVER get it to log in without playing a game first! - Am I right in assuming that perhaps a second GC login attempt may (by design, or bug) cause a log OUT?) - Going to check out my logic for that, but if anyone has anything to confirm it's not a bug in this release that I need to workaround (or is!) I'd appreciate it?

    Cheers all, hope that testing helps Adent....

  • CasualEvolutionCasualEvolution Member, PRO Posts: 521

    So for the first ad request, it's set to no privacy. Once the second ad request happens, after the engine is loaded, the correct value is used. For video ads, that only allows the caching of ads for the NEXT request.

    So in most cases, nothing happens until the 3rd ad request.

    Hi @adent42 instead of starting with -1, you can not start with 1, BUT do not show the ADs until the engine loads and get the correct value? That is, allow the buffer of ads and only avoid showing in start, that to be able to have ADs at the first when they are called.

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034
    edited May 2018

    @CasualEvolution can't do that, that would violate privacy. (Buffering means you make a request to a server and telling it that the system is allowed to store PII as part of that request).

    What the next build will do is use the last known good value. Basically there's an in engine -2 state. If we see that, we try to load the last known good value from local storage and use that value until the engine is up and running.

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034
    edited May 2018

    Okay... we've done some minimal testing and an RC is ready.

    In publishing you'll see a Build RC button. (The button behavior hasn't completely been fixed so you'll see some of the same behavior as when you ran "Build Experimental" from an earlier build. Just refresh the page and buttons will reset to their correct states.)

    This will let you build with Android Release Candidates meant to address GDPR issues as well as an updated iOS build that fixes some bugs with the current build.

    For iOS, we fixed a potential bug with how we get the privacy consent flag as well as provided better default behavior for when the engine hasn't finished loading the game yet.

    For Android we:

    • Updated target SDK to 26
    • Updated Android Support and Google Play Services libraries to match SDK26 and used the new modular library structure, which means the package is now 21MB smaller.
    • Updated ad libraries to:
      -- Chartboost - 7.2.0
      -- Revmob - 10.0.0
      -- Tapdaq - 6.2.2
      -- Admob - Updated Google Play Services Ads Library to 11.4.0
    • Remove analytics reporting.

    Note that Google Play Services updates does not mean we support Google Play Game Services yet. It's just how they name any library that helps with app being in the google store, including ads.

    We've done some "hey it runs! with admob ads!" testing on this build, but we haven't done any deep testing. Given the time sensitive nature of GDPR, we decided to release this early as a RC so you can start testing and updating now.

    If you run into any problems, please post here. I'm gonna take a break for the rest of the day, but I'll be keeping an eye on this thread so the team can hit the ground running with any necessary bug fixes tomorrow.

  • freneticzfreneticz SwedenMember, PRO Posts: 774
  • NKBDLNKBDL Member, PRO Posts: 100

    @adent42 Tested the new build button ok. No more API level issue. Thanks & cheers.

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034

    @freneticz For iOS yes. For android, it shouldn't matter. .92 added some code that signs embedded frameworks that were introduced with the new ad networks.

  • vafurlogivafurlogi Member, PRO Posts: 203

    @adent42 said:
    @freneticz For iOS yes. For android, it shouldn't matter. .92 added some code that signs embedded frameworks that were introduced with the new ad networks.

    Do we need to use .92 if we are not using ads in IOS?

  • freneticzfreneticz SwedenMember, PRO Posts: 774

    I sign with .80 used RC build to generate but when i try it on my Android phone it just crash (tried to upload & generate 2 times with same problem)

  • JapsterJapster Member Posts: 672
    edited May 2018

    @adent42 said:
    @freneticz For iOS yes. For android, it shouldn't matter. .92 added some code that signs embedded frameworks that were introduced with the new ad networks.

    Well, @adent42 - built using the RC button, and whatever you've done, it seems to have sorted out the Gamecenter issues I was having too! - logs in, STAYS logged in.... superb... :smiley: (EDIT: - it stays in, but the Platform Connected flag doesn't seem to return the actual state - it shows as disconnected / false when reading the attribute, but I can happily view scores etc using the overlay... weird) - Will ensure it's actually still submitting them okay...)

    That and although I'm still not getting as many ads, and also still getting -1's a lot, at least I'm getting more than I was with the last build...

    Any more debugging once you've had a break would be most appreciated Adent42!

    I'm feeling that I'm finally close to releasing this bloody game, cheers! :wink:

    EDIT: ...and I've just finally got a RevMob ad fine too... :smiley:

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034

    @freneticz can you PM me your phone details (Android version, etc)

  • JapsterJapster Member Posts: 672
    edited May 2018

    PS - @adent42 - I might have been a tad premature regarding GC too... I can access it at any time, but I'm wondering if Apple just cache the last known Leaderboard query results, and whether I can get any kind of confirmation from the GS engine that players' latest scores have been posted?

    Looked to be online (even got the "Welcome" message on my title screen, but all day, I've not been able to submit scores (looked like it worked, but not shown)... got home, still no scores from earlier, BUT, on wireless in the cavern now, and submitted one, took a while for the leaderboard screen to update, but then instantly showed that score as 1st place - I think I need to find a better way of confirming/ensuring that they're submitted okay, or I'm going to have a LOT of unhappy, uninstalling users... :frowning:

    Are there any guidelines to delaying submitting/posting each score? - my game has four scores to submit - Score, Distance, Time, and Targets Percentage - I currently wait 1/4 second between each - do I need longer? - is it rejecting them as they're too close together? - Can't find anything on the 'net about it.... :frowning:

    Cheers....

  • Triangularity GamesTriangularity Games Founder/Owner MarylandMember Posts: 140

    Forgive me, but I'm not understanding this...So we don't need a rule every time we have an ad behavior? Just what's in the demo? And the engine takes care of the rest? Thanks in advance for any info/help!

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034

    @Triangularity Games

    Yup. All you need to do is set the value of "privateDataConsentForAds" and ads will pass the correct information to your ad network so that it can server ads appropriately (except for Revmob, because revmob didn't issue an update, we're just turning it off and on ourselves).

  • ArmellineArmelline Member, PRO Posts: 5,327

    @adent42 Updated three apps with the RC build. All use RevMob for reward ads. Two are on the app store already and had no trouble showing ads. None are showing ads. All are setting privateDataConsentForAds to 1 before trying to show an ad.

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034

    It might be a combination of fill rate and timing. Because Revmob did not do anything for GDPR, we have it completely turned off until we see a 1.
    Call 1 - Set to -1 - First request. Revmob off. No ad.
    Call 2 - Set to 1 - Revmob turns on, starts caching ad. No ad displayed.
    Call 3 - Still at 1 - Revmob ad is cached, display ad.

    If the ad hasn't finished caching before Call 3, then no ad is shown. Give it a few more tries. If you still have problems, PM me a link to the APK (and I'll see if the debug logs tell me anything).

  • adent42adent42 Key Master, Head Chef, Executive Chef, Member, PRO Posts: 3,034

    FYI Android RC build has an issue with loading images, we're looking into it.

Sign In or Register to comment.