Я создал экран входа в свое приложение с помощью 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 Transfer Utility могут это сделать. Но моя проблема в том, что я не знаю, как сообщить AWSMobileClient о том, что пользователь вошел в систему. AWSMobileClient инициализируется в didFinishLaunching:withOptions
appDelegate следующим образом:
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, пытается найти, как связать этих двоих вместе, но безуспешно. Как я могу это сделать?