Откуда вызывать логику Touch ID? - PullRequest
0 голосов
/ 06 мая 2019

Я новичок в iOS.Я пытаюсь локальную структуру аутентификации в приложении.Мой поток приложений похож на то, что когда пользователь открывает приложение, он может видеть заставку, затем, если он новый пользователь, он перенаправляет на экран входа в систему, а затем на экран панели инструментов.При входе в систему, если он нажимает кнопку «Запомнил меня», в следующий раз, когда пользователь откроет приложение, он будет напрямую перенаправлен на Dashboard.

Я просто не понимаю, на каком экране я добавляю логику authenticationWithTouchID.В открытом приложении я хочу показать всплывающее окно TouchID, чтобы пользователь мог проходить проверку подлинности и перенаправлять на панель управления.

Обновление: 1

Я проверяю, помните, что это правдаили нет в didFinishLaunchingWithOptions() из AppDelegate и, соответственно, я использовал для открытия конкретного UIViewController.Таким образом, только в этом же методе я проверяю, включен ли у пользователя сенсорный идентификатор или нет, если пользователь аутентифицируется для сенсорного идентификатора, тогда я показываю всплывающее окно, перенаправляющее обычно на панель инструментов.Это правильный подход?И еще одна вещь, которую я хочу спросить, - это когда пауза приложения нажимает кнопку «Домой», и если я хочу снова показать touch id, когда приложение снова открывается для вызова этого метода аутентификации.Это пойдет на applicationWillEnterForeground()?

Обновление: 2

Содержимое панели инструментов становится видимым в фоновом режиме, когда Touch ID открывается с applicationWillEnterForeground()

Ответы [ 3 ]

1 голос
/ 06 мая 2019

Исходя из моего опыта, вам нужно разделить как authentication связанный, так и другой UIViewController код.Я предлагаю создать блочный singleton класс для Bio-matric authentication (TouchID и FaceID)

Обратитесь к удивительной библиотеке блочной аутентификации BiometricAuthentication для справки.

Я предлагаю сохранить весь код, связанный с аутентификацией, на экране Login.

См. Ниже код для автоматического входа в систему.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if isRemmberMe{
        BioMetricAuthenticator.authenticateWithBioMetrics(reason: "") { (result) in

            switch result {
            case .success( _):
                print("Redirect into dashboard screen")
            case .failure(let error):
                print("Authentication Failed")
            }
        }
    }
}

Если вы используете этот подход, то нет необходимости писать дополнительный код в файле AppDelegate.swift, потому что ваш rootViewController всегда экран входа в систему.Просто установите свой начальный экран входа в систему контроллера с storyboard

Обновление: 1

Вопрос: Это правильный подход?

Да, это правильный способ сделать это, но помните о централизации кода для биометрической аутентификации.

Вопрос: Как я могу управлять TouchIDИЛИ FaceID Управление, если состояние приложения изменилось

Вы можете перейти с applicationWillEnterForeground ИЛИ applicationDidBecomeActive, если состояние приложения было изменено.Еще одна вещь, которую я хотел бы упомянуть выше, оба метода также вызываются, когда пользователь открывает приложение заново.Если вы хотите полностью ограничить доступ пользователя к контенту приложения, перейдите с applicationWillEnterForeground(), в противном случае вы можете перейти с applicationDidBecomeActive

Обновление: 2

Вам нужно добавить фиктивное размытие UIView вручную, если вы хотите ограничить содержимое приложения.

Код:

let blurEffect = UIBlurEffect(style: .Light)
let blurVisualEffectView = UIVisualEffectView(effect: blurEffect)
blurVisualEffectView.frame = view.bounds
self.view.addSubview(blurVisualEffectView)

Удалить при успешной аутентификации

blurVisualEffectView.removeFromSuperview()
0 голосов
/ 06 мая 2019

Вы должны хранить true в userDefault, где пользователь успешно завершен. Полностью авторизован

например UserDefaults.standard.setValue("true", forKey: "isLogin")

В AppDelegate.Swift

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        let islogin = UserDefaults.standard.bool(forKey: "isLogin")

        if islogin
        {
           self.NextViewController(storybordid: "DashBoardViewIdentifier")
        }
        else
        {
            self.NextViewController(storybordid: "LoginViewIdentifier")
        }
        return true
    }

Итакже создайте method в AppDelegate.swift

   func NextViewController(storybordid:String)
    {

        let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let exampleVC = storyBoard.instantiateViewController(withIdentifier:storybordid )
        let nav = UINavigationController(rootViewController: exampleVC)
        nav.navigationController?.setNavigationBarHidden(true, animated: false)
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = nav
        self.window?.makeKeyAndVisible()
    }

0 голосов
/ 06 мая 2019

Сохраните, если ваш пользователь уже вошел в систему, в ваших UserDefaults и продолжите запуск приложения следующим образом:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    self.window = UIWindow(frame: UIScreen.main.bounds)
    if !isLoggedIn {
        let loginController = LoginController()
        self.window?.rootViewController = loginController
        self.window?.makeKeyAndVisible()
        return true
    }
    let authController = AuthenticaeController()
    self.window?.rootViewController = authController
    self.window?.makeKeyAndVisible()

    return true
}

, где isLoggedIn bool должно быть вашим сохраненным значением из ваших UserDefaults.

...