Does this app use the Advertising Identifier (IDFA)? - AdMob 6.8.0 - ios

I'm currently uploading my App to the App Store and Apple is asking me if this app users IDFA. I'm using the latest Admob SDK or 6.8.0 and I don't know if it uses IDFA or not, and if it does which check boxes should I hit X.X
Image http://i.gyazo.com/a7d36f95ac0cc066e5654517d4ec2f3f.png

I'm having the same issue here and I was a bit afraid of checking the last box, since I have no idea what the 3rd party SDK will do with the data collected and if they will respect the Limit Ad Settings.
But I found a post by a Google Admob programmer, Eric Leichtenschlag, on their forums:
The Google Mobile Ads SDK and the Google Conversion Tracking SDK utilize Apple's advertising identifier introduced in iOS 6 (IDFA). While each developer is responsible for how they access device data, the SDKs use IDFA under the guidelines laid out in the iOS developer program license agreement, including Limit Ad Tracking.
Including Limit Ad Tracking. This is what the last box is all about. So you must check the that box if you use AdMob. If you use other SDK I strongly recommend checking if they respect the guidelines as well.
Since I run only ads (Google AdMob), I checked the first (Serve ads...) and last box (I, ___, confirm...). App was approved and released, no issues.
Source: https://groups.google.com/forum/#!topic/google-admob-ads-sdk/BsGRSZ-gLmk

If you are lazy to check on each third party SDK if they use or not the IDFA you can use this command:
fgrep -R advertisingIdentifier . (don't forget the dot at the end of the command)
Go to your project/workspace folder and run the command to find which files are using the advertising identifier.
Then you just have to look in the guidelines of those SDKs to see what you need to do about the IDFA.

I recently submitted an app to Apple's App Store. My app was built using iOS 12, Xcode 10, and Swift 4.2. My app uses Google AdMob for the sole purpose of showing Interstitial Ads. When prompted these question, this is what I did:
1) Does this app use the Advertising Identifier (IDFA)? ANSWER: YES
a) Serve advertisements within the app - CHECKED
b) Attribute this app ... - NOT CHECKED
c) Attribute an action ... - NOT CHECKED
I, (my name), confirm that this app ... - CHECKED
My app was accepted and "Ready for Sale" in less than 24 hrs.

You can track all calls to [ASIdentifierManager advertisingIdentifier] with symbolic breakpoint in Xcode:

Yes, it does. From the AdMob page:
The Mobile Ads SDK for iOS utilizes Apple's advertising identifier (IDFA). The SDK uses IDFA under the guidelines laid out in the iOS developer program license agreement. You must ensure you are in compliance with the iOS developer program license agreement policies governing the use of this identifier.

If you have Google analytics or Facebook api in you app, you need to check all of them to make sure it works!
Edit: This is an old answer - see comments or other answers for an exact answer.

In app store connect now if we are using ads in our app then we will answer as yes to Does this app use the Advertising Identifier (IDFA)?
further 3 questions will be asked as
if your using just admob then check the first one and leave other two unchecked. Other two options (2nd , 3rd ) will be checked if your using app flyer to show ads.
all options are explained with detail here

BTW, Yandex Metrica also uses IDFA.
./Pods/YandexMobileMetrica/libYandexMobileMetrica.a
They say on their GitHub page that
"Starting from version 1.6.0 Yandex AppMetrica became also a tracking instrument and uses Apple idfa to attribute installs. Because of that during submitting your application to the AppStore you will be prompted with three checkboxes to state your intentions for idfa usage. As Yandex AppMetrica uses idfa for attributing app installations you need to select Attribute this app installation to a previously served advertisement."
So, I will try to select this checkbox and send my app without actually no any ads in it.

