18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Amazon Cognito] JavaScript でデータ同期する

Last updated at Posted at 2014-12-19

1. Abstract

Amazon Cognito は、ユーザ認証とデータ同期の2つの機能を提供します。データ同期の記事をあまり見かけないので今回はデータ同期の話をします。

1.ユーザ認証
Facebook/Google/Amazon といったIDプロバイダでのユーザ認証、もしくは未認証でのゲストを扱えます。

2.データ同期 ←今回はコレ★
ネットワーク状況を考慮せずとも、簡単に AWS 上に任意のデータを同期し保存することできます。

※環境
us-east-1 リージョン
Google Chrome


AWS Management Console から Cognito の Identity Pool を作成すると、iOS, Android, .NET の Starter Code が表示される(ダウンロードもできる)のですぐに開始できますが、JavaScript についての言及がありません

この記事ではブラウザから JavaScript によるデータ同期を実施してみたいと思います。

Screen_Shot_2014-12-19_at_11_17_56_PM.png

2. Create Cognito Identity Pool

AWS Management Console から Identity Pool を作成します。データ同期について実施したいだけなので、 Unauthorized (未認証ゲスト)で利用します。

Pasted_Image_12_19_14__11_35_PM.png
↓↓↓
Screen_Shot_2014-12-19_at_11_16_43_PM.png

3. Include Cognito Sync Manager SDK for JavaScript

AWS SDK for JavaScript および Cognito Sync Manager SDK for JavaScript を HTML にインクルードします。

index.html
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.4.min.js"></script>
<script src="js/amazon-cognito.min.js"></script>

4. Source code and Execution result

CognitoSyncClient を生成し、データセットを操作するスクリプトを記述します。

ページ読み込み時には、Dataset を Create もしくは Open のうえ、Key:"myData" のデータを Console.log() に表示します。また読み込み時には、Key:"myData" の Value に "newValue" という文字列を put して同期しています。

index.html
var client = null; 
AWS.config.region = 'us-east-1';
var cognitoParams = {
    AccountId: 'AWS_ACCOUNT_ID',
    IdentityPoolId: 'IDENITY_POOL_ID',
    RoleArn: 'arn:aws:iam::xxxx:UNAUTHENTICATED_ROLE_ARN'
};
 
AWS.config.credentials = new AWS.CognitoIdentityCredentials(cognitoParams);
AWS.config.credentials.get(function() {
    client = new CognitoSyncManager();

    client.openOrCreateDataset("myDatasetName", function(err, dataset) {
        dataset.get('myData', function(err, value) {
            console.log('myData = ' + value);
        });

        dataset.put('myData', 'newValue', function(err, record) {
            if ( !err ) {
                dataset.synchronize({
                    onSuccess: function(dataset, newRecords) {
                        console.log("Data saved successfully.");
                    },
                    onFailure: function(err) {
                        console.log("Error occured.");
                    },
                    onConflict: function(dataset, conflicts, callback) {
                        var resolved = [];
                        for (var i=0; i < conflicts.length; i++) {
                            resolved.push(conflicts[i].resolveWithRemoteRecord());
                        }
                        dataset.resolve(resolved, function(err) {
                            callback(true);
                        });
                    },
                    onDatasetDeleted: function(dataset, datasetName, callback) {
                        return callback(true);
                    },
                    onDatasetMerged: function(dataset, datasetNames, callback) {
                        return callback(false); 
                    }
                });
            }
        });
    }
});

ソースコードはここに置いときます。
https://gist.github.com/shimy/ed319fc37ccdd61a4af3

###Result
ページ初回読み込み時には、データはありませんので undefined, 2回目読み込み以降は "newValue" という値がセットされていることがわかります。

初回の読み込み時
Screen_Shot_2014-12-20_at_1_08_14_AM.png
 
 
2回目以降の読み込み時
Screen_Shot_2014-12-20_at_1_08_28_AM.png
 
 
AWS Management Console
Data sync が動作しデータが保存されたことがわかります。

Screen Shot 2014-12-20 at 1.32.46 AM.png
 
 
#免責
こちらは個人の意見で会社とは関係ありません。

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?