Cognitoについて調べてみました。Cognitoとは今どきのモバイルアプリでは、単純に認証してAPIを叩くだけではなく、サービスにログインしていない状態でも一意なIDを持たせてデータを管理したり、ゲスト状態から会員登録をしたときにデータを引き継いだり、サービス間でシングルサインオンを提供したり、デバイス間で設定を共有できるようにするなど、ユーザーがどのデバイスからサービスにアクセスしてもストレスなく使えるようにするために様々な工夫を凝らす必要があります。Cognitoこれらの実装は複雑になりがちで、アプリを作っていると思ったらアカウント管理のしくみ作りに多くの時間を取られていた、ということがあります。一意のアイデンティティの管理オフライン機能デバイス間での保存と同期シームレスなゲストアクセス上記のような今のモバイルアプリには欠かせない便利な機能を、バックエンドのコードの記述やインフラストラクチャの管理をすることなく、実装・運用をすることができて、モバイルアプリ開発者は優れたアプリケーション体験を作成することに集中できる、とあります。これは調べずにはいられませんね。Poolを作ることができます。Cognitoはまだプレビューなので、今のところはバージニアリージョンしか選択できません。Poolはデータを保存するコンテナで、1つのアプリに関連付けることも、複数のアプリに関連付けることもできます。Poolの中のDatasetと呼ばれるテーブルに、key-value形式でデータを保存するようになっています。ユーザーごとのDatasetのサイズの上限は20MBです。ユーザの1つのDatasetのサイズの上限は1MBになっていて、キーの最大数は1024個になっています。帯域幅が限られている場合に、何度もリトライしてバッテリーの寿命とデータプランを消費させないために1つのDatasetの上限を1MBに制限しているようです。次にRoleの設定です。未認証のユーザーとログインユーザーのそれぞれに対してRoleを割り当てることができます。これによって、S3やDynamoDBなどにユーザー専用の領域を用意してクライアントから直接読み書きさせるなど、AWSリソースへのアクセスを柔軟に制御することができます。設定はこれで完了です。自分のaccountId、identityPoolId、unauthRoleArn、authRoleArnが組み込まれたサンプルコードをダウンロードすることができます。AndroidからCognitoを使ってみる設定完了ページに自分のaccountId、identityPoolId、unauthRoleArn、authRoleArnが組み込まれたCogniteCredentialsProviderの初期化のコードがあるので、コピペします。"arn:aws:iam::XXXXXXXXXX:role/YourRoleName");書き込む値が決まっているときには、保守性の向上や静的解析を活かすためにDatasetの操作クラスを作って、そこからデータを操作するのが定石ですが、一旦動かしてみるだけなので文字列をベタ書きしていきます。サーバーと同期します。呼ぶとリモートの変更差分がpullされて、それからデバイスでの変更差分をサーバにpushするしくみになっています。dataset.syncronize(syncCallback);pullした際にローカルキャッシュと比較して、コンフリクトが起こったときはSyncCallbackでハンドリングできます。SyncCallbackの以下のメソッドをオーバーライドします。...};onConflictはデフォルトでは最新の変更を採用するようになっています。GitHubでソースが公開されています。amazon-cognito-androidを読んでみたところ、下のような構成になっていました。secretKey、sessionTokenなどの認証情報をSharedPreferencesで管理しています。SQLiteLocalStorageではdatasetsテーブルとrecordsテーブルを管理しています。呼ばれるとRemoteDataStorageとLocalStorageがmergeされて、AmazonCognitoSyncServiceClient経由で送信されます。RemoteDataStorageとLocalStorageはinternalパッケージの中にあって、開発者はどこに保存するかということを意識せずにコードを書くことができます。いうメソッドは、同期が要求されたときにオフラインだった場合に、再びネットワークに接続されるまで処理をペンディングにして、再接続された際に同期を実行するようになっていました。これによってデバイスがオンラインかオフラインかに関わらずデータを保存することができます。Cognitoはアカウント管理の複雑な処理を肩代わりさせるのに有用なサービスだと思います。今のところログインプロバイダがFacebookとGoogleとAmazonのみなので、任意のログインプロバイダが使えるようになったり、課金状態にあるユーザーにのみ閲覧権限を与えるというようなアクセス制御をするために細かくRoleの設定ができるようになったりすると、さらに便利になるかなと思います。Servicesの正式リリースを待ちます。エンジニアの三浦です。使ったセキュリティログ検索基盤の構築サービス特性にあった検索システムの設計戦略クックパッド採用説明会「クックパッドはサービスの作り手を採用したいんです。/*}*/スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。