Войдите через Apple — внедрите это в свое приложение!

Опубликовано: 2020-01-14

Sign In With Apple — новая функция, представленная Apple на WWDC в прошлом году, теперь доступна в iOS 13. Эта функция предлагает простую и безопасную регистрацию учетной записи и вход в приложение или на веб-сайт. Вместо того, чтобы заполнять регистрационные формы или входить в систему через социальные сети, теперь вы можете создать учетную запись и войти в систему, используя свой Apple ID, и подтвердить с помощью Face ID, Touch ID или кода доступа.

Краткое описание входа с помощью Apple:

  • Быстрая и простая настройка учетной записи и вход в систему
  • Проверенные адреса электронной почты
  • Встроенная безопасность
  • По борьбе с мошенничеством
  • Кроссплатформенность ️
  • iOS 13+

В этой статье я сосредоточусь на базовой реализации Sign In With Apple на устройствах iOS без интеграции с веб-версией или интеграции с серверной частью.

Как работает функция «Войти через Apple»?

Войти через Apple — интерфейс

После нажатия «Войти через Apple» или «Продолжить через Apple» (зависит от того, какая кнопка была выбрана для реализации в приложении) появляется информационное окно с возможностями этого решения (второй скриншот). Затем после нажатия «Продолжить» мы получаем информацию о том, какие данные будут переданы владельцу приложения.

Здесь у нас есть два варианта регистрации учетной записи в приложении с помощью Sign In With Apple:

  1. При совместном использовании нашего адреса электронной почты — ваш реальный адрес электронной почты будет передан приложению или веб-сайту.
  2. Сокрытие нашего адреса электронной почты — ваш реальный адрес электронной почты не будет передан приложению или веб-сайту. Apple создаст для вас уникальное электронное письмо с доменом @privaterelay.appleid.com. Не беспокойтесь, все электронные письма от владельца приложения в любом случае будут пересылаться на ваш почтовый ящик, потому что электронные письма будут пересылаться на наш реальный адрес электронной почты. Владелец приложения будет знать только адрес электронной почты, сгенерированный с доменом Apple.

Выбрав один из вариантов и нажав «Продолжить», мы подтверждаем свой Apple ID, как и в случае разблокировки телефона, то есть с помощью Face ID, Touch ID или ввода кода доступа. На этом этапе в приложении/на сайте должна быть создана учетная запись с уникальным идентификатором пользователя.

Если вы использовали в приложении «Войти с Apple» раньше, вы можете просмотреть детали этого способа входа в настройки и прекратить использование этой функции. Для этого перейдите в «Настройки» > «Apple ID» > «Пароль и безопасность» > «Приложения, использующие ваш Apple ID» > «Выбрать приложение».


Как реализовать «Войти через Apple»?

Прочитав теоретическую часть «Войти через Apple», можно переходить к реализации

Войти через Apple — первый шаг внедрения

Прежде всего, вам нужно открыть «Подписание и возможности» в вашем проекте, затем нажать + и добавить возможность «Войти с Apple».

Войти через Apple — пошаговый процесс внедрения

Apple на программном выступлении WWDC разделила процесс реализации этой функции на четыре этапа. Все этапы описаны ниже.

1. Кнопка

В начале мы должны добавить кнопку на наш экран. Это должна быть кнопка ASAuthorizationAppleIDButton из среды AuthenticationService . Он доступен в двух цветах (белый и черный) с разными названиями. К кнопке мы должны добавить действие, которое будет вызываться после ее нажатия. Действие авторизации я описываю во втором пункте.

 импортировать службы аутентификации

