ASWebAuthenticationSession CompletionHandler не вызывается при проверке подлинности Strava
Обработчик завершения сеанса ASWebAuthenticationSession не вызывается при нажатии кнопки авторизации в Strava Authentication. ниже приведен мой код (используется Использование ASWebAuthenticationSession для подключения к учетной записи Strava не позволяет реализовать эту ссылку.)
import AuthenticationServices
class LinkAppsViewController: UIViewController, ASWebAuthenticationPresentationContextProviding{
func authenticate()
{
let string = self.createWebAuthUrl()
guard let url = URL(string: string) else { return }
self.authSession = ASWebAuthenticationSession(url: url, callbackURLScheme: "localhost/", completionHandler:
{
url, error in
})
self.authSession!.presentationContextProvider = self
self.authSession?.start()
}
fileprivate func createWebAuthUrl() -> String
{
var url = String.init()
url.append("https://www.strava.com/oauth/mobile/authorize")
url.append("?client_id=<client id>")
url.append("&redirect_uri=http://localhost/exchange_token")
url.append("&response_type=code")
url.append("&approval_prompt=force")
url.append("&grant_type=authorization_code")
url.append("&scope=activity:write,activity:read_all")
return url
}
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
print(session)
return view.window!
}
}
2 ответа
Я получил это, изменив свой код вроде..
fileprivate func createWebAuthUrlStrava() -> String
{
var url = String.init()
url.append("https://www.strava.com/oauth/mobile/authorize")
url.append("?client_id=<client id>")
url.append("&redirect_uri=abcd://localhost/exchange_token")
url.append("&response_type=code")
url.append("&approval_prompt=force")
url.append("&grant_type=authorization_code")
url.append("&scope=activity:write,activity:read_all")
return url
}
info.plist
+ Изменить <client id>
с вашим идентификатором клиента и abcd с именем вашего приложения..
Я думаю, вы правы, изменив формат схемы URL-адресов на. Однако ценность
callbackURLScheme
параметр, передаваемый при инициализации, должен быть таким же, как эта схема URL(
abcd
). Поэтому ваш код следует изменить следующим образом:
self.authSession = ASWebAuthenticationSession(url: url, callbackURLScheme: "abcd", completionHandler:
{ url, error in
})
Вы также можете обратиться к официальной документации Apple о том, как использовать
ASWebAuthenticationSession
.