Поставщик учетных данных AWS Cognito Swift "вход в систему устарел: используйте AWSIdentityProviderManager"

Я пытаюсь разрешить пользователям регистрироваться в моем приложении с помощью Facebook и Amazon Cognito. Я нашел предыдущую документацию, в которой говорилось:

    let token = FBSDKAccessToken.currentAccessToken().tokenString
    var logins: NSDictionary = NSDictionary(dictionary: ["graph.facebook.com" : token])
    credentialsProvider.logins = [AWSIdentityProviderFacebook: token]

но я получаю сообщение о том, что имена входа устарели, и я использую протокол AWSIdentityProviderManager для предоставления имен входа поставщику учетных данных, что я не знаю, как это сделать. Я попытался, чтобы мой класс реализовал AWSIdentityProviderManager, и создал метод входа в систему, так как я заметил, что credentialsProvider имеет метод "setIdentiyProviderManagerOnce(self)", но я не знал, что делать в реализованном методе logins(), чтобы подключить токен facebook к учетным данным. менеджер.

Я посмотрел на примеры амазонок GitHub, но мне они не очень помогли

1 ответ

Решение

Посмотрев вокруг, я наконец-то узнал, что я не единственный с этой проблемой. AWS обновил свой SDK, не изменяя основную документацию. Решением является реализация AWSCognitoIdentityProviderManager в пользовательском классе и передача его поставщику учетных данных. Вот код, предоставленный simaomi в обсуждении github ниже (это скорее быстрое исправление):

import Foundation
import AWSCore
import AWSCognito
import AWSCognitoIdentityProvider
class CustomIdentityProvider: NSObject, AWSCognitoIdentityProviderManager{
    var tokens : [NSString : NSString]?
    init(tokens: [NSString : NSString]) {
        self.tokens = tokens
    }
    @objc func logins() -> AWSTask {
        return AWSTask(result: tokens)
    }
}


let customProviderManager = CustomIdentityProvider(tokens: logins!)

self.credentialsProvider = AWSCognitoCredentialsProvider(
   regionType: Constants.COGNITO_REGIONTYPE,
   identityPoolId: Constants.COGNITO_IDENTITY_POOL_ID,
   identityProviderManager: customProviderManager)

Пример SDK показывает, как вы должны реализовать решение

Смотрите здесь для обсуждения: https://github.com/aws/aws-sdk-ios/issues/357

и здесь для обновленных примеров SDK: https://github.com/awslabs/aws-sdk-ios-samples/tree/developer-authenticated-identities-2-4/CognitoSync-Sample

Другие вопросы по тегам