AWS Cognito Swift 凭证提供商 "logins is deprecated: Use AWSIdentityProviderManager"

AWS Cognito Swift credentials provider "logins is deprecated: Use AWSIdentityProviderManager"

我正在尝试让用户使用 Facebook 和 Amazon Cognito 注册我的应用程序。我发现以前的文档说要使用:

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

但我收到消息称登录已被弃用,并使用 AWSIdentityProviderManager 协议向凭证提供商提供登录,但我不知道该怎么做。 我试图让我的 class 实现 AWSIdentityProviderManager 并创建一个登录方法,因为我注意到 credentialsProvider 有一个方法 "setIdentiyProviderManagerOnce(self)",但我不知道如何在已实现的 logins() 方法中连接 facebook 令牌到凭据管理器。

我看过亚马逊的 github 示例,但它们似乎没有太大帮助

环顾四周后,我终于发现我不是唯一遇到此问题的人。 AWS 在不更改主要文档的情况下更新了他们的 sdk。 解决方案是在自定义 class 中实施 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