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



我是Qt和QML的新手,正在尝试为iOS构建我的第一个应用程序。我需要获得我在info.plist(myApp://)中定义的自定义URL方案的内容。URL方案有效,当我打开任何URL myApp://xyz时,应用程序都会打开。现在我需要获取URL(xyz)的内容。

在过去的几天里,我试图做到这一点,但没有成功,也没有找到一本关于如何做到最好的好手册,我在这里问。到目前为止,我所理解的是:有些人创建自己的应用程序委派。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中,设置URLHandler并创建QML上下文属性

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>

最新更新