Думаю у многих уже после WWDC 2019 на слуху Sign In with Apple (кратко SIWA). В материале я расскажу с какими конкретно подводными камнями пришлось столкнуться при интеграции этой штукенции в наш лицензионный портал. Данная статья не совсем для тех, кто только решил разобраться с SIWA (для них я дал ряд ознакомительных ссылочек в конце текста). В этом материале, скорее всего, многие найдут ответы на вопросы, которые могут возникнуть при интеграции нового сервиса Apple.
Apple не позволяет кастомные редиректы
Собственно, ответа на этот вопрос я до сих пор не вижу на девелоперских форумах. Суть в следующем: если вы захотите воспользоваться SIWA JS API, т.е. не работать через нативный SDK в виду отсутствия такового по тем или иным причинам (не macOS/iOS или старая версия оных систем), то вам необходим свой публичный портал, иначе никак. Потому что на WWDR портале надо зарегистрировать и подтвердить то, что вы являетесь владельцем, свой домен и только на него можно нацепить допустимые с точки зрения Apple редиректы:
Что же делать, если есть желание перехватить редирект в приложении? Мы эту проблему решили крайне просто: завели на своем портале список допустимых редиректов для своих приложений, которые оные заказывают перед показом авторизационной страницы SIWA. И просто делаем пере-редирект с портала в приложение с данными, полученными от Apple. Просто и сердито.
Проблемы с e-mail
Давайте рассмотрим, как мы решали проблемы с e-mail пользователя. Во-первых, нет никакого REST API, позволяющего получить эту инфу с бэкенда — только клиент получает эти данные и может передать вместе с авторизационным кодом.
Во-вторых, информация об имени и e-mail пользователя передается лишь один раз, на самый первый логин пользователя в приложение через Apple, где пользователь выбирает опции шаринга своих персональных данных.
Сами по себе эти проблемы не прям критичные, если связь с социальным профилем была успешно создана на портале — идентификатор пользователя один и тот же и привязан к Team ID — т.е. он один для всех приложений вашей команды, интегрированных с SIWA. Но вот если логин был осуществлен через Apple, а дальше по пути произошла ошибка и связь на портале создана не была, то тут единственный вариант отправлять пользователя на appleid.apple.com, разрывать связь с приложением и пробовать снова. Собственно, проблема решается написанием соответствующей статьи KB и ссылкой на нее.
Следующая более неприятная проблема связана с тем, что Apple придумали новый концепт с proxy e-mail. В нашем случае, если пользователь уже был на лицензионном портале со своим настоящим мылом и при первом логине через Apple выбирает опцию скрыть e-mail, регистрируется новый аккаунт с этим proxy e-mail, в котором очевидно нет никаких лицензий, что ставит конечного пользователя в тупик.
Решение этой проблемы достаточно простое: т.к. идентификатор пользователь один и тот же в SIWA и не зависит от выбранных опций/приложения, в который производится sign in, то мы просто с помощью специального сценария позволяем переключить эту связку с Apple к другому аккаунту с настоящим мылом пользователя и тем самым «восстановить свои покупки». После этой процедуры пользователь начинает через SIWA попадать в другой аккаунт на портале и все у него работает правильно.
При Sign In через веб-портал нет иконки приложения
Для решения другой проблемы мы обратились за разъяснением к представителям Apple, делимся полученными знаниями:
https://forums.developer.apple.com/thread/123054
Т.е. смысл в следующем: во главе SIWA группы м.б. поставлено только macOS/iOS приложение, в которую уже добавляются нужные service IDs порталов. Соответственно, чтобы показывалась иконка у головного приложения д.б. опубликованные в App Store версии с media, прошедшими проверку в Apple. Иконка будет взята оттуда.
Соответственно, если у вас только портал и приложения из App Store нет, то красивой иконки не будет, но с именем приложения можно выкрутиться — при отсутствии media у главного приложения эта инфа берется из Description service ID:
Кол-во элементов в группе SIWA ограничено 5
У этой проблемы нет на данный момент решения, кроме как использовать множество групп, если вам не хватает 6 идентификаторов: 1 головного приложения и 5 зависимых, то при попытке регистрации следующего вы увидите такое сообщение:
Мы создали группы для нашего лицензионного портала и для каждого из приложений, которые оперируют с этим порталом. По поводу ограничения слотов мы уже завели радар в Apple и ожидаем их ответ.
Полезные ссылки
Cамый полезный линк, на мой взгляд, по которому я все делал по сути. Полуполезная дока от Apple здесь.
Enjoy! Вопросы, мысли, идеи и предложения принимаются в комментариях.