Я использую логин strava в своем приложении ios.После аутентификации strava я не могу вернуться к своему приложению

#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-адресов, чтобы позволить ОС распознавать перенаправление.

Вот несколько шагов, которые должны помочь:

  1. Зарегистрируйте схему URL в вашем info.plist. Для этого добавьте уникальную запись LSApplicationQueriesSchemes в info.plist, например, «MyApp». Если у вас еще нет LSApplicationQueriesSchemes info.plist в качестве записи, вам нужно будет создать это (должно быть массивом).

  2. Зарегистрируйте домен обратного вызова авторизации в Strava по адресу https://www.strava.com/settings/api , в соответствии с myApp.com .

  3. Назначьте схему обратного вызова в соответствии с зарегистрированной схемой 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()
    }
}