2

J'ai essayé d'authentifier l'utilisateur avec Facebook et Twitter sur iOS avec Amazon Cognito. Je ne peux pas mettre en œuvre car les documents officiels sont anciens.[iOS] [AWS Cognito] 'connexions' est obsolète: Utiliser "AWSIdentityProviderManager"

Voici mon code:

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; 

Mais Xcode dit que ‘logins’ is deprecated: Use “AWSIdentityProviderManager” to provide a valid logins dictionary to the credentials provider

Je compris que credentialsProvider.logins retourne [null] que les connexions sont déconseillés.

Les documents officiels d'Amazon (anglais, japonais) & ne sont pas mis à jour donc je ne sais pas comment les implémenter correctement pour authentifier l'utilisateur.

Enfin, j'ai trouvé une solution pour cela dans Swift mais je ne sais pas.

AWS Cognito Swift credentials provider "logins is deprecated: Use 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) 

Pouvez-vous convertir ces codes à Objective-C et me dire comment utiliser les codes convertis dans mon code ci-dessus? Ou s'il vous plaît dites-moi le code officiel recommandé?

Répondre

5

Enfin, j'ai compris comment résoudre ce problème il y a quelques jours.

1.Ajoutez cette classe écrite dans Swift à votre projet 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. Dans votre contrôleur de vue.

@property MyProvider *myProvider; 

3.Initialze AWSCognitoCredentialsProvider avec MyProvider qui doit être initialisé avec des jetons.

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

* Si vous voulez écrire MyProvider dans Objc. Selon {yourProjectName}-Swift.h qui est créé une fois que vous ajoutez le fichier Swift, Peut-être que cela devrait fonctionner? Je n'ai pas inspecté si ce code fonctionne bien.

@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 

J'ai passé beaucoup de temps à le faire fonctionner. donc j'espère que ce post sera utile pour quelqu'un qui a le même problème! merci.

+0

Salut, pouvez-vous s'il vous plaît me fournir votre fichier de mise en œuvre car j'ai le même problème. J'ai réussi à me connecter à Credentials Provider, j'ai obtenu un jeton de retour - alors maintenant j'ai besoin d'envoyer le jeton de se connecter à Amazon cognito mais je ne parvient pas à. –

0

même problème ici: ||

J'ai lu le l'exemple de solution que vous avez publié, et je trouve qu'il ya un exemple à jour

Updated Example Link

L'exemple mis à jour est mise en œuvre à Swift, mais cette question ils ont résolu et mis en œuvre par l'objet-C. Vérifiez le dossier "DeveloperAuthenticated" dans l'exemple mis à jour.

+0

Merci pour votre réponse! Mais le lien fonctionne maintenant. Pourriez-vous corriger cela? – Ramiro

+1

J'ai trouvé le problème de lien et le laisser ici. https://github.com/awslabs/aws-sdk-ios-samples/tree/developer-authenticated-identities-2-4/CognitoSync-Sample Je vais essayer. Merci! – Ramiro