Давайте воссоздадим кнопку «Войти через Apple» для нашего приложения в SwiftUI. Перед этим давайте разберемся с условиями
SwiftUI - это инновационный, исключительно простой способ создания пользовательских интерфейсов на всех платформах Apple с помощью Swift. Создавайте пользовательские интерфейсы для любого устройства Apple, используя всего один набор инструментов и API . - Официальная документация Apple
Самое приятное, что вы можете интегрировать свои представления с компонентами из фреймворков UIKit, AppKit и WatchKit. Короче говоря, SwiftUI упростил создание пользовательских интерфейсов.
Вход с помощью Apple - это быстрый, простой и более конфиденциальный способ входа в приложения и веб-сайты, используя уже имеющийся у вас Apple ID. - Официальная документация Apple
Почему важен вход в Apple?
- Apple скоро заставит каждого разработчика использовать вход через Apple в обязательном порядке. В общем, другого выхода у вас нет.
- Вход в Apple с самого начала основан на уважении конфиденциальности пользователей и обеспечении их контроля над своей личной информацией.
- Вместо того, чтобы использовать учетную запись в социальной сети или заполнять формы и выбирать другой новый пароль, просто нажмите кнопку «Войти с помощью Apple», просмотрите свою информацию и быстро и безопасно войдите в систему с помощью Face ID, Touch ID или пароля устройства.
- Вход через Apple не отслеживает и не профилирует пользователей, поскольку они предпочитают приложения и веб-сайты, и Apple сохраняет только ту информацию, которая необходима для того, чтобы они могли войти в систему и управлять вашей учетной записью.
Без дальнейших ожиданий давайте разберемся, как можно реализовать вход с помощью Apple в SwiftUI. Прежде чем начать, вам необходимо добавить возможность «Войти через Apple» в Xcode. Для этого
- Нажмите на свой проект
- Перейти к подписке и возможностям
- Щелкните знак «+», найдите «Войти через Apple» и выберите его.
Вот и все, мы готовы реализовать вход через Apple. Теперь давайте посмотрим на код.
SwiftUI не предоставляет AppleIdButton, так что давайте с этого начнем. Нам нужно будет закрутить одну из них самим. Здесь мы просто обертываем ASAuthorizationAppleIdButton, чтобы мы могли использовать его в SwiftUI.
На этом этапе в ContentView вы должны иметь возможность отобразить официальную кнопку Apple следующим образом:
Button (action: {}) { AppleIdButton() } //May be style it a little AppleIdButton().background(Color.primary).clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)).padding(7).frame(width: UIScreen.main.bounds.width - 100, height: 65)
Вернемся к AuthenticationService. Убедитесь, что вы импортировали AuthenticationServices. Он обеспечивает основу для обработки запросов на авторизацию. Далее нам нужно поработать над Координатором. Этот координатор предоставляет механизм для запроса Apple зарегистрировать нового пользователя или войти в систему существующего пользователя.
Давайте внимательно посмотрим на этот код:
- Сначала мы создаем запрос с AppleIDProvider и запрашиваем полное имя и адрес электронной почты пользователя. Здесь следует отметить, что это необязательно, и вы можете выбрать, хотите ли вы хранить эти данные или нет.
- Затем мы инициализируем ASAuthorizationController с запросом, который мы создаем на первом шаге, и выполняем наш запрос на регистрацию пользователя или вход в систему.
- Нам нужен доступ к протоколу ASAuthorizationControllerDelegate, чтобы иметь доступ к функции делегирования для получения подтверждения (успех или неудача здесь)
- didCompleteWithAuthorization: после успешного входа пользователя в систему он проверяет, являются ли учетные данные ASAuthorizationAppleIdCredential. Если да, эта функция возвращает имя и адрес электронной почты пользователя. Хотя вы должны хранить это в связке ключей (более безопасно), мы просто сохраняем его в UserDefaults.
- didCompleteWithError: важно обработать этот случай, когда вход не выполняется и мы возвращаем локализованное описание ошибки.
Если вы заметили, что мы сохранили пользователя в нашем UserDefault. Поэтому, прежде чем попасть сюда, мы должны проверить, вошел ли пользователь уже в систему. Это позволит пользователю оставаться в системе до тех пор, пока он не выберет выход вручную. Для этого мы напишем оболочку поверх getAppleRequest (), чтобы проверить, вошел ли уже пользователь в систему.
func getUserInfo() { if let userData = UserDefaults.standard.object(forKey: "user") as? Data, let userDecoded = try? JSONDecoder().decode(User.self, from: userData) { print("UserData: \(userDecoded)") user = userDecoded } }
Давайте немного очистим наш код, создав ViewModel, с которым наш ContentView может взаимодействовать:
Наконец, из нашего представления мы создаем AppleIdButton. Благодаря этому вы сможете перенаправить пользователя в свое приложение, если пользователь уже вошел в систему.
Вот и все! Теперь в ваше приложение встроена функция «Войти через Apple».
Спасибо за прочтение!