сохранить почту в локальном хранилище safari после успешного входа - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь разработать расширение для сафари, используя сервисы swift safari. Проект создается из Mac OS, а затем расширения Safari. Я являюсь разработчиком javascript, но при разработке расширения safari нужно было использовать swift, но я не знаю, как сохранить данные в локальном хранилище safari. Я посмотрел следующую документацию, но не смог извлечь из нее пользу

https://developer.apple.com/documentation/safariservices/safari_app_extensions

вот код

import SafariServices


class SafariExtensionViewController: SFSafariExtensionViewController {


    @IBOutlet weak var passwordMessage: NSTextField!
    @IBOutlet weak var emailMessage: NSTextField!
    @IBOutlet weak var message: NSTextField!
    @IBOutlet weak var email: NSTextField!
    @IBOutlet weak var password: NSSecureTextField!
    static let shared = SafariExtensionViewController()
    override func viewDidLoad() {
        self.preferredContentSize = NSSize(width: 300, height: 250)
        message.stringValue = ""
        emailMessage.stringValue = ""
        passwordMessage.stringValue = ""
    }


    @IBAction func userLogin(_ sender: Any) {
        let providedEmailAddress = email.stringValue
        let providedPassword = password.stringValue
        let isEmailAddressValid = isValidEmailAddress(emailAddressString: providedEmailAddress)
        self.message.stringValue = ""
        emailMessage.stringValue = ""
        passwordMessage.stringValue = ""
        if isEmailAddressValid && providedPassword.count > 0 {
            let parameters = ["email": providedEmailAddress, "password": password.stringValue]
            let URI = URL(string: "https://api.production.navihq.com/auth/sign_in")
            let session = URLSession.shared
            var request = URLRequest(url: URI!)
            request.httpMethod = "POST"
            do {
                request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
            } catch let error {
                print(error.localizedDescription)
            }
            request.addValue("application/json", forHTTPHeaderField: "Content-Type")
            let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

                guard error == nil else {
                    return
                }

                guard let data = data else {
                    return
                }

                do {
                    //create json object from data
                    if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
                        if let httpResponse = response as? HTTPURLResponse { 
                            if (httpResponse.statusCode >= 200 && httpResponse.statusCode < 300) {
                                self.message.stringValue = "Login Successful"
                                // i want to store the email in safari local storage here
                            } else {
                                self.message.stringValue = "Invalid Credentials"
                            }
                        }
                    }
                } catch let error {
                    print(error.localizedDescription)
                }
            })
            task.resume()
        } else {
            emailMessage.textColor = NSColor.red
            emailMessage.stringValue = "Invalid Email"
        }
    }

}

Не: я не использую IOS. Я пользуюсь сафарисервисами.

1 Ответ

0 голосов
/ 01 ноября 2018

Думаю, вам следует использовать Возможность обмена сообщениями между расширением приложения Safari и внедренным скриптом. Например, отправить сообщение из внедренного скрипта в приложение ext. когда DOMContentLoaded сработал и отправил ему ответ с необходимыми данными (в настоящее время электронная почта) для установки в локальное хранилище браузера с помощью введенного JS.

Надеюсь, это поможет!

...