It seems many indie developers like me are desperately looking for an answer to these questions for years. Strangely, even after 5 years this question was asked, it seems the answer to this question is still not clear.
As far as I can see, there is not any official statement in Google AdMob documentation or website about how a developer can safely answer these questions. It seems developers are left on their own in the mystery about answering some legally binding questions about the SDK.
In their support forums they can advice questioners to reach out to Apple Support:
Hi there,
I believe it would be best for you to reach out to Apple Support for
your concern as it tackles with Apple Submission Guidelines rather
than our SDK.
Regards, Joshua Lagonera Mobile Ads SDK Team
Or they can say that it is out of their scope of support:
Hello Robert,
On this forum, we deal with Mobile Ads SDK related technical concerns
only. We would not be able to address you question as this is out of
scope for our team.
Regards, Deepika Uragayala Mobile Ads SDK Team
The only answer I could find from a "Google person" is about the 4th question. It is not in the AdMob forum but in the "Tag Manager" forum but still related. It is like so:
Hi Jorn,
Apple asks you about your use of IDFA when submitting your application
(https://developer.apple.com/Library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/SubmittingTheApp.html).
For an app that doesn't display advertising, but includes the
AdSupport framework for conversion attribution, you would select the
appropriate checkbox(es). In respect to the Limit Ad Tracking
stipulation, all of GTM's tags that utilize IDFA respect the limit ad
tracking stipulations of the SDK.
Thanks,
Eric Burley Google Tag Manager.
Here is an Internet Archive link in case they remove this page.
Lastly, let me mention about AdMob's only statement I've seen about this issue (here is the Internet Archive link):
The Mobile Ads SDK for iOS utilizes Apple's advertising identifier
(IDFA). The SDK uses IDFA under the guidelines laid out in the iOS
developer program license agreement. You must ensure you are in
compliance with the iOS developer program license agreement policies
governing the use of this identifier.
In conclusion, it seems most developers using AdMob simply checks 1st and 4th checkmarks and submit their apps without being completely sure about what Google exactly does in its SDK and without any official information about it. I wish good luck to us all.

Related

Does this app use the Advertising Identifier (IDFA)? when using Firebase

When i am about to review my iOS app I get this question asked. And the simple answer is "NO".
I have searched these forums but only found what i think is people using enhanced analytics framework as adSupport and such.
I use both Crashlytics and Analytics framework from Firebase. And in there i know there is code for using IDFA. Though from my understanding it is only ever used if i also use the AdSupport.framework. And i do not use it or ads in any other way.
I do use push notifications using firebase push api getting pushTokens from phone ids. But i do not think that is anything using IDFA...
What is the correct answer to this question. And if Yes. there are 3 more options. Here is the full message if "YES" is checked
Does this app use the Advertising Identifier (IDFA)?
The Advertising Identifier (IDFA) is a unique ID for each iOS device and is the only way to offer targeted ads. Users can choose to limit ad targeting on their iOS device.
If your app is using the Advertising Identifier, check your code—including any third-party code—before you submit it to make sure that your app uses the Advertising Identifier only for the purposes listed below and respects the Limit Ad Tracking setting. If you include third-party code in your app, you are responsible for the behavior of such code, so be sure to check with your third-party provider to confirm compliance with the usage limitations of the Advertising Identifier and the Limit Ad Tracking setting.
This app uses the Advertising Identifier to (select all that apply):
Serve advertisements within the app
Attribute this app installation to a previously served advertisement
Attribute an action taken within this app to a previously served
advertisement
Ensure that you select the correct answer for Advertising Identifier (IDFA) usage. If your app does contain the IDFA and you select No, the binary will be permanently rejected and you will have to submit a different binary.
Thanks in adv.
If you don't include the AdSupport.framework in your project you don't need to worry about IDFA. The FirebaseAnalytics SDK willuse the advertisingIdentifier if the AdSupport.framework is linked into your app.
You can simply select No.
or
You can select Yes and
Serve advertisements within the app - NO
Attribute this app installation to a previously served advertisement - NO
Attribute an action taken within this app to a previously served advertisement - YES.

iOS App Rejection due to private API call viewControllerForView:, Facebook API

My app was rejected because
The use of non-public APIs is not permitted on the App Store because
it can lead to a poor user experience should these APIs change.
in the method
viewControllerForView:
I asked where I used viewControllerForView: and they responded
“viewControllerForView:” was found in the methods:
-[FBSDKLikeButton _handleTap:] and -[FBSDKLikeButton _like:].
My FBSDKLoginKit, FBSDKCoreKit and FBSDKCoreKit pods are all at 4.15.1 (the latest version). How should I go about fixing this?
You don´t need to make any changes in your code, read this post from Facebook developers of how to solve it.
After integrating our SDK into your iOS app, you will need to submit
your app to Apple for review. As part of this review process, you will
be asked if your app uses the Advertising Identifier (IDFA). Please
check "Yes". You will then be asked how your app makes use of it. The
question will take this form: This app uses the Advertising Identifier
to (select all that apply)?
- Serve advertisements within the app
- Attribute this app installation to a previously served advertisement
- Attribute an action taken within this app to a previously served advertisement
If you will be using the Audience Network framework, you must select
the first option. If you are using our core framework to track
install attribution and app events, please select the second and third
options. If you are using both, select all three.
You will also be asked to check a box to confirm that your app honors
a user's Limit Ad Tracking setting in iOS. The Facebook SDK honors the
iOS Limited Ad Tracking Setting. When a person enables Limited Ad
Tracking, Facebook only uses data obtained through the use of the
Advertising Identifier for “Limited Advertising Purposes” as defined
by the iOS Developer Program License Agreement. Please make sure check
this box when prompted.
Marking these questions in this way will help ensure a smooth review
process

iPhone App AppStore submission with SessionM SDK

I have added SessionM SDK with mPoints to my iOS app. When I submitted it to review I checked YES for Advertising Identifier (IDFA) question.
But the App was rejected with reason "We found that your app uses the iOS Advertising Identifier but does not include ad functionality."
I have checked the code with grep -r advertisingIdentifier . and got match in SessionM-SDK/libSessionM.1.14.6.a (SessionM SDK)
And now I have a question - should I select YES for Advertising Identifier (IDFA) question or not?
You does not need to check Yes for Advertising Identifier(IDFA) question.
it is only require when you have functionality in application to show ads via using Google ad, Chart boost library etc.
Finally I got approve for my App.
Correct answer is - you should check YES for Advertising Identifier (IDFA) question, because SessiomM SDK really uses it.
But some Apple's reviewers can't find advertisement even if it on main screen under the nose.
In this case simply provide more info about advertisement, and how user can find it.

Improper IDFA usage, your app is not respecting the Limit ad tracking setting in ios

I have checked the iTC settings
I have uploaded the same app 2 days ago and it works fine but when today I uploaded the same app with a minor bug fix it's now showing this error.
I'm using Admob, Revmob and Applovin. But I know admob is the culprit.
The only solution for me was to trash the Admob-SDK and integrate the Startapp-SDK, It is compliant with the apple's new IDFA policies, you can read their documentation here.
I will let you know if Admob guys fix this issue.
From Applovin Folks
I wanted to update you on an IDFA change Apple made on Saturday. Apple's systems are automatically rejecting apps that are uploaded if the app has SDKs in it that access IDFA and still support pre-iOS 6 (where IDFA wasn't present). Our new SDK 2.3.6 (and in Unity, 3.0.9) will now pass Apple's screen since we have deprecated support for iOS 4 and 5 (only 1.5% of traffic); and note that many popular SDKs in the market act similarly so you may need to work with your other vendors on updating their software for compatibility.
Edit
I uploaded an update today(5th May, 2014) with admob 6.8.0 and it was uploaded sucessfully
It validated for me also. Initially I thought admob was the issue and might have been but after removing TapJoy and all references the app validated.
I had to remove both InMobi and Conversant (aka ValueClick/Greystripe). Then it stopped being an "Invalid Binary" and went into "Waiting for Review". I can confirm that AdColony, Chartboost and TapJoy all definitely pass Apple's check with latest SDKs. InMobi issued an SDK update on 29/4 (v4.3.0) but it does NOT pass this test.
I used Google AdMob and Flurry. With AdSupport framework removed, shows it's AdMob that's the culprit.
I can't find any recently released SDK for AdMob and Flurry, so I just change the status back to ready for binary upload again, select the answer as shown above in the screen dump, and it works for me, some screen dumps on my blog below. Hope this helps. Thanks!
http://new2objectivec.blogspot.com.au/2014/05/app-store-invalid-binary-error-due-to.html
I've submitted an app with AdMob today with the same settings.
It's now in Waiting for Review state.
I've used Xcode Organizer to submit the app. Maybe Apple have re-adjusted the validation.
I uploaded an app with admob sdk 6.8.0 successfully today (after removed mmedia sdk 5.2.0). I think you need to check other ad network sdk.
It appears your issue is actually coming from Applovin, not AdMob. Others seem to have succeeded with AdMob in some way, so it would make sense. These guys have come to the conclusion that it is Applovin -> Source
I've finally got mine to validate! If you remove AdSupport.framework, any culprits causing this failed validation will NOT cause a linker error. So the SDK's that are showing errors are the ones using the framework correctly, remove any others and try again. In my case Millennial was the problem.
I had an app that was at state "waiting for upload" before 12th April. After which the itunes guidelines were updated to contain section of IDFA usage when the app state is "Prepare for upload". So, because of this situation every time I turned in the binary I would get an error of "Improper IDFA usage".
For me the solution was
1.upload a binary without IDFA sdks.
2.make it "developer rejected".
3.Update the settings of IDFA after choosing "ready to upload binary" option from itunes connect.
4.Upload a new binary with IDFA sdks.

