Enable Universal Links on iOS

Pick-to: 5.15
Change-Id: I05b5bede49f619576dd9ab37444f7cb5fe0f15f0
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Lars Schmertmann 2020-05-15 18:45:05 +02:00
parent 4683b0b57f
commit 1b7589a25c
3 changed files with 59 additions and 0 deletions

View File

@ -96,3 +96,25 @@ QDesktopServices::storageLocation(QDesktopServices::DataLocation)
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) +
"/data/organization/application"
//! [6]
//! [7]
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:your.domain.com</string>
</array>
//! [7]
//! [8]
{
"applinks": {
"apps": [],
"details": [{
"appIDs" : [ "ABCDE12345.com.example.app" ],
"components": [{
"/": "/help",
"?": { "topic": "?*"}
}]
}]
}
}
//! [8]

View File

@ -250,6 +250,23 @@ bool QDesktopServices::openUrl(const QUrl &url)
For more information, see the Apple Developer Documentation for
\l{https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/communicating_with_other_apps_using_custom_urls?language=objc}{Communicating with Other Apps Using Custom URLs}.
\warning It is not possible to claim support for some well known URL schemes, including http and https. This is only allowed for Universal Links.
To claim support for http and https the above entry in the Info.plist file
is not allowed. This is only possible when you add your domain to the
Entitlements file:
\snippet code/src_gui_util_qdesktopservices.cpp 7
iOS will search for /.well-known/apple-app-site-association on your domain,
when the application is installed. If you want to listen to
https://your.domain.com/help?topic=ABCDEF you need to provide the following
content there:
\snippet code/src_gui_util_qdesktopservices.cpp 8
For more information, see the Apple Developer Documentation for
\l{https://developer.apple.com/documentation/safariservices/supporting_associated_domains_in_your_app}[Supporting Associated Domains}.
If setUrlHandler() is used to set a new handler for a scheme which already
has a handler, the existing handler is simply replaced with the new one.

View File

@ -50,6 +50,26 @@
@implementation QIOSApplicationDelegate
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler
{
Q_UNUSED(application);
Q_UNUSED(restorationHandler);
if (!QGuiApplication::instance())
return NO;
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
QIOSIntegration *iosIntegration = QIOSIntegration::instance();
Q_ASSERT(iosIntegration);
QIOSServices *iosServices = static_cast<QIOSServices *>(iosIntegration->services());
return iosServices->handleUrl(QUrl::fromNSURL(userActivity.webpageURL));
}
return NO;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
Q_UNUSED(application);