Parallels corporate blog
Reverse engineering
Development for MacOS
Reading room
1 October 2019

Как мы в Parallels покоряли Sign In with Apple



Думаю у многих уже после 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! Вопросы, мысли, идеи и предложения принимаются в комментариях.

+25
5k 23
Leave a comment
Top of the day