在 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 方案吗?

iOS 10 自定义 URL 方案不再有效

为 iOS 应用程序定义 SSL 自定义 URL 方案

无法让自定义 url 方案在 iOS 中工作

使用 Branch.io 的自定义 URL 方案中的路径变量?

使用自定义 URL 方案的 iOS 无缝 Facebook 登录体验