кнопка let = ASAuthorizationAppleIDButton (тип: .signIn, стиль: .white)
button.addTarget(я, действие: #selector(appleIdButtonClicked), для: .touchUpInside)
stackView.addArrangedSubview(кнопка)

2. Авторизация ️

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

 @objc функция appleIdButtonClicked() {
    пусть запрос = ASAuthorizationAppleIDProvider().createRequest()
    request.requestedScopes = [.fullName, .email]

    пусть контроллер = ASAuthorizationController(authorizationRequests: [запрос])
    контроллер.делегат = я
    controller.presentationContextProvider = я
    контроллер.performRequests()
}

3. Проверка

После быстрой проверки по Face ID, Touch ID или паролю будет возвращен результат авторизации. При успешной авторизации метод didCompleteWithAuthorization вернет объект типа AppleIdCredential . Затем нужно проверить, являются ли они учетными данными типа ASAuthorizationAppleIdCredential — если да, то в этом объекте мы найдем все необходимые данные для настройки учетной записи в нашей системе, такие как уникальный идентификатор пользователя, полное имя и адрес электронной почты (который пользователь просил ранее). На этом этапе мы можем приступить к созданию учетной записи в нашей системе, предоставив только необходимую информацию. Если произойдет ошибка, она будет возвращена в методе didCompleteWithError , где мы можем обработать эту ошибку.

 func авторизацияконтроллер (контроллер: ASAuthorizationController, авторизация didCompleteWithAuthorization: ASAuthorization) {
    если пусть appleIDCredential=authorization.credential как? ASAuthorizationAppleIDCredential {
        // Создайте учетную запись в вашей системе.
    } иначе, если пусть passwordCredential = авторизация.учетные данные как? ASPasswordCredential {
        // Войдите, используя существующие учетные данные iCloud Keychain.
    }
}

func авторизацияконтроллер (контроллер: ASAuthorizationController, ошибка didCompleteWithError: Error) {
    распечатать (ошибка)
}

4. Обработка изменений

Вы должны быть готовы к тому, что пользователь, например, перестал использовать вход в приложение с помощью Apple ID. Это должно быть обработано должным образом после того, как пользователь перезапустит приложение.

Используя идентификатор пользователя, который мы получили во время регистрации учетной записи, мы можем получить текущее состояние учетных данных Apple ID, очень быстро вызвав метод getCredentialState . Этот метод может возвращать три состояния:

  • authorized — авторизованный пользователь, который может продолжать использовать приложение.
  • revoked — выйти из системы пользователя, и вы можете при желании привести его к экрану входа в систему, чтобы снова войти в систему.
  • notFound — означает, что пользователь ранее не использовал «Войти через Apple». На этом этапе также покажите пользователю экран входа в систему.

Вызов метода getCredentialState должен быть в AppDelegate в методе didFinishLaunchingWithOptions .

Кроме того, Apple предоставляет уведомление, в котором сообщается, когда учетные данные были отозваны, а затем мы должны обрабатывать его указанным выше способом для этого статуса.

 appleIDProvider.getCredentialState(forUserID: userId) {credentialState, ошибка в
    переключить CredentialState {
    случай .разрешенный:
        // Учетные данные Apple ID действительны.
    дело .аннулировано:
        // Учетные данные Apple ID отозваны, выйдите из системы.
    случай .notFound:
        // Учетные данные не найдены, поэтому покажите интерфейс входа.
    дефолт:
        ломать
    }
}

// Зарегистрируйтесь для уведомления об отзыве
NotificationCenter.default.addObserver(forName: NSNotification.Name.ASAuthorizationAppleIDProviderCredentialRevoked, 
                                       объект: ноль,
                                       очередь: ноль) { _ в
    // Выйти из системы, опционально подсказать, чтобы снова войти
}

После реализации всех четырех этапов в моем примере приложения все работает и выглядит так:

Реализован вход с помощью Apple

Должен ли я добавлять «Войти через Apple» в свое приложение?

Если ваше приложение использует сторонний метод входа, такой как Facebook, Google или LinkedIn, вы также должны добавить Sign In With Apple в соответствии с новыми рекомендациями. Если вы не добавите его, ваша заявка может быть отклонена и не будет рассмотрена Apple. Ниже ссылка на новость и цитата из гайдлайна.

Новые рекомендации по входу в систему через Apple — 12 сентября 2019 г. ️

Начиная с сегодняшнего дня, новые приложения, размещаемые в App Store, должны соответствовать этим правилам. Существующие приложения и обновления приложений должны последовать за ними к апрелю 2020 года.


Ниже представлены приложения, которые предлагают авторизоваться с помощью новой фичи Apple, естественно, их с каждым днем ​​все больше и больше.

Примеры приложений, использующих функцию входа через Apple

Вы можете проверить весь проект на моем GitHub здесь.

Источники:

  • https://developer.apple.com/videos/play/wwdc2019/706/
  • https://developer.apple.com/videos/play/wwdc2019/516
  • https://developer.apple.com/sign-in-with-apple/get-started/
  • https://developer.apple.com/news/?id=09122019b
  • https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple