2

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

logins が廃止されたため、 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 に変換して、上記のコードで変換されたコードを使用する方法を教えていただけますか? もしくは公式の推奨コードを教えてください。

4

2 に答える 2

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.View Controller内。

@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];

※ObjcにMyProviderを記述したい場合。{yourProjectName}-Swift.hSwiftファイルを追加すると作成されるものによると、これでうまくいくのではないでしょうか? ただし、このコードが機能するかどうかは調べていません。

@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

私はそれを機能させるために多くの時間を費やしました。この投稿が同じ問題を抱えている誰かに役立つことを願っています!ありがとう。

于 2016-07-19T17:20:48.390 に答える
0

ここでも同じ問題:||

あなたが投稿したソリューションの例を読みましたが、更新された例があることがわかりました

更新されたサンプル リンク

更新された例は Swift で実装されていますが、この問題は解決され、Object-C によって実装されました。更新された例でフォルダー「DeveloperAuthenticated」を確認します。

于 2016-07-14T20:10:53.207 に答える