App Tracking Transparency implementation for a iOS app based on a WebView - ios

I did many researches on the web but I did not find a clear answer to doubts.
I need to publish an update for my iOS app.
Now it is mandatory that app implements App Tracking Transparency if the App privacy section states that the application is collecting data information.
My app consists in a WebView showing some pages of a web site.
All tracking about user information (technical cookie, third party, etc..) happens inside the web view. However in App Privacy section I set that the app is collecting user information because of the cookies present on the web sites (Facebook Pixel, Google Ads, Analytics, etc..).
Now my questions are:
Should I change the App Privacy information telling that app is not collecting information?
I implemented the App Tracking Transparency framework. What should I do if the user refuses the tracking? Is it a transparent thing as the third party cookies will not be able to track users through the IDFA? Or should I interact in some way with the website to tell it that user did not allow tracking?

You have declare it. https://developer.apple.com/app-store/app-privacy-details/#additional-guidance
Your app has web views.
Data collected via web traffic must be declared, unless you are enabling the user to navigate the open web.
By showing those WebViews your app IS collecting data (esp. if these are your "own" websites and not the "open web").
And it also reads like you can't display the website if the user did not comply to it or have another popup on the website itself.
Collection of the data occurs only in infrequent cases that are not part of your app’s primary functionality, and which are optional for the user.
And, if I'm reading correctly, your app is just a wrapper around those websites.

Related

IOS: App rejected because of App Tracking Transparency on WebView

I'm working on an app made in React Native with Expo.
It uses a web view to show the site in the app.
Everything worked well, but when I submitted my app to the App Store, it got rejected.
The mail said:
We noticed you collect data to track after the user selects "Ask App
Not to Track" on the App Tracking Transparency permission request.
Specifically, we noticed your app accesses web content you own and
collects cookies for tracking after the user asked you not to track
them.
After that, using the expo tracking transparency library, I added a permission request to track data.
If the user doesn't accept it, I disable third party cookies on the web view.
After submitting again to the App Store, I got the exact same message.
I don't know what to do, because I can't control the site, and I'm limited to the React Native web view props
Maybe, I could enable incognito mode if the user doesn't want the app to track, but I'm not sure if this will be accepted too.
i had the same issue i solved it like this:
change the privacy of the app on apple store, go to app privacy and in data types section click edit and select Identifiers (Device ID) and set this one as used for tracking purposes. and make sure that this is the only one selected as used for tracking.
also make sure that the permission is showing on real device (so test it first on TestFlight).
another thing is you need to tell them where you show this permission send them video to tell them where you show the permission.

iOS app rejected from apple app store because UIWebview

Got App rejection reason from Apple:
Upon further review, we noticed that your app only includes links, images, or content aggregated from the Internet with limited or no native iOS functionality. We understand that this content may be curated from the web specifically for your users, but since it does not sufficiently differ from a mobile web browsing experience, it is not appropriate for the App Store.
Basically, we are using UIWebview and safari as well. for show content, we are using UIWebview. and on click of a banner, we are opening a link in safari. I have already give explanation like
We have one admin panel from where we are adding this detail. But based on our requirement we need to redirect a user to specific link or show content. and for make things easy we have used HTML content. But we have used web view in detail page only. Rest of the screen have Native iOS functionality.
So basically we are not fetching website data. we are showing our own backend panel detail in the application.
But still, they rejected the app.
I'm in the same predicament with my app (it grabs content from my company's website like pictures and text and displays it in a native way). To be clear, I'm not using any webviews to display the content except for the Videos tab (see below).
I wanted to share what I've done so far to make it more "native", so you won't waste your time. My application is tabbed, by the way (Research, Blog Posts, Events, Videos, Bookmarks).
Added offline reading capabilities with Bookmarks to read blog posts and research summaries
Added SpeechSynthesizer so reports could be read to the user
Added push notifications for when new content was released
Removed UIWebViews and replaced with Safari Services (I am using WKWebView to embed videos into UITableView though)
Unfortunately, none of that has worked.

What does Unrestricted Web Access mean in iTunes Connect

