Можно программно нажимать на текстовые поля и вставлять имя пользователя / пароли?Логин не сохранен в связке ключей - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь помочь моему боссу и коллегам с приложением iOS 12 Swift, чтобы помочь всем нам лучше управлять запасами, находясь в цехе.

Все это работает благодаря использованию технологии считывания штрих-кода / QR-кода, поставляемой в комплекте с iOS 12.

Веб-страница, используемая для входа в службу инвентаризации, использует обычную технологию http ипоэтому iOS (кажется) не предлагает мне средства, позволяющие мне сохранять / восстанавливать пароль в / из Цепочки для ключей.Однако я могу сохранить информацию для входа в систему, когда захожу на сайт через мой Mac.Я подтвердил, что информация для входа в систему была сохранена в цепочке для ключей Mac (которая используется совместно с iPhone через iCloud).

Веб-страница предупреждает, что пароль (на любой платформе) будет отправлен в незашифрованном виде.

Я уже адаптировал часть кода на https://www.appcoda.com/barcode-reader-swift/.

У меня нет полной учетной записи разработчика Apple, поэтому в настоящее время это не производственное приложение.

Основное различие между кодом, предоставленным www.appcoda.com/barcode-reader-swift и моим, почти во всем, заключается в функции func launchApp файла «QRSwiftController.swift».Небольшие изменения, чтобы помочь улучшить читаемость и удобство использования.Использование Safari View Controller делает все более единым внутри одного приложения и т. Д.

 func launchApp(decoded_barcode: String) {

    if presentedViewController != nil {
        return
    }

    AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

    let result = decoded_barcode.replacingOccurrences( of:"[^0-9]", with: "", options: .regularExpression)


    let startOfURL: String = "http://xxx.webname.com/deploy/artikel.php?nummer="
    let fullURL = startOfURL + result


    let alertPrompt = UIAlertController(title: "Open App", message: "You're going to open \(fullURL)", preferredStyle: .actionSheet)
    let confirmAction = UIAlertAction(title: "Confirm", style: UIAlertActionStyle.default, handler: { (action) -> Void in

        if let url = URL(string: fullURL){
            let safariVC = SFSafariViewController(url: url)
            self.present(safariVC, animated: true, completion: nil)

        }

    })

    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil)

    alertPrompt.addAction(confirmAction)
    alertPrompt.addAction(cancelAction)

    present(alertPrompt, animated: true, completion: nil)

}

Даже когда я захожу на веб-сайт управления запасами через обычный Safari на моем iPhone, мне каждый раз предлагается ввести имя пользователя / пароль.

Login

Альтернативный URL для экрана входа в систему https://imgur.com/a/S2EMYcE

Можно ли как-нибудь обойти эту проблему, автоматизировав нажатие текстовых полей для имени пользователя /пароль (затем вставив информацию) и затем нажав «Войти» ??

Я уже искал решения для Stackoverflow, но они кажутся чрезвычайно сложными и / или больше не действительны для Swift 4.

Спасибо!

Допустим общие имена пользователей и пароли, такие как 'user' и 'password'.

1 Ответ

0 голосов
/ 25 марта 2019

В итоге (в качестве обходного пути) я только что получил Google Chrome (на iOS), чтобы выполнить всю ослиную работу (похоже, он готов сохранить пароль для этого сайта для последующего поиска).

if URL(string: fullURL) != nil {
    //let safariVC = SFSafariViewController(url: url)
    //self.present(safariVC, animated: true, completion: nil)
UIApplication.shared.openURL(NSURL(string: fullURL)! as URL) 
}
...