[iOS][AWS Cognito] "вход в систему" устарел: используйте "AWSIdentityProviderManager"
Я пытался аутентифицировать пользователя с помощью Facebook и Twitter на iOS с помощью Amazon Cognito. Я не могу выполнить, потому что официальные документы старые.
Вот мой код:
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], поскольку вход в систему устарел.
Официальные документы Amazon (английский, японский) и образцы не являются актуальными, поэтому я не знаю, как правильно выполнить проверку подлинности пользователя.
Наконец, я нашел решение для этого в 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 и рассказать мне, как использовать преобразованные коды в моем коде выше? Или, пожалуйста, скажите мне официальный рекомендуемый код?
2 ответа
Наконец-то я разобрался, как решить эту проблему несколько дней назад.
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)
}
}
2. По вашему мнению контроллер.
@property MyProvider *myProvider;
3. Инициализируйте AWSCognitoCredentialsProvider с MyProvider, который должен быть инициализирован токенами.
MyProvider *Provider = [[MyProvider alloc] initWithTokens:@{AWSIdentityProviderFacebook : token }];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:COGNITO_REGION_TYPE identityPoolId:IDENTITY_POOL_ID identityProviderManager:Provider];
* Если вы хотите написать MyProvider в Objc. В соответствии с {yourProjectName}-Swift.h
который создается после добавления файла Swift, может быть, это должно работать? Я не проверял, работает ли этот код.
@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
Я потратил много времени, чтобы все заработало. так что я надеюсь, что этот пост будет полезен для тех, у кого такая же проблема! Благодарю.
Та же проблема здесь:||
Я прочитал пример решения, который вы опубликовали, и обнаружил, что есть обновленный пример
Обновленный пример реализован в Swift, но эту проблему они решили и реализовали в Object-C. Проверьте папку "DeveloperAuthenticated" в обновленном примере.