diff options
author | Lars Schmertmann <Lars.Schmertmann@governikus.de> | 2020-05-15 18:45:05 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2020-05-19 11:57:26 +0000 |
commit | c8e25db5050b3daa178866139d4e3db6466ce667 (patch) | |
tree | 39f6dbbc58f0d8b968e8279d0e88238b3a379b6e | |
parent | b118628ccca15d39617c7bb916f538d59cfb6c7d (diff) |
Enable Universal Links on iOS
Change-Id: I05b5bede49f619576dd9ab37444f7cb5fe0f15f0
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
(cherry picked from commit 1b7589a25c66d14ff6873710a3851038d627ef57)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp | 22 | ||||
-rw-r--r-- | src/gui/util/qdesktopservices.cpp | 17 | ||||
-rw-r--r-- | src/plugins/platforms/ios/qiosapplicationdelegate.mm | 20 |
3 files changed, 59 insertions, 0 deletions
diff --git a/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp b/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp index b9a8d8d90e..6527021dd6 100644 --- a/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp +++ b/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp @@ -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] diff --git a/src/gui/util/qdesktopservices.cpp b/src/gui/util/qdesktopservices.cpp index 763f309fc7..fbb63a9408 100644 --- a/src/gui/util/qdesktopservices.cpp +++ b/src/gui/util/qdesktopservices.cpp @@ -253,6 +253,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. diff --git a/src/plugins/platforms/ios/qiosapplicationdelegate.mm b/src/plugins/platforms/ios/qiosapplicationdelegate.mm index a56c1e4568..c9fcfd23b6 100644 --- a/src/plugins/platforms/ios/qiosapplicationdelegate.mm +++ b/src/plugins/platforms/ios/qiosapplicationdelegate.mm @@ -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); |