When you are submitting your app to Apple app store, there is a section named "Rating" where you should rate your content based on the chart and identify how frequently the content appears.
There is one option called "Unrestricted web access" which there are no further details available about this on the Internet nor iTunes Connect Developer Guide. All you can find everywhere is:
Select Yes if your app allows users to navigate and view web pages, such as with an embedded browser.
What does this mean? Does this mean your app can open links in embedded or Safari browser? Or does this mean your app features a browser where users can enter URLs and navigate through the web unrestricted? Because saying yes to this question will make your app 17+!
If this means opening links from your app (Safari or embedded), how come other apps that have embedded browser capability have 4+ rating (like Twitter and Facebook)? As it can be seen in screenshots, there is no way to select this one and not be rated 17+
Update: My app was approved with embedded WebView (TOWebViewController) with the answer "No" (4+). As the answer mentions, any way you let users navigate through the internet such as dynamic address bar that means it should be "Yes" (17+) because it is not possible to do Parental Control on your WebView.
Update 2: Since the release of iOS 9, Apple has introduced SFSafariViewController which is a way of opening any URLs on the internet. This feature also has an address bar but read-only. So users can't surf the Web without parental control. It also inherits content blocking from Safari (ads, explicit content, etc.). I am highly positive by using SFSafariViewController in iOS 9 or above you still can choose 4+ as the device with parental control can't open any URLs anyway. (Let me know if I am wrong)
Update 3: Twitter now is 17+ based on the followings:
You must be at least 17 years old to download this application.
Infrequent/Mild Profanity or Crude Humor
Frequent/Intense Mature/Suggestive Themes
Infrequent/Mild Sexual Content and Nudity
Update 4: It is possible to use Twitter content inside your app without inheriting its rating (17+). My app is displaying Tweets, but since the users are verified and trusted public figures I could go down to 12+:
Infrequent/Mild Sexual Content and Nudity
Infrequent/Mild Profanity or Crude Humour
Infrequent/Mild Mature/Suggestive Themes
It means that a user of the app can access any URL. The issue is parental controls. If the parent has restricted web access an app that allows unlimited access, that is access to any site the user chooses then the parental controls are subverted.
Once Apple provided parental controls that caused a ripple effect on the capabilities of apps and also required Apple to review all apps for parental control violations. It also means that alternate app stores could not be allowed, they could contain apps that did not properly honor parental controls. Hence:"The Walled Garden."
I think if you use default WebView control it is ok and you don't need to set Unrestricted web access to YES. My app has defaut WebView control with dynamic address bar and if i turn ON restrictions (limited websites access) embedded default WebView control does not display restricted content. It behaves the same as Safari app. So i would say you only need to set this to YES if your app has third party WebView control which can not be controlled by Apple.
TO CORRECT MY OWN ANSWER: sorry, but not true. If your app uses any kind of WebView (default or third party) with option to access any website you have to set Unrestricted Web Access to Yes otherwise your app will be Metadata Rejected. It just happend with my apps!
If you provide an internal web browser or UIWebView which allows to the user access to any URL you have to select YES or your app will be Metadata Rejected.
My app just got rejected because it has a link to the corresponding article on wikipedia. My guess is that because wikipedia allows you to search for other articles on wikipedia then it is considered "Unrestricted Web Access" and resulting 17+ app rating.
Kind of extreme in my opinion.
Hope, You have got your answer.
Let me ADD some more specific question, I think it will help.
QUESTIONS :
Does a link that opens in an external browser (like iOS Safari) constitute "Unrestricted Web Access?"
Does an embedded browser in an app without a URL bar constitute "Unrestricted Web Access?"
ANSWER :
If your app uses the embedded browser (which does not display a URL bar) and the link does not reference objectionable content, then you should not need to label it "Unrestricted Web Access."
If your app calls up an external web browser (like iOS Safari) and the link does not reference objectionable content, then you should not need to label it "Unrestricted Web Access."
Apple has not specifically addressed these questions and leaves it to the review process to determine whether the rating is correct. Through my own investigation, I have observed the above.
I use the Ionic/Cordova In-App browser plugin and no issues here with that. i.e. user cannot change the URL of it. So the answer here is NO
https://ionicframework.com/docs/native/in-app-browser

Can I find out the location of an app's icon on the home screen?

Is is possible to dynamically figure out the position of an app's icon on the home screen of an iphone/ipad?
Sorry I don't have enough credit to comment yet so I'm posting here.
To my knowledge no you cannot natively or easily do this. I know of no open source or other libraries. The reason being that your app exists in its own world, it is not in touch per say with the rest of the device. It can get permissions to read and write data but it doesn't know of itself.
Does that make sense?
When you open a website it cannot know which tab it is in the browser. Instead it knows how it was accessed and what device (physically) is using it. It knows the user-agent, the time, the browser, etc because that is information sent to it in the request. In turn the phone on launch gives data to the app in how to handle it but not for example how many other apps are running, or where it is on the screen. It's not normally considered relevant to run time. In addition it's a security feature in preventing an app from deleting or altering other apps, as well as itself. If you have an iPhone you will notice that SIRI cannot turn off google maps navigation or any other non-apple specific app. Only apps natively comparable and private party ones (ex apples) are accessible because Apple did that intentionally. They all know of their own existence and each others. However non-native in the sense of apps that do not come preinstalled and manufactured by the company creating the device are less trustworthy, in addition there are no guarantees about how they will be run by the device, where they will be, or what other apps will be there.
It is true that an app can request for another app it may be comparable with but it is up the user to handle that information.
May I ask for curiosities sake why you are trying to do this? Are there any other workarounds?
However in terms of it being physically possible, yes. I doubt that apple allows independent developers to do this however. But an example of this occurring may be gridlock where a user can move their apps around differently on the screen. The app in this case has the ability to access app position. But I believe in this case app position is about the UI and not about nested files. apps cannot to my knowledge modify information outside of their own file. Imagine if you had an app that could edit other games scores.
It is not possible to dynamically find out the position of an app's icon on the Home Screen (even for jailbreak apps). Apple wants you to respect the user's privacy settings.
Extra Info - There is popular JavaScript library that adds a promo bubble to the bottom of your mobile web application, inviting users to bookmark the app to their device's home screen.

iOS - Aggregating scraped data in a unique way, will I be rejected?

I am building some services that will scrape data from a number of websites and be stored into a database. I am then using services to call this data into an iOS app and display it in an organized manner that will be useful to users. Will my app be rejected due to this policy?
12.3
Apps that are simply web clippings, content aggregators, or a
collection of links, may be rejected
I am not using any child browser, etc. When a user views the data within the app they may click a link to go to the specific webpage in Safari separately, but there is no "Buy" button, etc.
As long as you're adding some value to the content I don't think you have a problem. Look at Flipbook; it basically rehashes people's web data, but it a useful way. Aggregation itself isn't bad, it's people who don't put an effort to curate or correlate the data is where I believe Apple has a problem.
tl;dr: It depends on how you implement your app.

Resources