微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在嵌入式SFSafariViewController中打开通用链接

如何解决在嵌入式SFSafariViewController中打开通用链接

我目前正在集成安全登录提供程序,他们的SDK使用模式SFSafariView打开登录页面

需求与标准提供的需求不同,在需求中,我们需要一个来宾按钮来关闭模式并链接到应用程序中的其他位置。 -由于这不是标准操作,因此SDK无法处理。

除非用户强行单击该链接并选择在我们的应用程序中打开,否则该链接将继续显示到SFSafariView中的网页。这不是很好的用户体验,除了在网页上添加注释(不是很吸引人)之外,没有其他方法可以通知用户这种需求。

Q-如何获得显示在SFSafariView中的html网页上的链接,并将其发送到打开该应用程序的同一应用程序。 注意:该应用具有关联的域,并在网站上正确设置了AASA文件

有用的代码

//Sets up a SFSafariVC (use this code in a button to open a local html file with your link in)
guard let path = Bundle.main.path(forResource: "",ofType: "html") else { return }
let url = URL(fileURLWithPath: path)
let config = SFSafariViewController.Configuration()
let vc = SFSafariViewController(url: url,configuration: config)
present(vc,animated: true)

解决方法

使用老式的深层链接确实解决了我的问题。

通过注册自定义URL协议

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
        <key>CFBundleURLName</key>
          <string>com.appName.app</string>
          <key>CFBundleURLSchemes</key>
          <array>
            <string>appNameWebProtocol</string>
          </array>
        </dict>
    </array>

然后使用形式为appNameWebProtocol:// link / destination的链接,SFSafariViewController始终将此链接传递给应用程序。

这是通过appDelegate方法获取的

func application(_ app: UIApplication,open url: URL,options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    
}

该解决方案存在问题-在我们特定的情况下,可以在可以在应用外部查看且未安装该应用的网站上找到此链接。如果是这种情况,则该链接不会执行任何操作,因此我们的解决方案必须在网页上包含自定义脚本,以确定该链接应出现在webPage中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?