Компания Apple опубликовала следующую новость 4 марта 2020 г.: “Все новые приложения и апдейты должны соответствовать новым гайдлайнам ревью и интерфейса к 30 апреля (перенесено на июнь) 2020.”


И главным новшеством этих гайдлайнов является обязательное наличие рабочей кнопки “Sign in with Apple” (SIWA) для приложений, позволяющих логиниться через сторонние сервисы (Facebook, Google, Twitter и т.д.).



Казалось бы, всё просто, но есть нюансы >


А можно не делать “Sign in with Apple”?


Да, если выполняется одно из следующих условий:


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

Опыт компаний


На Хабре уже было несколько хороших статей про техническую сторону этого дела:



Некоторые пишут, что юзеры очень охотно жмакают новую кнопку, и даже связывают рост аудитории с реализацией SIWA.


Вот еще неплохой гайд от Aaron Parecki — https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple


Пикантные моменты


SIWA поддерживается с iOS 13 и iPadOS 13.1, так что есть повод попросить у компании новый мощный айфон для тестирования. Эппл — это особенная компания, и кнопка логина через эппл получилась у них особенной. При кажущейся простоте задачи, рекомендую обратить внимание на следующие вещи.


Пользовательские данные посылаются только один раз


Sign in with Apple получает имя, фамилию и имейл пользователя только один раз при первом логине. У сервера нет доступа к этим данным. При последующих попытках входа приходят только authorizationCode из ASAuthorizationAppleIDCredential.
Источник: Sports.ru

Поэтому на клиентской стороне нужно хранить данные пользователя до тех пор, пока регистрация на сервере не завершится успешно.


Ключик максимум на 6 месяцев


Максимальный срок, на который можно сгенерировать client_secret JWT токен равен 6 месяцам.
Совет — встройте процедуру перегенерации токена в свой пайплайн, а также делайте ключи на 1 месяц, чтобы обеспечить сесурити и исключить возможность протухания ключа на проде.
Можно также сделать хелс чек, который будет проверять валидность или срок действия ключа.


Функция Logout отсутствует


У SOWA нету функции logout в классическом понимании этого слова. Библиотека не хранит никакие данные, в отличие от других библиотек входа, поэтому нет необходимости стирать данные, полученные при логине.
Источник: Sports.ru

Юзер может скрыть свой имейл и выбрать себе имя



Пользователь может выбрать опцию Hide my email. В этом случае вы получите его прокси имейл, созданный эпплом вида random_chars@privaterelay.appleid.com. По умолчанию, на такие адреса нельзя ничего отправить, не сделав дополнительных телодвижений.


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


А еще в гайдлайнах есть фраза “Avoid asking for a personal email address when people supply a private relay address.” В конце материала есть вопрос к читателям на этот счет.


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


И конечно же не забывайте добавить Apple ID, имя, фамилию и имейл в свои PII и GDPR процедуры, они же у вас есть.


Не совсем полная документация


Скорее всего придется попотеть с client_secret. В этой статье подробно расписано, как его генерировать.


Только трушный яблочный дизайн


Только попробуйте перевернуть яблоко или сделать отступы чуть больше — сразу в бан.


Вот дизайн спека —
https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple/overview/buttons/


Из интересных моментов:


  • Нельзя юзать просто лого как кнопку
  • Высота лого должна соответствовать высоте кнопки
  • Нельзя обрезать лого
  • Нельзя добавлять вертикальный отступ
  • Нельзя кастомизировать цвета лого
  • Использовать только шрифт системы
  • Размер шрифта должен составлять 43% от высоты кнопки

Для читателей в конце материала есть пример и вопрос на эту тему.


SIWA не только для яблочных девайсов


Можно добавить вход через эппл для веб платформ и даже Андроид приложений, используя JavaScript API.


Вопросы знатокам


1 — Дизайн кнопки


Пропустит ли аппстор проверка кнопку с таким дизайном?



Остальные кнопки в нашем приложении имеют именно такой стиль, поэтому плоская кнопка, выполненная по всем гайдлайнам смотрелась бы как инородный элемент.


2 — Какие данные показывать


У пользователя был аккаунт в приложении и имя с имейлом мы взяли с его фейсбук аккаунта (фейсбук явно это спрашивает и пользователь дает согласие). Теперь этот же пользователь привязал к своему аккаунту Apple Sign in, где указал другое имя и выбрал опцию “hide my email”.


Какие данные указывать в приложении — фейсбучные или эппловские?


3 — Как узнать, что все в порядке


Вот сделали мы SIWA — а как быть уверенными, что все по гайдлайнам, и что приложение пройдёт проверку в аппсторе после 30 июня (но узнать это уже сейчас)?


Может, на Хабре есть кто-то из официальных представителей…


P.S.


Надеюсь, что эта новость была для вас похожа на записку от Капитана Очевидность, и вы всё уже давно реализовали.


А если нет … расслабьтесь — у вас есть ещё 2 несколько спринтов!



Автор материала — Александр Зинчук, продакт менеджер. Новостной материал опубликован в блоге компании Alconost Inc. с разрешения автора.


Alconost занимается локализацией игр, приложений и сайтов на 70 языков. Мы также делаем рекламные и обучающие видеоролики.
Подробнее