Запили Sign in with Apple, или 30 апреля твоё приложение превратится в тыкву

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

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

5bkjyremvwmehqmqxhjc0giur6a.png

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


А можно не делать «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. Поэтому на клиентской стороне нужно хранить данные пользователя до тех пор, пока регистрация на сервере не завершится успешно.


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

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


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

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


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

2bejqpqsuo06mremycqhedgzgwc.jpeg

Пользователь может выбрать опцию 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 — Дизайн кнопки

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

4qfqw6swvedfk3mrw1jwxfiey9i.png

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


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

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

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


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

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

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


P.S.

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

А если нет … расслабьтесь — у вас есть ещё целых два спринта!

n-ktddf1znjg5usaacx7jdqnxbg.jpeg

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

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

© Habrahabr.ru