Я создал экран входа в систему для своего приложения, используя AWSCognitoAuth, точно так же, как в одном из предоставленных примеров (https://github.com/awslabs/aws-sdk-ios-samples/tree/master/CognitoAuth-Sample). Это работает нормально - он показывает экран входа в систему в случае SFSafariViewController
, когда пользователь просто входит в системупри использовании обычного имени пользователя + пароль или через Facebook или Google. Поэтому после этой аутентификации я получаю токены доступа и обновления, которые затем могу использовать для извлечения данных из моего API, который направляется через AWS API Gateway. Соответствующий AWS API Gatewayмаршруты настроены на использование авторизации «Пулы пользователей» вместо «IAM».
Но теперь мне нужно загрузить некоторые файлы из корзины S3, которая не является общедоступной. Так что нужно сделать, чтобыполучить временные учетные данные AWS и получить к ним доступ к корзине. Библиотека AWSMobileClient вместе с утилитой переноса S3 могут это сделать. Но моя проблема в том, что я не знаю, как сообщить AWSMobileClient о том, что у пользователя теперь естьвошедший в систему .AWSMobileClient инициализируется в didFinishLaunching:withOptions
lik приложения.Вот что:
let serviceConfiguration = AWSServiceConfiguration(
region: .EUWest1,
credentialsProvider: AWSMobileClient.sharedInstance().getCredentialsProvider()
)
//create a pool
let configuration = AWSCognitoIdentityUserPoolConfiguration.init(clientId: CognitoIdentityUserPoolAppClientId, clientSecret: CognitoIdentityUserPoolAppClientSecret, poolId: CognitoIdentityUserPoolId)
AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: configuration, forKey: AWSCognitoUserPoolsSignInProviderKey)
AWSServiceManager.default().defaultServiceConfiguration = serviceConfiguration
AWSFacebookSignInProvider.sharedInstance().setPermissions(["public_profile", "email"])
AWSSignInManager.sharedInstance().register(signInProvider: AWSFacebookSignInProvider.sharedInstance())
return AWSMobileClient.sharedInstance().interceptApplication(
application,
didFinishLaunchingWithOptions: launchOptions)
Дело в том, что когда я полностью закрываю приложение после входа в AWSCognitoAuth и снова открываю его, AWSMobileClient каким-то образом находит сеанс, и учетные данные выбираются правильно, а файл из корзины получаетзагружен.Но мне нужно как-то вызвать это вручную после того, как пользователь войдет в систему, я не могу заставить пользователя выйти и снова открыть приложение, не в 2018 году ... Я отлаживал это сейчас в течение долгого времени и копался в платформе AWSMobileClient,пытаясь найти, как соединить эти два вместе, но безуспешно.Как я могу это сделать?