はここ はCognito連合アイデンティティプールでCognitoユーザープールを統合する方法
- ユーザーが自動的に与えられている我々のアプリで匿名、ゲストアカウントをユーザーアカウントを実装するための私達のシナリオです
- 他のデバイスからゲストアカウントにアクセスするには、登録してゲストアカウントを登録ユーザーアカウントに変換する必要があります。
- ユーザーが別のデバイスからサインインし、登録ユーザーアカウントにアクセスし、 accがある以前に保存されたプロファイルデータと比較することができます。
ステップ#3および#4を強制的に実行するわけではありません。デバイスを切り替えたり、デバイスを工場出荷時にリセットしたりする必要がないかぎり、ゲストアカウントにアクセスできなくなります。
アマゾンモバイルSDKの2.3.x以降とCognito連携アイデンティティプールを使用して、我々のような上記の手順を実装するには:
- プロファイルを保存するためにCognito連携アイデンティティプールに
- 使用Cognitoデータ同期を使用して認証されていないIDを作成します。データ
- Facebookのログイン情報を認証されていないIDとリンクさせて登録IDに変換するには
- 他のデバイスからFacebookを使用してサインインすると、登録されたID以前のデバイスから削除します。ユーザーはCognito Data Syncに保存されている以前のプロフィールデータにアクセスできます。
これらの手順を実行するには、Cognito User Poolの導入前にAWS Mobile Hubで生成されたサンプルコードを使用しました。これは、AWSIdentityManagerとAWSFacebookSignInProviderの組み合わせとそのサポートコードを使用していました。すべてが期待どおりに機能しました。上記のように
- 同じ:私たちは今、最新のアマゾンモバイルSDK 2.4.9に変換し、同じフローを実装するために、代わりにFacebookのログインのCognitoユーザーのプールを使用しようとしている
- ユーザは、Cognito User Poolを使用してサインアップしてUser Poolアイデンティティを作成します。ユーザー名/パスワードでサインインします。
- ユーザーは、別のデバイスのユーザー名/パスワードを使用してサインインし、登録されたユーザープールIDに切り替えます。これで、ユーザーはCognito Data Syncに保存されたプロファイルデータにアクセスできるようになります。
手順#1 &#2は、AWSMobileHubHelper.frameworkのAWSIdentityManagerを使用して実装されています。ステップ#3 &#4は、CognitoYourUserPoolsSampleサンプルプロジェクトのサンプルコードで実装されています。私たちが抱えている
問題は、以下のとおりです。ステップ#3では
- 、サインアップすると、ユーザーのプールコンソールのCognitoユーザープールIDを作成します。しかし、その登録済みユーザーでサインインしても、ユーザープールIDからIDプールIDへのログインはリンクされません。
- 以前の実装では、アイデンティティ・プロバイダ「graph.facebook.com」がアイデンティティ・プール・コンソールにリンク・ログインとしてリストされていました。 Integrating User Pools with Amazon Cognito Identityで説明されているように、アイデンティティプロバイダ "cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789"に類似したものが存在するはずです。
- 登録されたユーザープールIDのユーザー名/パスワードを使用してサインインした後、IDプールIDは以前のデバイスの登録済みIDに決して切り替わりません。 (おそらく上の問題のために)。したがって、以前に保存されたプロファイルデータにアクセスすることはできません。
- Facebookの実装では、以前のサンプルコードでこれを行い、Switching Identitiesに記載されているようにアプリに通知しました。ユーザープールの実装では、通知は決して行われません。
私はここに欠けている非常に重要なステップがあります。 Cognito User PoolのログインにCognito Identity Poolの識別情報を明示的にリンクしていないと思われます。 CognitoYourUserPoolsSampleには、ユーザープールのIDとフェデレーションIDプールを統合する方法の例は記載されていません。単純にこれを行うと、それは自動だと
ドキュメントは言うが、私はそれが仕事を得ることができませんでした:
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
initWithRegionType:AWSRegionUSEast1
identityPoolId:@“<identity-pool-id>"
identityProviderManager:pool];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];
AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
誰でもプロセスを示し任意のアイデアやサンプルコードがありますか?私が見つけることができる最も近いサンプルコードはfork of CognitoSyncDemoであり、それはまだ私が必要としていたものではありませんでした。
ありがとうございました。このソリューション(あなたのモバイルハブヘルパーのフォーク)は私たちの問題を解決します。あなたの "Cognito Notes and Diagram" PDFで、Cognitoの非常に徹底的かつ簡潔な要約のための特別な名誉です。 – cyanware