繁体   English   中英

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

[英]best way to get source URL of custom iOS scheme in QML

我是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中,setURLHandler并创建QML Context属性

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

在QML中,收听Signal

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM