Apple Pay JS внутри WKWebView

Я изучаю, можно ли встроить Apple Pay JS / Web Payments API в WKWebView. У нас есть веб-приложение, встроенное в WKWebView, и мы хотели бы реализовать Apple Pay без моста через JavaScript.

Я собрал очень простой ViewController.swift пример, как показано ниже, используя Apple Pay в веб-демонстрации

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, поэтому это может быть проблема с реализацией.

Спасибо!


person robjmills    schedule 18.02.2019    source источник


Ответы (2)


К сожалению, вы можете использовать ApplePay только с SFSafariViewController; это означает, что даже если отображается кнопка ApplePay, процесс транзакции не позволит вам продолжить, поскольку ApplePay не поддерживается в WkWebview.

person deniz yalcin    schedule 05.11.2019

Отредактировано

Обратитесь: - 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
    }
person MShah    schedule 18.02.2019
comment
это устраняет ошибку, но нажатие кнопки не запускает Apple Pay. Думаю, здесь тоже используется JS. - person robjmills; 18.02.2019
comment
Можете ли вы подтвердить, настроили ли вы среду на Xcode для использования Apple Pay? Если нет, обратитесь по этим ссылкам: - developer.apple.com/documentation/apple_pay_on_the_web/ и help.apple.com/xcode/mac/current/# / - person MShah; 19.02.2019
comment
У меня сложилось впечатление, глядя на снимок экрана, т.е. ваш браузер или устройство не поддерживает Apple Pay ... была проблема, поэтому я предложил отключить Javascript. - person MShah; 19.02.2019
comment
Я предполагаю, что все в порядке, поскольку, когда я переключаюсь на SfSafariViewController, подсказка Apple Pay появляется, как и ожидалось. - person robjmills; 19.02.2019