My app was rejected. Where can i find the advertisingidentifier or ASidentifiermanager?

To tell you a little about my app, I have a free version and a pro version without ads. The free version was accepted in the App Store, but the pro version was not. In the pro version, I just left out all the Advertising IDs. I am using Revmob, Chartboost and AppLovin. After submitting, I got this message from Apple:
"PLA 3.3.12"
We found your app uses the iOS Advertising Identifier but does not include ad functionality. This does not comply with the terms of the iOS Developer Program License Agreement, as required by the App Store Review Guidelines.
Specifically, section 3.3.12 of the iOS Developer Program License Agreement states:
"You and Your Applications (and any third party with whom you have contracted to serve advertising) may use the Advertising Identifier, and any information obtained through the use of the Advertising Identifier, only for the purpose of serving advertising. If a user resets the Advertising Identifier, then You agree not to combine, correlate, link or otherwise associate, either directly or indirectly, the prior Advertising Identifier and any derived information with the reset Advertising Identifier."
Please check your code - including any third-party libraries - to remove any instances of:
class: ASIdentifierManager
selector: advertisingIdentifier
framework: AdSupport.framework
If you are planning to incorporate ads in a future version, please remove the Advertising Identifier from your app until you have included ad functionality.
To help locate the Advertising Identifier, use the “nm” tool. For information on the “nm” tool, open a terminal window and enter, “man nm.”
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 lists the methods that the library calls, and "otool -ov" will list the Objective-C class structures and their defined methods. These techniques can help you narrow down where the problematic code resides."
I don't really know much about coding. I just know the basics with Xcode. Can anyone help me figure out what to do to find the problem code so I can remove it?
Thank you so much!
Statistics suggest that using in-app purchases to remove advertising has a better conversion rate than having separate free and pro versions. Instead of maintaining two versions of your app and removing chunks from the pro one, why not try this approach?
Remove revmob, Chartboost and AppLovin from your pro version. Unlink AdSupport.framework. Also, if you use Flurry or other analytics sdk, make sure you have the latest version. My app was rejected for the same reason because Flurry Analytics was using advertising identifier under the hood. Few days ago Flurry released an updated version of their sdk to address this issue. That can also happen for other analytics platforms, like google.
Its not always using the AdSupport.framework usage reject the app. I think its the way you are using.
One of my app was using advertising identifier, but for solely different purpose. I was not using any third party ads.
The important thing is that you are avoiding Apple iAds but using third party ads, thats why your app may be rejected.

Resources