在 QML 中获取自定义 iOS 方案的源 URL 的最佳方法
Posted
技术标签:
【中文标题】在 QML 中获取自定义 iOS 方案的源 URL 的最佳方法【英文标题】:best way to get source URL of custom iOS scheme in QML 【发布时间】:2015-03-03 00:41:59 【问题描述】:我是 Qt 和 QML 的新手,我正在尝试构建我的第一个 ios 应用程序。我需要获取我在 info.plist (myApp://) 中定义的自定义 URL 方案的内容。当我打开任何 url myApp://xyz 时,URL 方案有效并且应用程序打开。现在我需要获取 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。
最好的方法是什么?非常感谢。
【问题讨论】:
【参考方案1】:我终于使用 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 中,监听 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>
【讨论】:
它在哪个操作系统上工作?对我来说似乎不适用于 OSX 我只在 iOS 上进行了测试(最后我们放弃了 Qt 并使用了 Swift,所以我不再运行它了)。但也许这有帮助:superuser.com/questions/548119/…以上是关于在 QML 中获取自定义 iOS 方案的源 URL 的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 Phonegap Build 中为 iOS 定义自定义 URL 方案吗?