Какова роль callbackURLScheme в ASWebAuthenticationSession / SFAuthenticationSession?
Я очень удивляют не могу нормально любой более или менее ясное объяснение, как именно логика с callbackURLScheme (вкл. CompletionHandler) работает.
Да, в общем, очевидно, что у него что-то есть со схемой url, которую можно указать в файле plist, и с тем, как работает Deep Linking.
Однако,
как именно он связан с потоком ASWebAuthenticationSession/SFAuthenticationSession? Я имею в виду, ищет ли он аналогичный шаблон в URL-адресе браузера, и если он становится равным, он перехватывает ответ, закрывает окно браузера и возвращает доступ к приложению?
что, если не определена схема URL-адреса, но я просто использую связанные домены? Должен ли я указывать URL-адрес "возврата", передаваемый на сервер, или в любом случае должна быть схема?
что, если я передам ему null? В Интернете есть заметки о том, что каким-то волшебным образом он привязывается к файлу plist, но, опять же, нет специальной документации по этому поводу.
Очень ценю ответы!
1 ответ
ASWebAuthenticationSession действительно немного окутан тайной. Заголовок Swift может пролить свет. (Перейти к определению: Command + щелкните правой кнопкой мыши класс ASWebAuthenticationSession в Xcode)
По завершении служба отправит URL-адрес обратного вызова с маркером проверки подлинности, и этот URL-адрес будет передан приложению с помощью ASWebAuthenticationSessionCompletionHandler. URL-адрес обратного вызова обычно имеет настраиваемую схему URL-адресов. Чтобы приложение могло получить URL-адрес обратного вызова, ему необходимо либо зарегистрировать настраиваемую схему URL-адресов в своем файле Info.plist, либо задать для схемы аргумент callbackURLScheme в инициализаторе.
Собственно мой тест показал, что на ios 14 работает как описано. Вам нужно либо зарегистрировать пользовательскую схему URL и предоставить nil для соответствующего аргумента, либо просто указать аргумент. Или оба. Завершение при успешном входе в систему вызывается, как и ожидалось. Это не упоминается в документации с такими подробностями.