[iOS][AWS Cognito] 'logins' 已弃用:使用 "AWSIdentityProviderManager"
[iOS][AWS Cognito] 'logins' is deprecated: Use "AWSIdentityProviderManager"
我一直在尝试使用 Amazon Cognito 在 iOS 上使用 Facebook 和 Twitter 对用户进行身份验证。
官方文档太旧,无法实现
这是我的代码:
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 returns [null] 作为登录已弃用。
亚马逊官方文档(英文、日文)和示例不是最新的,所以我不知道如何正确实施以验证用户。
最后,我在 Swift 中找到了解决方案,但我不知道。
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 并告诉我如何在上面的代码中使用转换后的代码吗?
或者请告诉我官方推荐的代码?
同样的问题:||
我阅读了您发布的解决方案示例,发现有更新的示例
更新的示例在 Swift 中实现,但他们解决了这个问题并由 Object-C 实现。检查更新示例中的文件夹 "DeveloperAuthenticated"。
几天前我终于想出了解决这个问题的方法。
1.Add 这个 class 写在 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)
}
}
2.In 你的视图控制器。
@property MyProvider *myProvider;
3.Initialze AWSCognitoCredentialsProvider 和 MyProvider 应使用令牌进行初始化。
MyProvider *Provider = [[MyProvider alloc] initWithTokens:@{AWSIdentityProviderFacebook : token }];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:COGNITO_REGION_TYPE identityPoolId:IDENTITY_POOL_ID identityProviderManager:Provider];
*如果要在Objc中写MyProvider。根据添加 Swift 文件后创建的 {yourProjectName}-Swift.h
,也许这应该有效?不过我还没有检查这段代码是否有效。
@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 对遇到同样问题的人有所帮助!
谢谢。
我一直在尝试使用 Amazon Cognito 在 iOS 上使用 Facebook 和 Twitter 对用户进行身份验证。 官方文档太旧,无法实现
这是我的代码:
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 returns [null] 作为登录已弃用。
亚马逊官方文档(英文、日文)和示例不是最新的,所以我不知道如何正确实施以验证用户。
最后,我在 Swift 中找到了解决方案,但我不知道。
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 并告诉我如何在上面的代码中使用转换后的代码吗? 或者请告诉我官方推荐的代码?
同样的问题:||
我阅读了您发布的解决方案示例,发现有更新的示例
更新的示例在 Swift 中实现,但他们解决了这个问题并由 Object-C 实现。检查更新示例中的文件夹 "DeveloperAuthenticated"。
几天前我终于想出了解决这个问题的方法。
1.Add 这个 class 写在 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)
}
}
2.In 你的视图控制器。
@property MyProvider *myProvider;
3.Initialze AWSCognitoCredentialsProvider 和 MyProvider 应使用令牌进行初始化。
MyProvider *Provider = [[MyProvider alloc] initWithTokens:@{AWSIdentityProviderFacebook : token }];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:COGNITO_REGION_TYPE identityPoolId:IDENTITY_POOL_ID identityProviderManager:Provider];
*如果要在Objc中写MyProvider。根据添加 Swift 文件后创建的 {yourProjectName}-Swift.h
,也许这应该有效?不过我还没有检查这段代码是否有效。
@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 对遇到同样问题的人有所帮助! 谢谢。