Testing & QA | AppsFlyer

Chapter 8

Testing & QA

Whether it’s Attribution or Deep Linking, or both, it is vital to your product and marketing teams to have extremely well documented, well understood QA and troubleshooting guidelines.

Testing Attribution and Deep Linking is very complex and full of technical nuances –

  • What media source are you testing?
  • Are your query parameters accurate?
  • Is your link URI encoded?
  • Does the link have the appropriate API and Redirect Parameters?
  • Are you testing with Apple Search Ads turned on? Did you know this impacts callback latency?
  • Are you testing deferred or regular deep linking?
  • If regular deep linking, by what mechanism?
  • Are you clicking the link on Slack? If not, from what app or browser?
  • Are you using a test or production build?
  • Are your links configured with an AASA?
  • Is your AASA the correct format and includes the correct app prefix, bundle identifier and path that is associated with your test or prod app?

These are just some of the questions you must ask when QA’ing link.  This guide outlines how to tackle these questions with both direct answers as well as a step by step process when testing links.

Process Philosophy

  • Define a clear test process and goal.
  • Explicitly state every component of the process – leave nothing to assumption or speculation. The above questions are the types of questions you must ask.
    • OS, OS version, QA app, app version, browser, links, how to click links, where to click links from, QA tester, vendor, owner, user experience.
  • Define expected outcomes by iOS, Android, Web X User State (IE Has or Doesn’t have the app). This should create a clear matrix so you can test all expected outcomes. Within this table make sure to denote the mechanism by which deep linking occurs.
  • Create a clear document that captures test cases – share and collaborate with team-members using the same document.
  • Always write down every required component of the documented QA process – failing to document is failure to QA properly.

Simulating Fresh Installs – iOS

In order to simulate a fresh install on iOS do the following in this order:

  • Logout of the app.
  • Delete the app.
  • Clear your IDFA: Settings > Privacy > Advertising > Reset Advertising Identifier…
  • Clear your Cookies: Settings > Safari > Clear History & Website Data
  • Click on the attribution link – let it redirect you through to Safari landing page.
  • Click “Open App Store”.
  • Do not download the app from the app store unless you are testing the production app.
  • Load test/QA version of the app on your device if applicable.
  • Open the app.
  • Depending on your setup, you should see a fresh install and a deep link if you are leveraging the callback to route to the proper spot in the app.

Testing URIs

Recall that a URI is a Universal Resource Indicator. It is a URL or link that points to an app. In technical terms, this means that you cannot access a URI unless you have the app.

On iOS, the easiest way to fire a URI scheme and or route, is to type it into Safari and hit “go”. If you have the app, it will open immediately. If the URI and Route exists and is handled by the app, it should take you to the appropriate spot in the app.

iOS dialog

If you do not have the app, you will see an error like this:

iOS dialog: invalid address

Testing Direct URIs

The below can be used to properly QA URI schemes and routes. This should be part of every app’s standard QA process. You should maintain a known list of routes that are aligned on iOS and Android.


  • Logout of app.
  • Delete the app.
  • Install and open the test or QA app in use.
  • Open the app.
    • On iOS, paste the URI into the browser on Safari.
    • On Android, put the link behind an <a href=””> element and click the button or link.

On Android, it is often easiest to wrap the URI in an href element and host or put in an email or another type of medium. You cannot paste URIs into Chrome like you can with Safari.
For Attribution Link URIs – or URIs that are triggered by the 3rd Party Attribution Service – the process is very similar.

  • Logout of app.
  • Delete the app.
  • Install and open the test or QA app in use.
  • Open the app.
  • Paste the link into email, notes, or SMS.
  • Click the link.

Testing Universal Links

Apple Universal Links are possibly the hardest to test deep linking mechanism, not only because there are so many rules that could disable them, but also because there are known issues – one of which is not resolved and is a known bug with Apple.

Before reading below remember the following issues with Apple Universal Links:

  • Check your AASA. Make sure its accurate and hosted properly.
  • Check your Entitlements File.
  • Make sure the domain is correct and listed in the Associated Domains.
  • Make sure you’ve filled in relevant information with your 3rd Party Attribution Service. With AppsFlyer, this UI can be found in the OneLink configuration menu.
  • Make sure the link you are using has the appropriate domain, and pathname.
  • Make sure you’re not clicking the link from Slack or other non-supported apps or browsers. When in doubt, just use Notes or SMS app from Apple!
  • Do not wrap your Universal Link in any type of click recording.

Test Process:

  • Get visual confirmation that the Universal Link domain is in the QA app Entitlements > Associated Domains.
  • Navigate to the domain/apple-app-site-association and validate that the file and the proper pathnames are present.
  • Delete all versions of the app from the device.
  • Power the device off and then on – this resets the device’s entitlement and AASA cache.
  • Install the test version of the app in question.
  • Using the NOTES app or iMessage, paste a link into the application.
  • Tap the link.
    • This is extremely important: you cannot use Slack, Outlook or other applications. Universal Links only work in some apps. Notes and iMessage are known, supported apps.
    • This is extremely important: Do not paste the link into the browser or use Chrome! Universal Links do not work in either of these situations.
  • The app should open immediately without a redirect through the browser.

About the Authors