“login”已弃用:使用“AWSIdentityProviderManager”

我一直在尝试使用Amazon Cognito在iOS和iOS上对用户进行身份validation。 我不能执行,因为官方文件是旧的。

这是我的代码:

NSString *token = [FBSDKAccessToken currentAccessToken].tokenString; credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionAPNortheast1 identityPoolId:IDENTITY_POOL_ID]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionAPNortheast1 credentialsProvider:credentialsProvider]; credentialsProvider.logins = @{ AWSIdentityProviderFacebook: token }; NSLog(@"credentialsProvider.logins : %@", credentialsProvider.logins); [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration; 

但Xcode说'logins' is deprecated: Use “AWSIdentityProviderManager” to provide a valid logins dictionary to the credentials provider

我发现credentialsProvider.logins返回[null],因为login已被弃用。

亚马逊的官方文件(英文,日文)和样本不是最新的,所以我不知道如何正确实现对用户进行身份validation。

最后,我在Swift中find了这个解决scheme,但是我不知道。

AWS Cognito Swift凭据提供程序“不推荐使用login:使用AWSIdentityProviderManager”

 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) 

你可以将这些代码转换为Objective-C并告诉我如何在上面的代码中使用转换的代码? 或者请告诉我官方推荐的代码?

最后我想出了几天前如何解决这个问题。

1.用Swift编写这个类到你的Objc项目。

 // CognitoCustomProviderManager.swift import Foundation import AWSCognitoIdentityProvider class MyProvider:NSObject, AWSIdentityProviderManager{ var tokens : [NSString : NSString]? init(tokens: [NSString : NSString]) { self.tokens = tokens print("tokens : ", self.tokens); } @objc func logins() -> AWSTask { return AWSTask(result: tokens) } } 

在你的视图控制器。

 @property MyProvider *myProvider; 

3.初始化带有MyProvider的AWSCognitoCredentialsProvider,应使用标记进行初始化。

 MyProvider *Provider = [[MyProvider alloc] initWithTokens:@{AWSIdentityProviderFacebook : token }]; AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:COGNITO_REGION_TYPE identityPoolId:IDENTITY_POOL_ID identityProviderManager:Provider]; 

*如果你想在Objc中写MyProvider。 根据{yourProjectName}-Swift.h这是一旦你添加Swift文件创build,也许这应该工作? 我没有检查,如果这段代码虽然工作。

 @interface MyProvider : NSObject <AWSIdentityProviderManager> @property (nonatomic, copy) NSDictionary<NSString *, NSString *> * _Nullable tokens; - (nonnull instancetype)initWithTokens:(NSDictionary<NSString *, NSString *> * _Nonnull)tokens OBJC_DESIGNATED_INITIALIZER; - (AWSTask * _Nonnull)logins; @end 

我花了很多时间来使它工作。 所以我希望这个post会对有同样问题的人有帮助! 谢谢。

同样的问题在这里:||

我阅读了您发布的解决scheme示例,并且发现有一个更新的示例

更新示例链接

更新的例子是在Swift中实现的,但是这个问题是由Object-C解决和实现的。 在更新的例子中检查文件夹“DeveloperAuthenticated”。