#ios #swift #authentication #redirect #strava
#iOS #swift #аутентификация #перенаправление #strava
Вопрос:
Я использовал эту библиотеку. https://github.com/mpclarkson/StravaSwift
Мой URL обратного вызова перенаправляет меня на любую ссылку браузера, но не перенаправляет меня на мое приложение.Как я могу перенаправить обратно в свое приложение после аутентификации из strava?
Ответ №1:
OP Упомянул использование этого GitHub cocoa pods -> https://github.com/mpclarkson/StravaSwift
используя пример приложения в проекте GitHub, ниже приведено то, что необходимо для перенаправления обратно в приложение после аутентификации Strava OAuth.
info.plist
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>com.stravaswift.ios</string>
<key>CFBundleURLSchemes</key>
<array>
<string>breakaway</string> <--- This is my App Name
</array>
</dict>
</array>
Обратите внимание, что в соответствии с readme.md файл для этой страницы проекта вам также понадобится это
<key>LSApplicationQueriesSchemes</key>
<array>
<string>strava</string>
</array>
Затем в AppDelegate.swift (также в соответствии с readme.md )
let config = StravaConfig(
clientId: <YOUR_CLIENT_ID>,
clientSecret: <YOUR_CLIENT_SECRET>,
redirectUri: "breakaway://breakaway701849232.wordpress.com",
scopes: [.activityReadAll,.activityWrite]
)
Редактировать для IOS14.5 / Xcode 12.5 Из-за изменений в ASWebuthentitor https://developer.apple.com/forums/thread/679251 ) Я получаю ошибки с вышеизложенным. Перенаправление теперь изменено на следующее
let config = StravaConfig(
clientId: <YOUR_CLIENT_ID>,
clientSecret: <YOUR_CLIENT_SECRET>,
redirectUri: "breakaway://breakaway701849232.wordpress.com".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!,
scopes: [.activityReadAll,.activityWrite]
)
Обратите внимание, что перенаправление является «отколовшимся»: // «breakaway701849232.wordpress.com »
где :
breakaway — мое перенаправление
breakaway701849232.wordpress.com — мой домен (который вводится в API Strava для моего приложения)
ПРИМЕЧАНИЕ: Одна ошибка, с которой я столкнулся, заключалась в том, что области видимости на самом деле представляют собой массив, разделенный запятыми. Я продолжал получать ошибки, используя пример приложения, в котором перечислены все действия, но это было потому, что я не включил «ReadAll» в область видимости (моя цель — загрузить файлы TCX в Strava).
Комментарии:
1. С Xcode 12.5 и IOS 14.6 перенаправление уже становится проблемой. Ошибка может быть найдена здесь developer.apple.com/forums/thread/679251
Ответ №2:
Чтобы перенаправить strava обратно в ваше приложение, вам необходимо зарегистрировать схему URL-адресов в вашем файле info.plist, а затем использовать эту схему URL-адресов, чтобы позволить ОС распознавать перенаправление.
Вот несколько шагов, которые должны помочь:
-
Зарегистрируйте схему URL в вашем info.plist. Для этого добавьте уникальную запись
LSApplicationQueriesSchemes
в info.plist, например, «MyApp». Если у вас еще нетLSApplicationQueriesSchemes
info.plist в качестве записи, вам нужно будет создать это (должно быть массивом). -
Зарегистрируйте домен обратного вызова авторизации в Strava по адресу https://www.strava.com/settings/api , в соответствии с myApp.com .
-
Назначьте схему обратного вызова в соответствии с зарегистрированной схемой URL в вашем info.plist (с шага 1, «MyApp»). Для иллюстрации:
private var authSession: ASWebAuthenticationSession?
let appOAuthUrlStravaScheme = URL(string: "strava://oauth/mobile/authorize?client_id=1234321amp;redirect_uri=myApp://myApp.comamp;response_type=codeamp;approval_prompt=autoamp;scope=activity:write,readamp;state=test")!
let webOAuthUrl = URL(string: "https://www.strava.com/oauth/mobile/authorize?client_id=1234321amp;redirect_uri= myApp://myApp.comamp;response_type=codeamp;approval_prompt=autoamp;scope=activity:write,readamp;state=test")!
func authenticate() {
if UIApplication.shared.canOpenURL(appOAuthUrlstravaScheme) {
UIApplication.shared.open(appOAuthUrlstravaScheme, options: [:])
} else {
authSession = ASWebAuthenticationSession(url: webOAuthUrl, callbackURLScheme: "myApp") { url, error in
// Code after redirect
}
authSession?.start()
}
}