[英]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.