https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html as per this link Universal links with wildcards working fine, followed steps in this link to apply deep linking to my application but it doesn't work. When clicking on a link in received email, it should navigate to my application but it is opening in safari browser. I have mentioned "*.test.com" as applinks in Associated domains under Capabilities in Xcode and in our web side we have deployed "apple-app-site-association" file in root folder. My server host name like "abc.test.com" and I have mentioned applinks like "*.test.com" this universal links with wildcard feature is not working.I have Enabled ‘Associated Domains’ in my app identifier on developers.apple.com, If I have mentioned applinks like "abc.test.com" then it is working fine. My application Developement target is 9.3.
Universal Links
RSS for tagAllow your users to intelligently follow links to content in your app or to your website using universal links.
Posts under Universal Links tag
98 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Documentation says that apple-app-site-association file needs to be accessible via HTTPS—without any redirects.However practice shows, that when this file accessible via redirect, Universal Links are working.Is documentation outdated?Can we rely on this behaviour?
I am unable to get Universal Links opening in my app despite the fact that it is working for others.I used sysdiagnose to retrieve swcutil_show.txt and it shows the next update time for the entry in my app to be: 0001-01-01 03:54:56 +0000Which is in the past. I can't seem to be able to reset this entry even after uninstalling and reinstalling the app. Is there anyway to clear this entry on my device?I'm not sure how it got into this state, but I hope it's only me and not any of my end users.
Hi,
I'm having a problem about defining universal link.
I have a link like: host/en/booking/#serviceApp/resetPassword.
I added in AASA file bellow:
"applinks": {
"apps": [],
"details": [
{
"appID": "myAppId",
"components": [
{
"/": "/*/booking/*/resetPassword",
"#": "serviceApp"
}
]
},
]
}
}
Is it correct? Because I tried to test but it did not work
Thanks!
Hi!
We have two apps, both use the Universal Links mechanism, apps should be opened when user read NFC tag. The tag content is a URL link to our domain.
After updating to iOS 15, users faced the problem that they constantly see the application selection dialog when reading the nfc tag.
How to fix it? Previously, the selection dialog was displayed once and the value was stored.
Our aasa file on domain:
{
"applinks": {
"apps": [],
"details": [
{
"appIDs": ["*.*.app1"],
"paths": ["*"]
},
{
"appIDs": ["*.*.app2"],
"paths": ["*"]
}
]
},
"appclips": {
"apps": [
"*.*.app2.Clip"
]
}
}
Universal links stops working randomly,
When i tried this curl API test i found strange result
Case 1: When the curl test return association JSON response it works fine
Case 2: Sometimes the curl test fails and association JSON response is not returned for the same log is below: (Actual domain is replaced by mydomain.com)
Https enabled
No redirections
Association added in .well-known folder
Works randomly without any change in sever
IP added as exception in blacklist
Applebot added as:
User-agent: Applebot
Allow: /.well-known/
Curl API Test Response:
Using Terminal:
curl -v https://app-site-association.cdn-apple.com/a/v1/mydomain.com
* Trying 8.241.155.124:443...
* Connected to app-site-association.cdn-apple.com (8.241.155.124) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
* CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: CN=app-site-association.cdn-apple.com; OU=management:idms.group.5707244; O=Apple Inc.; ST=California; C=US
* start date: Sep 1 20:44:29 2021 GMT
* expire date: Oct 1 20:44:28 2022 GMT
* subjectAltName: host "app-site-association.cdn-apple.com" matched cert's "app-site-association.cdn-apple.com"
* issuer: CN=Apple Public Server RSA CA 12 - G1; O=Apple Inc.; ST=California; C=US
* SSL certificate verify ok.
> GET /a/v1/mydomain.com HTTP/1.1
> Host: app-site-association.cdn-apple.com
> User-Agent: curl/7.79.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Tue, 28 Jun 2022 06:51:03 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 10
< Connection: keep-alive
< Apple-Failure-Details: {"cause":"context deadline exceeded (Client.Timeout exceeded while awaiting headers)"}
< Apple-Failure-Reason: SWCERR00301 Timeout
< Apple-From: https://mydomain.com/.well-known/apple-app-site-association
< Apple-Try-Direct: true
< Cache-Control: public, max-age=1800
< Expires: Tue, 28 Jun 2022 06:51:23 GMT
< X-Cache: MISS
< CDNUUID: 2478cf3a-1d35-4870-ae61-0ad342ef8adf-1481196180
< CDN-Server: lumn
< Age: 1238
<
Not Found
* Connection #0 to host app-site-association.cdn-apple.com left intact
Please support, Urgent Help Required.
We have been having problems with our app clip not working when sharing through iMessage. The app and app clip are published and work correctly when scanning a QR code that points to the URL: https://www.coderus.com/locations?loc=1 however if this same URL is shared through the iMessage app, a link to the website displays and not the app clip card.
We have confirmed that:
AASA file is available and has the type application/json
Both devices are above iOS 14
Both devices are in each other's contacts
The website has the meta tag for the smart app clip banner
The website has a meta tag for the og:image
Launch experiences have been configured on AppStoreConnect - as said before, the QR codes work correctly
The link leads to a 404 page, I wasn't sure if there needs to be an actual page that the link points to as app clips seem to work fine without when scanning the QR code through the camera app.
On iOS 14 you can pick another default browser than Safari. If you use another browser, that browser will ask the user to change their default browser.
I have installed Chrome and set it as default
But problem comes when I try to open a Universal Link (which was working just fine when Safari was the default browser), which seems to just not work. With Safari as default browser, the Universal Link would work, and the corresponding native app was getting opened. However, with any other browser different from Safari set as default, the feature is broken and the Universal Link doesn't open the native app.
Has anyone experienced anything similar?
Why might this happen and how might this be solved?
Any help is very much welcomed
The Problem:
I am building an app that uses PayPal for payments, and I set up universal links so that the user gets redirected into the app after the user has confirmed the payment at PayPal's site.
Universal links are working in general. But here is what I have discovered:
The following scenario works:
The app opens the nextActionUrl from PayPal using SFSafariViewController.
User has to log in and presses the login button.
User presses the confirmation button on the PayPal site.
PayPal redirects to the return_url that was provided when creating the payment intent.
The browser closes, and the user gets redirected into the app.
Now when the user has just recently logged into PayPal then PayPal does not show the login page, instead the user has to only press one button. This scenario fails:
The app opens the nextActionUrl from PayPal using SFSafariViewController.
User does not have to log in and presses the confirmation button on PayPal site.
PayPal redirects to the return_url that was provided when creating the payment intent.
The browser opens the website behind the universal link instead of redirecting to the app.
This scenario also works:
The app opens the nextActionUrl from PayPal using SFSafariViewController.
User does not have to log in, but actively logs out.
User has to log in and presses the login button.
User presses the confirmation button on the PayPal site.
PayPal redirects to the return_url that was provided when creating the payment intent.
The browser closes, and the user gets redirected into the app.
This happens consistently and reproducible.
Some additional details:
I am developing the App using Flutter
I set up the Runner.entitlements as follows:
...
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:sub.example.com</string>
</array>
...
I set up the Info.plist as follows for deep links with different schema:
...
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>sub.example.com</string>
<key>CFBundleURLSchemes</key>
<array>
<string>web+example</string>
</array>
</dict>
</array>
...
I set up the apple-app-site-association file on the website at https://sub.example.com/.well-known/apple-app-site-association as follows:
{
"activitycontinuation": {},
"webcredentials": {},
"applinks": {
"apps": [],
"details": [
{
"appID": "XXXXXXXXXX.com.example.example",
"paths": [ "/*" ]
}
]
}
}
To open the urls from Flutter I am using the package url_launcher and simply call await launchUrl(nextActionUrl)
What I've tried and what I've learned:
I tried many things, before I discovered this consistent behavior. For example:
I connected my device to the mac and opened the console for it in xcode to see how the logs look like when it works and how it looks like when it does not work. I found out that when it works there is a log entry that requests the switch to my App from the SpringBoard-process: [Received trusted open application request for <applicationId> from <FBProcess: ...], but in the cases where it does not work there isn't a rejected request or anything. The SafariViewController does not even seem to try to go the universal link route and instead opens the link as a website directly.
For even more logs, I pressed and hold the volume buttons and clicked the lock screen button until a haptic feedback occurred. After that, I extracted the syslogs that were generated from the settings/privacy section via AirDrop on to the mac. I took a look at the swcutil_show.txt file and the universal link is definitely set up correctly there. I also skimmed around in the other logs, but I couldn't find anything helpful.
I have inspected the url_launcher package to see how it works for iOS and if there may be something wrong, but I didn't really find a problem. I only discovered that the package is using the SFSafariViewController and after some googling I've read the WKWebView would be more suitable, but it didn't seem to be the problem.
I googled a lot and found many problems related with setting up universal links correctly, but no topics about universal links sometimes working and sometimes not. The only thing close I found was that a universal link won't redirect you to your app if you type it into safari directly but if you click it for example from an email.
The work-a-round that works...
After I confirmed that it consistently works after logging in first, my theory was that it needs at least one navigation between opening the PayPal site in the browser and PayPal redirecting to the universal link.
To confirm my theory, I created an intermediate page that redirects the user immediately after the load event to the PayPal site, and I was disappointed. It didn't change anything.
Then I thought: Maybe it's the User-Interaction that is needed, and I change the intermediate page to only redirect if the user presses a button. And from there on, redirecting to the App using a universal link always worked.
But this isn't a nice solution - at max, this is an ugly work-a-round that may help someone.
My question(s)
Now I am not sure if this is a bug on Apple's side since I didn't find anything on the web or maybe even something strange on PayPal's side?
Am I doing something wrong?
Did someone experience the same thing and has a solution?
Thank you for your time and hopefully for your input on this!
Universal links stopped working lately. Nothing has changed in our code nor in the "apple-app-site-association" file.
We use it for years and it suddenly stopped working.
Any ideas?
Hello, I'm having a hard time with Universal Links and my app.
This looks good:
$ curl -I https://www.bolsinga.com/.well-known/apple-app-site-association HTTP/1.1 200 OK Date: Mon, 12 Jun 2023 22:10:57 GMT Server: Apache/2.4.29 (Ubuntu) Last-Modified: Mon, 12 Jun 2023 20:53:38 GMT ETag: "1eb-5fdf4e9bcb926" Accept-Ranges: bytes Content-Length: 491 Content-Type: application/json
This looks good in my entitlements:
<key>com.apple.developer.associated-domains</key> <array> <string>applinks:www.bolsinga.com</string> </array>
The screenshot below good too (from Settings -> Developer -> Universal Links -> Diagnostics).
If I have a link like https://www.bolsinga.com/dates/sh624.html in Notes.app, and I tap on the link it will open in Safari. If I tap and hold, it will not suggest my application. It seems like my universal links should work. Am I doing it wrong? I thought it meant if I opened the URL in these ways it would open in my app.
Thanks for your help!
Hi, I am running into a strange issue where my universal links work fine on devices when using USB, simulators and TestFlight, it works with no problem on all test environments
But once I submit it for App Review, they don't work. And I have no way to replicate it. At some point they get it working somehow but every resubmission the process repeats where I go back and forth for days until they finally get it working.
Anyone run into this strange issue or has a clue what might be going on?
We have been testing universal links and detected the following: Assuming there is an HTML with embedded JS that redirects to the universal link.
**Direct redirection --> WORKS OK **
window.location.href = "https://my-universal-link?data=abc";
Redirection with timeOut or Interval --> NOT WORKING (go to default WEB)
setTimeout(function () {
window.location.href = "https://my-universal-link?data=abc";
}, 2000);
setInterval(function () {
window.location.href = "https://my-universal-link?data=abc";
}, 2000);
Hi
We locate the file apple-app-site-association on both
https://ourdomain.com/apple-app-site-association
and
https://ourdomain.com/.well-known/apple-app-site-association
By visit this two urls, we are able to get file content through browser.
We are able to get the file content through
https://app-site-association.cdn-apple.com/a/v1/ourdomain.com
with US based IPs, Europe based IPs. However, if we visit this url with Asia based IPs, we always got 404 with content Not Found.
Some work CDN nodes:
< Via: http/1.1 ussjc2-vp-vst-009.ts.apple.com (acdn/14319.5), http/1.1 ussjc2-vp-vfe-002.ts.apple.com (acdn/14319.5), https/1.1 usscz2-edge-lx-004.ts.apple.com (acdn/14319.5), https/1.1 usscz2-edge-bx-033.ts.apple.com (acdn/14319.5)
Via: http/1.1 ussjc2-vp-vst-009.ts.apple.com (acdn/14319.5), http/1.1 ussjc2-vp-vfe-002.ts.apple.com (acdn/14319.5), https/1.1 usscz2-edge-lx-004.ts.apple.com (acdn/14319.5), https/1.1 usscz2-edge-bx-033.ts.apple.com (acdn/14319.5)
which return file content in apple-app-site-association with response code 200.
Some not work CDN nodes:
< Via: http/1.1 jptyo5-vp-vst-014.ts.apple.com (acdn/84.14362), https/1.1 jptyo5-vp-vfe-006.ts.apple.com (acdn/84.14362)
which return Not Found with response code 404.
When use Asia based IPs, we also got some error response header:
< Apple-Failure-Details: {"cause":"context deadline exceeded (Client.Timeout exceeded while awaiting headers)"}
< Apple-Failure-Reason: SWCERR00301 Timeout
Example request with IP in Japan:
> GET /a/v1/ourdomain.com HTTP/1.1
> Host: app-site-association.cdn-apple.com
> User-Agent: curl/7.86.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< Content-Length: 10
< Connection: keep-alive
< Server: nginx
< Date: Mon, 21 Aug 2023 12:45:02 GMT
< Expires: Mon, 21 Aug 2023 12:45:12 GMT
< Age: 608
< Apple-Failure-Details: {"cause":"context deadline exceeded (Client.Timeout exceeded while awaiting headers)"}
< Apple-Failure-Reason: SWCERR00301 Timeout
< Apple-From: https://ourdomain.com/.well-known/apple-app-site-association
< Apple-Try-Direct: true
< Via: http/1.1 jptyo5-vp-vst-014.ts.apple.com (acdn/84.14362), https/1.1 jptyo5-vp-vfe-006.ts.apple.com (acdn/84.14362)
< X-Cache: MISS KS-CLOUD
< CDNUUID: 03f2e102-fa68-4a5f-bc93-0e151a3dfc64-773587498
< x-link-via: ziyct01:443;xymp07:443;gzun11:443;xg02:443;
< x-b2f-cs-cache: no-cache
< X-Cache-Status: MISS from KS-CLOUD-XG-02-03
< X-Cache-Status: MISS from KS-CLOUD-GZ-UN-11-06
< X-Cache-Status: MISS from KS-CLOUD-XY-MP-07-15
< X-Cache-Status: MISS from KS-CLOUD-ZIY-CT-01-09
< CDN-Server: KSFTF
< X-KSC-Request-ID: 0afe4d526afd86918a55a0640d2b75f3
< X-Cdn-Request-ID: 0afe4d526afd86918a55a0640d2b75f3
<
Not Found
CDN Cache URL: https://app-site-association.cdn-apple.com/a/v1/dev.alignwell.com
Apple CDN Cache Checks: Fail
CDN Cache Query Success: Fail
Status Code not 200-299: 404
No Apple Failure Message: Fail
Apple has provided a failure reason: SWCERR00201 Insecure (non-https) redirects forbidden
Apple CDN Cache Up to Date: Fail
File cached by Apple CDN does not match direct file
CDN Cached Contents:
Not Found
Apple CDN Debug Headers:
Apple-Failure-Details: {"location":"http://dev.alignwell.com/.well-known/apple-app-site-association/"}
Apple-Failure-Reason: SWCERR00201 Insecure (non-https) redirects forbidden
Apple-From: https://dev.alignwell.com/.well-known/apple-app-site-association
Apple-Try-Direct: false
Cache-Control: max-age=3600,public
Age: 3561
Content-Length: 10
Universal linking feature stooped working after adding smart app banner. Also, universal linking started working after removing Smart app banner meta tag from the website.
To test smart app banner on staging env, we used appStoreId of our prod app that is on appstore because we don't have a stage app on app store. Both universal links and Smart app banner are working fine on staging env but the same flow is not working on prod env. Any help would be appreciated
Hi,
I have a problem with associated domains developing Passkeys app.
Adding alternate mode(developer mode) to Associated Domains Entitlement, it works fine.
But in non developer mode, CDN doesn't seem to read the AASA file.
AASA file's path is: https://(host).(rootdomain)/.well-known/apple-app-site-associtation
I checked the TLS certificate conditions and all conditions are met.
https://support.apple.com/en-us/HT213464
https://support.apple.com/en-us/HT210176
https://support.apple.com/en-us/102028
Is there another reason why it only works in developer mode?
Thanks for your reply.
I uploaded the AASA configuration file to two domains - one domain consists of Cyrillic, the other domain consists of Latin letters. The problem is that a domain that supports Cyrillic is not handled when opening a link in iOS app.
The AASA configuration is the same.
Does apple support universal links for punycode domains ?
When I attempt to open a Universal Link in safari as the default browser, the Universal Link worked, seamlessly launching the corresponding native app. However, when any other browser is set as the default, this feature breaks, and the Universal Link fails to open the native app.
Does anyone have a solution for this issue?
Can we use Branch.io for this ?
Investigate why your universal links are opening in Safari instead of your app.
View Technote TN3155 >