[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, но я не знаю.

Поставщик учетных данных AWS Cognito Swift "вход в систему устарел: используйте 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 и рассказать мне, как использовать преобразованные коды в моем коде выше? Или, пожалуйста, скажите мне официальный рекомендуемый код?

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" в обновленном примере.

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