2

Amazon CognitoでiOSのFacebookとTwitterでユーザーを認証しようとしていました。 公式文書が古いため実装できません。[iOS] [AWS Cognito] 'logins'は非推奨:「AWSIdentityProviderManager」を使用

は、ここに私のコードです:

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は[ヌル]を返すことを考え出したと述べています。

Amazonの公式ドキュメント&サンプルが最新でないため、ユーザーを認証するために正しく実装する方法がわかりません。

最後に、私はSwiftでこれに対する解決策を見つけましたが、わかりません。

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) 

あなたはObjective-Cのにこれらのコードを変換し、どのように私の上記のコードに変換されたコードを使用する方法を教えてもらえますか? または公式推奨コードを教えてください。

答えて

5

最後に、私は数日前にこの問題を解決する方法を考え出しました。

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.トークンで初期化する必要があるMyProviderを持つAWSCognitoCredentialsProvider。

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

* MyProviderをObjcに書きたい場合は、 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 

私はそれを動作させるために多くの時間を費やしました。私はこの記事が同じ問題を抱えている人に役立つことを願っています!ありがとう。

+0

こんにちは、同じ問題があるので、実装ファイルを私に提供してください。私はCredentials Providerにログインすることができました。私はトークンを取り戻しました - だから、トークンをアップしてamazonコグニートにログインする必要がありますが、失敗しました。 –

0

同じ問題はここにあります:||

私はあなたが投稿ソリューションの例を読んで、私は更新例

Updated Example Link

が更新例があることがわかっは、スウィフトに実装されていますが、この問題は、彼らが解決し、オブジェクトCで実装されています。更新されたサンプルの「DeveloperAuthenticated」フォルダを確認します。

+0

ありがとうございました! しかし、リンクが機能しています。それを修正できますか? – Ramiro

+1

私はリンクの問題を理解してここに残しました。 https://github.com/awslabs/aws-sdk-ios-samples/tree/developer-authenticated-identities-2-4/CognitoSync-Sample 私はそれを試してみます。ありがとう! – Ramiro