Is Google App Indexing SDK required in iOS for Google DeepLinking? - ios

I want to use Google App Indexing with my web pages and iOS app.
I do support Universal Links (or deep links in Google lingo) with Apples Search and have my web pages set up accordingly.
From Googles documentation I am unable to find out if I really need to add the Google App Indexing SDK. The SDK does not give me any required functionality and I would prefer to skip it - but does Google rely on the SDK to be able to do the magic?
I am not doing any indexing of in app content, the only thing I want to be indexed is the web pages, and get the according deep links.

To enable App Indexing in your iOS App, adding the Google App Indexing SDK is mandatory as the documentation suggests.
This way it will be possible for your App content to be searchable by users conducting Google queries, producing results that will lead the users to open or install your App.
Concerning the SDK, it will influence ranking, whether or not the user has your App installed. This means that if your App is indexed, Google will use the content within your App as a signal in ranking and not just your web content.
Users will also see an enhanced UI with your App icon on the search results page.
Hope this helps.

You are right, getting Google search results to deep-link into your app is achievable using only Universal Links and having your web content naturally feature in Google search results.
The Google documentation isn't great, but there are two major reasons you'd want to integrate the Google App Indexing SDK:
The first, as the documentation does say, is so that Google ranks your 'app content' higher in Google search results than if you didn't integrate the SDK. My guess is that 'app content' here is defined as your web content with app related meta data, such as the <link rel=alternate> tag specified in the documentation. I've yet to find any way to validate/verify to what degree this helps - we have to trust the documentation for now.
The second is that currently, your deep-linking will only work from Safari Mobile. To facilitate deep-linking from Google search results into your app in Chrome for iOS will require implementation of Google's SDK, which will also provision a "back to Google" button in your app. To see whether this is worth doing you'd have to check your analytics to see how many of your iOS users are using Chrome instead of Safari Mobile as their main browser on iPhone.
Source for second reason: https://www.youtube.com/watch?v=6NFRNamQGCc&feature=youtu.be&t=268

Related

Does Google Search App block universal links

I am implementing Firebase App Indexing as mentioned in official firebase documentation here: https://firebase.google.com/docs/app-indexing/ios/app.
The universal links are enabled and work fine for search results from different browsers like Safari and Chrome. They also work for other applications. But when I tap on a search result from the Google Search App in iOS. It does not take me to my app. Also on long pressing a link in the Google app does not provide an option to open link using my App. This option is however shown when I long press on links from other applications.
Does it have something to do with the Google Search app disabling the universal links deliberately. Is it possible for individual applications to prevent Universal Links from opening other applications?
Or does Apple apply restrictions itself for certain apps?
Indeed, some apps disable the capability of deep linking using Universal Links. Some notable examples: Facebook, Instagram.
Some of these apps allow deep linking via URI schemes (the old iOS 9- way of deep linking), but there is no promise that this behaviour will be persisted.
I'm guessing most of these apps would like to have the user stay within their own in-app browser instead of switching to another app.
I never tried the Google Search app, but if your universal link works perfectly in Safari and not in the Google Search app, that may be the case. In that scenario you'll need your click domain server to redirect the user to the store or some landing page, based on the User Agent of the incoming browser.

Is it possible to use Facebook App Links with email and pass through App Store install?

