WKWebView обнаруживает изменение страницы входа или изменение направления - PullRequest
0 голосов
/ 06 августа 2020

У меня есть быстрое приложение WKWebView с аутентификацией пользователя, приложение позволяет пользователям регистрировать свои устройства, собирая идентификатор поставщика устройства. Когда пользователь запускает мобильное приложение, оно проверяет, зарегистрировано ли мобильное устройство, а затем проверяет данные для входа, связанные с зарегистрированным устройством. Пока все хорошо.

Моя проблема в том, что по истечении сеанса PHP пользователи будут перенаправлены на страницу входа. Если пользователь закроет приложение и снова откроет его, он зарегистрирует пользователя без повторного ввода данных для входа. PHP тайм-аут сеанса не может быть изменен из-за политики компании.

Я хотел бы знать, смогу ли я обнаружить изменение URL-адреса страницы входа и отправить идентификатор поставщика устройства с URL-адресом страницы входа, аналогичным процесс запуска приложения. Итак, по истечении сеанса PHP пользователи будут автоматически входить в систему без необходимости повторно вводить свои учетные данные.

Вот текущий код, который я использую, и это мое первое приложение IOS , и у меня очень ограниченный опыт в области мобильного программирования, и последние пару дней я безуспешно искал. Мы высоко ценим образцы кодов.

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {

    var webView: WKWebView!
    
    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        webView.navigationDelegate = self
        view = webView
    }
        
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // get device vendor id
        let mystring = UIDevice.current.identifierForVendor!.uuidString
        let webUrl = "https://www.mydomain/login/" + mystring
        
        let myURL = URL(string: webUrl)
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }
    
    func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo,
                 completionHandler: @escaping (Bool) -> Void) {

        let alertController = UIAlertController(title: nil, message: message, preferredStyle: .actionSheet)

        alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in
            completionHandler(true)
        }))

        alertController.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (action) in
            completionHandler(false)
        }))

        present(alertController, animated: true, completion: nil)
    }
  
}

1 Ответ

0 голосов
/ 06 августа 2020

Вы можете использовать метод webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) протокола WKNavigationDelegate, чтобы определить, изменился ли URL на логин URL, и выполнить требуемую задачу по ручному выходу пользователя, например, удалив vendor id, который вы сохранили.

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
    //...
    func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
        if let urlString = navigationResponse.response.url?.absoluteString {
            print(urlString)
            // check if urlString == "loginUrl" and perform required task here
        }
        decisionHandler(.allow)
    }
}
...