在QML中获取自定义iOSscheme的源URL的最佳方式

我是Qt和QML的新手,正在尝试为iOS构build我的第一个应用程序。 我需要获取我在info.plist(myApp://)中定义的自定义URL Scheme的内容。 当我打开任何URL myApp:// xyz时,URLscheme起作用并且应用程序打开。 现在我需要获取URL(xyz)的内容。

在过去几天试图做到这一点,并没有成功,也没有find一个好的手册,如何做到最好,我问这里。 到目前为止我的理解是:有些人创build自己的应用程序代表。 在github上有一些使用较老的Qt版本(我使用5.4)的例子,但我没有设法将它们集成到我的应用程序,这似乎是相当复杂的这个简单的事情。 另外,正如我在这里看到的: https : //github.com/qtproject/qtbase/blob/stable/src/plugins/platforms/ios/qiosapplicationdelegate.mm URL已经由Qt处理了。 我不知道是否Qt桌面服务http://doc.qt.io/qt-5/QDesktopServices.html ,处理它,但(似乎)它不是从QML可用。

什么是最好的方式来做到这一点? 非常感谢。

我终于使用QDesktopServices和一个QML的信号工作。

HandleURL.h

#include <QDesktopServices> #ifndef HANDLEURL #define HANDLEURL class HandleURL : public QObject { Q_OBJECT signals: void incomingURL(QString path); public slots: void handleURL(const QUrl &url); }; #endif 

HandleURL.cpp发出信号

 void HandleURL::handleURL(const QUrl &url) { emit incomingURL(url.toString()); } 

在main.cpp中,setURLHandler并创buildQML上下文属性

 HandleURL *URLHandler = new HandleURL(); QDesktopServices::setUrlHandler("myscheme", URLHandler, "handleURL"); engine.rootContext()->setContextProperty("URLHandler", URLHandler); 

在QML中,听信号

 Connections{ target: URLHandler; onIncomingURL: { console.log("Incoming Signal: "+path) } } 

plist.info

 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.myorg.mobile1</string> <key>CFBundleURLSchemes</key> <array> <string>myscheme</string> </array> </dict> </array>