I am planning to use app link from FBSDK to invite using my iOS app via email.
I know if my iOS app was installed on the device it will be opened when I select the link and handle invite token in URL.
But how about if my app was not installed?
After user install it from App Store can I handle invite token also?
Hope anyone used to work with this scenario can help me.
There are a lot of reasons why what you're trying to do won't come out the way you want it to. Let's dive in...
App Links don't work anymore
Facebook created App Links in 2014 as an open standard to solve the limitations of URI scheme deep links. App Links have two main components:
A set of meta tags to add to the web page destination of a standard http:// link. These tags specify the custom URI scheme location of corresponding content inside the native app, and the behavior that should occur if the app is not installed.
A routing engine for use inside apps that support opening links. This engine checks the destination URL for App Links tags before opening it, and then launches the corresponding app or executes the specified fallback behavior.
App Links were supposed to be an open-source standard to change the world, making app-to-app deep linking simple and universal. Unfortunately Facebook has decided they actually don't want that world (it's much better for them to keep users inside the Facebook app — see Instant Articles if you don't believe me), meaning the App Links standard is essentially dead. It's no longer supported on the iOS Facebook app, and Applinks.org isn't even a separate website now.
App Links were not designed to work with email (or essentially any app except Facebook)
Even if it were still supported by Facebook, the App Links standard has a critical flaw: it requires work by both the origin and destination apps. While the meta tags component saw wide adoption, the only major implementations of the routing engine were in the core Facebook and Messenger apps.
To function as you want, where deep linking can occur from links in emails, the routing engine component would need to be implemented in any email app where your link could possibly be clicked. This was never going to happen for apps like the default iOS Mail app from Apple, or the Gmail app, for example.
App Links had no meaningful support for deferred deep linking
Deferred Deep Linking (Deep Linking refers to using a link to open your app directly to a specific piece of content, and Deferred means that it works even if the app isn't installed first) requires a remote server to close the loop. You can build this yourself, but you really shouldn't for a lot of reasons, not the least of which being you have more important things to do. You'll notice that neither of the two App Links components included a remove server to retain link data through install, so deferred deep linking was never properly supported in the core App Links standard. Facebook ads make use of the partial support for deferred deep linking offered by the FBSDK in conjunction with App Links, but this only works when the link/ad is clicked within a Facebook app and the receiving app has the FBSDK integrated.
Deferred deep linking is tough anyway
Moving on from App Links, deferred deep linking is still complicated. URL schemes don't work, because they always fail with an error if the app isn't installed. Apple's newer Universal Links in iOS 9+ get closer in that they at least don't trigger an error if the app isn't installed, but you'd still have to handle redirecting the user from your website to the App Store. You can't pass context through to the app after install with Universal Links, so you wouldn't be able to send the user to the correct item, and they actually aren't supported in a lot of places.
Deep linking out of email on iOS is very hard
Almost all email links involve some sort of click tracking, which is always implemented as a link wrapping redirect. This isn't technically a problem if the user doesn't have your app installed, but if they do, Universal Links don't work with wrapped links. If you're building it yourself, you'll either need to completely disable click tracking in your emails, or accept that deep links won't work there.
Bottom Line
App Links were never the solution you needed. A free service like Branch.io (full disclosure: they're so awesome I work with them) or Firebase Dynamic Links is what you need. Both services support deferred deep linking, out of Facebook or almost any email app. Branch is more powerful and offers far more features, and works with major email senders to offer a solution for deep linked email (the only one on the market today).

How to work with Firebase App Indexing for IOS Apps

i am in the process of making my app with firebase i am pretty much done with that except Firebase App Indexing. I am very exited with this feature because it could help me to increase my app get more traffic from the web but the problem is i really can't able to see how to implement this. According to Firebase Docs i just need to register my app with this pice of code
[[FIRAppIndexing sharedInstance] registerApp:your Apple ID from iTunes Connect];
I have done that but what should i do after that?
1.My app is firebase app that means i don't have any website to host my content except firebase realtime database. Does my content is available for crawlers? if not how can i make available to them?
2.If i can able to show my content in the google search results i don't wanna show all the content and i wanna show just some of my content for example i have a social app for sharing General Knowledge questions, i wanna show just the question like "What is the highest mountain" in the search results and if the user want to see the answer it should take them to my app how can i do that?
3.As per docs i came to know that i need to create univiersal links for my app content to direct users from google search but how shold i do that ? Lets say should i crate universal links when the user create question?? if so how can i do that ??
Thank you very much for the help.
This is not currently possible on iOS using Firebase App Indexing. The situation is slightly different on Android, but that is not applicable to your question.
On iOS, Firebase App Indexing is simply highlighting pages on your website in Google search results that have corresponding content inside your app. This is achieved by piggybacking on Apple's Universal Links standard, and there is no proactive 'crawling' going on inside your app. This means unless you have a corresponding web page for your app with 1:1 content parity, you can't really benefit from Firebase App Indexing on iOS as it comes out-of-the-box.
The best workaround is to generate little 'placeholder pages' for every piece of content in your app, which the sole purpose of opening your app (if it is installed) or redirecting to the App Store (if it is not installed). Ideally you'll need some sort of deferred deep linking system so that users still see the correct content after downloading. Fun fact: this is essentially how HotelTonight operates their entire business model. Unfortunately Firebase's implementation is not mature enough to support this full flow, and Google hasn't quite figured out how to rank app-only content properly yet in search results so you will probably need to pro-actively submit your placeholder pages to them.
Shameless plug: at Branch, we provide all of the above as a free service. You can read more about it here and take a look at the set up docs here.

Google Analytics UTM iOS Testing

I have installed Google Analytics SDK using the Google Analytics v3 iOS guide and I have verified that it is hitting analytics through the real time view of the analytics dashboard. I then followed all the campaign tracking v3 iOS guide, including the troubleshooting steps "Self-serve diagnosis for iOS conversion tracking." The IDFA data was getting sent to GA as verified by viewing the "Audience->Demographics->Overview" page, and all the other steps also verified we had set up the tracking correctly. I then submitted the app, waited for review, and tested the install tracking by creating the following UTM link using the google link generator at the bottom of the Campaign tracking guide (note that the link here is bogus data, but shows the general link structure):
https://click.google-analytics.com/redirect?tid=UA-1234-5&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=com.company.app&idfa{idfa}&cs=google&cm=cpc&ck=running%2Bshoes&anid=admob&hash=md5
I then uninstalled my app on the phone I was using to test, clicked on the link to get directed to the app store and installed my app from there. I proceeded to wait 3 days and then looked for the install in the "acquisition->sources->all" tab of analytics and did not see the campaign show up. I then looked more closely at the guide, which has the following warning:
"Note: iOS Install Tracking only works for ads served through mobile ad networks, such as AdMob that serves in-app ads."
Which seems to suggest that the only way to verify that the UTM link install gets tracked correctly is by paying an ad network to serve an add in an app and then click on that ad?? That seems absurd. So we did some backwards engineering. In Android, all one has to do is click on the link and the install gets successfully tracked. That suggested that the restrictions imposed by IDFA (an Apple innovation) made it difficult for analytics to serve a 'one link tracks all installs' solution. Looking back at the UTM link, I noted that there is an idfa{idfa} portion that presumably is supposed to include the idfa of the phone clicking on the link, which would only be possible if the app serving the add or some other entity that knows the phone's IDFA number changed the link to include that phone's IDFA. We then obtained the phone's IDFA number through the GA logs and edited the UTM link to include the IDFA number within the brackets so the portion that used to be idfa{idfa} now was idfa{}. We then clicked on that link and are now waiting for another three days to see if it shows up in GA acquisitions... We also made an Admob account and tied it into the analytics account to track the app... but it appears that is just another way to view the exact same information that is presented in the analytics dashboard.
What is the proper way to test UTM campaign tracking? Do I really have to create a mobile add, run it and click it? Should clicking on the link as generated by Google work fine and show up in GA acquisitions, and the absence of its presence signifying my UTM tracking is not working?

Display ads without leaving app

I'm looking at some ad SDKs and it's difficult for me to find a way to present them without leaving the app. I've tried a handful of them but lets say AdMob for purpose of answering this question.
Is there a way to present AdMob ads in an in-app browser once they are clicked? Or would I have to use a different SDK if I want to achieve that.
If the answer is the latter, what well known Ad SDKs would let me do that?
Opening the target page in Safari and not in an in-app browser is on purpose: Safari allows to better track the users. The reason is related to the cookie handling: Safari stores cookies globally while the UIWebView based in app-browsers have a cookie store restricted to a single app. Therefore with in-app browsers, you cannot track users across apps.
However, there is a solution to mitigate the problem provided you have a certain control about the ads (and aren't simply taking the from a network).
An ad can consist of more than just an image with a target link. It can contain interactive elements. You can take advantage of it by creating an ad that opens an overlay when tapped. The overlay shows a web page within your app. The user can then either close it or tap a link that takes her to a further web page shown in Safari.
The standard API to implement an overlay supported by most ad SDKs is MRAID. Google Mobile Ads SDK (formerly known as AdMob SDK) supports it. The Google SDK additionally supports the AdMob SDK.
Good examples for such ads can be found on a Google support page. Specifically check out "Sample Code for an expandable ad (MRAID)" and "Target window: in-app overlay window".

Resources