【问题标题】:Apple Pay JS inside a WKWebViewWKWebView 中的 Apple Pay JS
【发布时间】:2019-02-18 10:15:24
【问题描述】:

我正在研究是否可以在 WKWebView 中嵌入 Apple Pay JS/Web Payments API。我们有一个嵌入在 WKWebView 中的网络应用程序,我们希望通过 JavaScript 实现 Apple Pay,而无需桥接。

我整理了一个非常基本的ViewController.swift 示例如下,利用Apple Pay on the Web Demo

import UIKit
import WebKit


class ViewController: UIViewController, WKUIDelegate {

    var webView: WKWebView!

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        let myURL = URL(string:"https://applepaydemo.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }
}

呈现了 Apple Pay 按钮,但也显示了不支持的设备的错误消息(见下文),并且无法单击该按钮。

我认为这意味着在这种情况下没有支持。我再次尝试使用SFSafariViewController 并显示按钮并在点击时启动Apple Pay。简而言之 - 一切都很完美。

import UIKit
import SafariServices

class ViewController: UIViewController, SFSafariViewControllerDelegate {
    override func viewDidAppear(_ animated: Bool) {
        let safariVC = SFSafariViewController(url: URL(string:"https://applepaydemo.apple.com")!)
        self.present(safariVC, animated: false, completion: nil)
    }
}

我想知道的是,我如何为 WkWebView 实现此功能是否存在问题,或者是否存在错误。看起来按钮出现或按钮不起作用都是错误。显然在一个层面上它认为 WkWebView 是兼容的,但在另一个层面上却不是。这似乎是一个需要报告的错误,但我对 Swift 还很陌生,所以这可能是一个实现问题。

谢谢!

【问题讨论】:

    标签: ios swift wkwebview applepay sfsafariviewcontroller


    【解决方案1】:

    很遗憾,您只能将 ApplePay 与 SFSafariViewController 一起使用;这意味着即使出现 ApplePay 按钮,交易流程也不会让您继续,因为 WkWebview 不支持 ApplePay。

    【讨论】:

      【解决方案2】:

      已编辑

      参考:-https://developer.apple.com/library/archive/ApplePay_Guide/index.html#//apple_ref/doc/uid/TP40014764

      上一个答案

      您需要禁用 javascript 才能正常工作。 (可能出于安全原因,因为涉及付款)

      override func loadView() {
      
              let preferences = WKPreferences()
              preferences.javaScriptEnabled = false
              let configuration = WKWebViewConfiguration()
              configuration.preferences = preferences
             // let webview = WKWebView(frame: .zero, configuration: configuration)
             // let webConfiguration = WKWebViewConfiguration()
              webView = WKWebView(frame: .zero, configuration: configuration)
              webView.uiDelegate = self
              view = webView
          }
      

      【讨论】:

      • 确实消除了错误,但单击按钮不会启动 Apple Pay。我猜这实际上也使用了 JS。
      • 您能否确认您是否已在 Xcode 上配置环境以使用 Apple Pay ?如果没有,请参考以下链接:- developer.apple.com/documentation/apple_pay_on_the_web/…help.apple.com/xcode/mac/current/#/…
      • 我在看截图时印象深刻,即“您的浏览器或设备不支持 Apple Pay...”是问题,所以我建议禁用 Javascript。
      • 我认为这很好,因为当我切换到 SfSafariViewController 时,Apple Pay 提示会按预期显示。
      猜你喜欢
      • 2017-10-26
      • 1970-01-01
      • 2016-10-15
      • 2020-08-14
      • 1970-01-01
      • 2015-09-19
      • 2021-04-05
      • 2019-03-15
      • 2020-12-11
      相关资源
      最近更新 更多