Search Unity

Kids' app is rejected by Apple because of Analytics

Discussion in 'Unity Analytics' started by AytoMaximo, Jan 29, 2020.

  1. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    I'm struggling with this case for a month already.

    Guideline 1.3 - Safety - Kids Category


    We noticed that your kids app includes third-party analytics, third-party advertising or collects, transmits, or has the ability to share personal information or device information.

    Specifically, your app includes the following feature(s), contrary to guideline 1.3 of the App Store Review Guidelines:

    Third-party analytics with the ability to collect, transmit or share identifiable information (such as name, address, date of birth, email, location, photos, videos, drawing or the ability to chat), device information, or the IDFA.

    Next Steps

    To resolve this issue, please remove this functionality or revise your app so that no personally identifiable information or device information is sent to third parties.

    I even had a call from Apple and they told me about new kids safety rules that become more strict. That's why they are not OK with the Unity Analytics library which has access to device name information and etc. However I can't remove it, because I need IAP feature.

    Here is my status and what I've already tried to do with all these:
    1. I'm using Unity 2019.2.12f1. Analytics Libarary 3.3.2. Ads package is removed
    2. I've disabled HW statistics in player settings

    4. I've deleted UnityAds folder from XCode project (why it's here, btw?)


    Please, I would be very grateful for any tips how to resolve this issue. It all looks like a huge bug.
     
    Last edited: Feb 2, 2020
  2. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    Here is a screenshot from Charles. I ran my app from TestFlight and make a subscription purchase. I don't see anything about Analytics or I just don't know what I'm looking for.
     

    Attached Files:

  3. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    I'm seeing the following Unity endpoints hit:

    ecommerce.iap.unity3d.com
    perf-events.cloud.unity3d.com
    events.iap.unity3d.com

    It looks like Performance Reporting may still be enabled? Also, IAP looks to be sending events even with Analytics disabled, I'll check with the team here on the status.
     
  4. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    Thank you for the answer!

    I've never used Analytics stuff in my projects, so can you please tell me where I can find this Performance Reporting feature and disable it?
    IAP events are OK, I guess, because user must buy a subscription on the start.

    Also, this Charles log was made with 3.3.5 version of Analytics library, I've decided to check the latest one. You should know that after package update Analytics feature turned off by itself. I don't know if it's just a UI bug or something deeper.
     

    Attached Files:

    Last edited: Jan 29, 2020
  5. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    I will check on the perf reporting, this may help in the meantime https://forum.unity.com/threads/can...ng-on-unity-free-version.514357/#post-3409172 We are looking into the ecommerce request from IAP which is my suspicion. This would take a new IAP version if so
     
    ckyiscky likes this.
  6. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
  7. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    Can you try to submit to Apple again?
     
  8. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    In progress :) Long-time binary processing this time
     
  9. ckyiscky

    ckyiscky

    Joined:
    Aug 15, 2013
    Posts:
    2
    hi @JeffDUnity3D and @AytoMaximo, still rejected and still same problem after disable crashreporting, disable hwstats, set to under 13, any idea?
     
  10. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    Hello! My app is in review now and we will know the result in 2-3 days. The Apple manager told me the technical team (commission) is gathering every time to check my app, that’s why every review takes so long.

    Omg, from my point of view it's better to restrict kids apps ablities with the security features of iOS itself and don't blow developer's mind. Also, I'm appealing for dialogue between Apple and Unity.
     
    Alima-Studios likes this.
  11. Alima-Studios

    Alima-Studios

    Joined:
    Nov 12, 2014
    Posts:
    60

    +1

    as a developer of unity I think we have only to check a checkbox called kidds app for IOS on analythics service
     
    AytoMaximo likes this.
  12. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    We are in discussions, and hoping to get clarity soon.
     
  13. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    I had phone call with Apple few minutes ago. They rejected my app again. They told me that Unity Analytics code must be fully deleted from the app. *sad trombone sound*
     
    ckyiscky and Alima-Studios like this.
  14. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    Got it, thank you for the report. We are continuing to check into it also.
     
    ckyiscky likes this.
  15. karayeva

    karayeva

    Joined:
    Feb 19, 2013
    Posts:
    11
    Hi, I am trying to publish kids app too. I have no ads in my app, had only unity iap. After getting my first rejection, I removed all iap, turned off unity analytics, removed all analytics libraries from plugin folder and sent new build to itunes. Yesterday my app got rejected again. The answer from appstore is :

    We noticed that your kids app includes third-party analytics, third-party advertising or collects, transmits, or has the ability to share personal information or device information.

    Specifically, your app includes the following feature(s), contrary to guideline 1.3 of the App Store Review Guidelines:

    Third-party analytics with the ability to collect, transmit or share identifiable information (such as name, address, date of birth, email, location, photos, videos, drawing or the ability to chat), device information, or the IDFA.

    If you are using third-party libraries, please update to the most recent version of those libraries. If you do not have access to the libraries' source, you may be able to search the compiled binary using the "strings" or "otool" command line tools. The "strings" tool can output a list of the methods that the library calls and "otool -ov" will output the Objective-C class structures and their defined methods. These tools can help you narrow down where the problematic code resides. You could also use the "nm" tool to verify if any third-party libraries are calling these advertising APIs.


    So i opened up terminal typed nm myBinaryName and got lots and lots of text. where i found these lines
    000000010001e24c t _UnityAdvertisingIdentifier
    000000010001e44c t _UnityAdvertisingTrackingEnabled
    0000000100bb9c70 b __ZZ26UnityAdvertisingIdentifierE13_ADIDNSString
    0000000100bb9c68 b __ZZ26UnityAdvertisingIdentifierE5_ADID


    - So i assume this is causing me trouble?

    Out of curiosity i've created new empty project and made a build, checked this new build with nm command and it had these 4 lines too about advertising. Does it mean that even if i submit an empty project as a kids app it will get rejected too????
     
  16. karayeva

    karayeva

    Joined:
    Feb 19, 2013
    Posts:
    11
    000000010001e44c t _UnityAdvertisingTrackingEnabled - I think i need to change this line, how can i DISABLE unity advertising tracking? in services tab ads is turned off, analytics is off, iap is off. What else can i do?
     
  17. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    I'm not the winner here, but you can check my own steps from the first post: have you cleaned the packages? As I remember, Ads is included by default. Disable HW statistics (2 step) or look at the example of DeviceSettings.mm (5 step).
     
  18. karayeva

    karayeva

    Joined:
    Feb 19, 2013
    Posts:
    11
    thanks for your reply. I've missed the step 2 and step 5.
    can you upload the image in step 5 again, it's not showing up.
     
  19. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    Oh, it's really gone... Let me share some code - it's the first part of DeviceSettings.mm file that you need to change.

    Code (csharp):
    1. #include "DisplayManager.h"
    2.  
    3. extern "C" const char*  UnityAdvertisingIdentifier()
    4. {
    5. return NULL;
    6. }
    7. extern "C" int UnityGetLowPowerModeEnabled()
    8. {
    9.      return [[NSProcessInfo processInfo] isLowPowerModeEnabled] ? 1 : 0;
    10. }
    11. extern "C" int UnityGetWantsSoftwareDimming()
    12. {
    13. #if !PLATFORM_TVOS
    14.      UIScreen* mainScreen = [UIScreen mainScreen];
    15.      return mainScreen.wantsSoftwareDimming ? 1 : 0;
    16. #else
    17.      return 0;
    18. #endif
    19. }
    20. extern "C" void UnitySetWantsSoftwareDimming(int enabled)
    21. {
    22. #if !PLATFORM_TVOS
    23.      UIScreen* mainScreen = [UIScreen mainScreen];
    24.      mainScreen.wantsSoftwareDimming = enabled;
    25. #endif
    26. }
    27. extern "C" int UnityAdvertisingTrackingEnabled()
    28. {
    29. return false;
    30. }
    31. extern "C" const char* UnityVendorIdentifier()
    32. {
    33.      static const char*  _VendorID           = NULL;
    34.      if (_VendorID == NULL)
    35.          _VendorID = AllocCString([[UIDevice currentDevice].identifierForVendor UUIDString]);
    36.      return _VendorID;
    37. }

    The original idea from this old post (link)

    Pay attention to UnityAdvertisingIdentifier() method and UnityAdvertisingTrackingEnabled(). All default contents are removed and replaced with hardcoded "return NULL/false"

    UPD: I've re-uploaded the screenshots
     
    Last edited: Feb 2, 2020
    karayeva and Alima-Studios like this.
  20. Alima-Studios

    Alima-Studios

    Joined:
    Nov 12, 2014
    Posts:
    60
    ¿ There is not enough having parental gate before showing an ad ? ¿ do I have to remove unity ads completly ?

    I think is too hard those steps to stop unity sending data , .. please add a check box on services that do all those things for us

    lot of thanks
     
  21. karayeva

    karayeva

    Joined:
    Feb 19, 2013
    Posts:
    11
    Thanks for your answer and screenshots! I've changed the DeviceSettings.mm like in your example, then I opened the terminal and ran nm command and this time got these 2 lines

    000000010001d44c t _UnityAdvertisingIdentifier
    000000010001d454 t _UnityAdvertisingTrackingEnabled

    so other 2 lines have gone.
    Anyway I uploaded new binary to itunes. I hope this time the app gets approved ) fingers crossed.
     
  22. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    From my point of view, these two lines refer to methods names, because we don't delete them, but fix.
     
  23. corn

    corn

    Joined:
    Mar 26, 2014
    Posts:
    12
    Hi, thanks everyone for sharing. Has anyone had any luck with these methods?
     
  24. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    Hi! Unfortunately, not. All these methods doesn't remove Unity Analytics library from your project, however it's the main Apple's requiarement for kids' app. That's why we are all wating for some news from Jeff.
     
  25. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    It appears that games released in the Apple Kids category cannot contain ANY Analytics, IAP or Advertising code. And modifying DeviceSettings.mm as described here is also necessary, we are working to release a fix that will include the necessary updates to this file.
     
    corn likes this.
  26. Alima-Studios

    Alima-Studios

    Joined:
    Nov 12, 2014
    Posts:
    60
    So, does it means that any free to play games released in the Apple Kids category can't be monetized in any way?
     
  27. Jakob

    Jakob

    Joined:
    Sep 29, 2011
    Posts:
    34
    @JeffDUnity3D The analytics part i can understand but you are also saying that no IAP? That seems strange? That mean that we cant have a kids app that is free to download and for example earn money from having subscription enabled content...
     
  28. Alima-Studios

    Alima-Studios

    Joined:
    Nov 12, 2014
    Posts:
    60
    on IAP...

    Im not sure of this because they ask us to add parental gate
     
  29. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    You can certainly try to submit. But IAP requires Analytics in the binary, and it appears that Apple is examining the binary.
     
  30. karayeva

    karayeva

    Joined:
    Feb 19, 2013
    Posts:
    11
    Yes!!!
    My app got approved today!!! YAY!
    I removed IAP and made it paid app. I will leave it as paid app for now, and will search other ways to add iap, maybe using Prime31 iap will help
     
    corn likes this.
  31. Jakob

    Jakob

    Joined:
    Sep 29, 2011
    Posts:
    34
    @JeffDUnity3D I understand that the problem is because unity analytics is connected with iap. But as I said that mean that we will have to remove IAP totally and sell the app as a onetime app. That is not a good solution because the app is designed as a subscription app. This is very frustrating because one would assume that the crossplatform IAP would work but because of it being so tied into analytics it does not. And now we have to find another solution... The app has been done since november... So any suggestions on how we would proceed and what we should use instead of Unitys own IAP?
     
    AytoMaximo likes this.
  32. corn

    corn

    Joined:
    Mar 26, 2014
    Posts:
    12
    Great news! However you said you submitted your app for review on 4/2... so it took more than a week for Apple to accept your build?
     
  33. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    Apple has changed their policy recently. Apparently for Kids games, you cannot have Analytics, IAP or Advertising.
     
  34. karayeva

    karayeva

    Joined:
    Feb 19, 2013
    Posts:
    11
    Yes I submitted it on February 4, after couple or more days the app got rejected for a different reason (the design in one of the scenes was not good, so i had to change that scene). Then i submitted it again on feb17, and got approved in 2 days!
     
  35. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
    Apple is OK with IAP, they are not OK with Analytics. Why don’t you just turn Analytics service off? I don’t believe that IAP really needs this. There are some other IAP libraries, for example Prime31’s one. Does it need a Analytics service too?

    It seems to me that it’s not fair to say that Apple is against IAP just because it is contrary to your interests.
     
    corn likes this.
  36. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    Point taken, but currently IAP is associated with Analytics during install. We have a longer term plan to decouple the two. Some users have attempted to disable Analytics at runtime, but still being rejected.
     
  37. Jakob

    Jakob

    Joined:
    Sep 29, 2011
    Posts:
    34
    We are now going ahead with using Prime31 plugins. I also checked with them if they track anything in their plugins and got this answer.

    "We absolutely do not have any tracking whatsoever in any of our plugins. They are all totally clean. "

    So until Unity can decouple the tracking i will use this. Will let you guys know if we get through the review process after we uploaded the app.
     
  38. McPeppergames

    McPeppergames

    Joined:
    Feb 15, 2019
    Posts:
    5
    What does this mean for all the actual KIDS apps in the store which are using IAPs? They can not update their games then.
     
  39. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    It's not our interests per se, it's an Apple recent policy. We are working to decouple Analytics and IAP, but unfortunately we don't have an immediate solution. Apparently even if you turn off Analytics, Apple may be inspecting the binary and finding possible offending code if you have IAP installed. They don't seem to be rejecting based on actual data being sent over the wire. But we can't speak for Apple, you are certainly welcome to try to publish with IAP enabled. We do know for sure that they are being rejected based on contents in DeviceSettings.mm which has been discussed.
     
  40. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    Have you been rejected based on including Unity IAP? Do you have the message that you received from Apple?
     
  41. McPeppergames

    McPeppergames

    Joined:
    Feb 15, 2019
    Posts:
    5
    Not me. But I have heard about the issue and worries and was thinking about creating free kids apps with IAPs with Unity soon, so this is a huge problem and making this decision difficult.
     
  42. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    Totally understood! We are looking into this at high priority. I will continue to keep this thread updated.
     
  43. AcidArrow

    AcidArrow

    Joined:
    May 20, 2010
    Posts:
    6,445
    Eh, I mean, why was it coupled with analytics in the first place?
     
  44. McPeppergames

    McPeppergames

    Joined:
    Feb 15, 2019
    Posts:
    5
    I guess Unity somehow has to check how much a developer makes with a game, so they can see if he is using the correct Unity package.
     
  45. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
    Actually no, it's so YOU can track your IAP revenue in your Analytics Dashboard, similar how you can track your Advertising revenue.
     
  46. McPeppergames

    McPeppergames

    Joined:
    Feb 15, 2019
    Posts:
    5
    It was just a guess :) ... thank you for the clarification!
     
  47. Jakob

    Jakob

    Joined:
    Sep 29, 2011
    Posts:
    34
    @JeffDUnity3D Is there anyway to use the local validation of receipts without having to activate iap in services ? I had to remove the iap and analytics because of the app being rejected. But now I am using prime31 storekit plugin but they do not have a local validation of the receipts. So I would want to use the Unity.purchasing.security.
     
  48. JeffDUnity3D

    JeffDUnity3D

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    6,844
  49. Talgame

    Talgame

    Joined:
    Oct 19, 2015
    Posts:
    5
    Has anyone tried integrating Firebase or Facebook Analytics? Are those also forbidden?
     
  50. AytoMaximo

    AytoMaximo

    Joined:
    Aug 26, 2015
    Posts:
    34
unityunity