メニュー
Amazon Cognito
開発者ガイド (Version 最終更新日: 2016 年 7 月 28 日)

データの同期

Amazon Cognito では、key-value ペアを含むデータセットにエンドユーザーデータを保存することができます。このデータは Amazon Cognito ID に関連付けられ、ログインやデバイス間でアクセスできるようになります。このデータを Amazon Cognito サービスとエンドユーザーのデバイス間で同期するには、同期メソッドを呼び出します。各データセットは、最大 1 MB のサイズを持つことができます。ID に最大 20 個のデータセットを関連付けることができます。

Amazon Cognito Sync クライアントは、ID データのローカルキャッシュを作成します。アプリは、キーを読み取るか書き込むときに、このローカルキャッシュにキーに接続します。これにより、デバイスで行われたすべての変更は、オフラインであってもデバイスですぐに利用できるようになります。同期メソッドが呼び出された場合、サービスからの変更はデバイスにプルされ、ローカルの変更はサービスにプッシュされます。この時点で、変更は他のデバイスが利用して同期できるようになります。

Amazon Cognito Sync クライアントの初期化

Amazon Cognito Sync クライアントを初期化するには、まず認証情報プロバイダーを作成する必要があります。認証情報プロバイダーは、アプリが AWS リソースにアクセスできるようにするために、一時的な AWS 証明書を取得します。また、必要なヘッダーファイルをインポートする必要もあります。次のステップを使用して Amazon Cognito Sync クライアントを初期化します。

Android

  1. 認証情報の取得」の指示に従って、認証情報プロバイダーを作成します。

  2. Amazon Cognito パッケージをインポートします。import com.amazonaws.mobileconnectors.cognito.*;

  3. Amazon Cognito Sync を初期化し、Android アプリのコンテキスト、ID プールの ID、AWS リージョン、および初期化された Amazon Cognito 認証情報プロバイダーを渡します。

    Copy
    CognitoSyncManager client = new CognitoSyncManager( getApplicationContext(), Regions.YOUR_REGION, credentialsProvider);

iOS - Objective-C

  1. 認証情報の取得」の指示に従って、認証情報プロバイダーを作成します。

  2. AWSCoreCognito をインポートし、AWSCognito を初期化します。

    Copy
    #import <AWSiOSSDKv2/AWSCore.h> #import <AWSCognitoSync/Cognito.h> AWSCognito *syncClient = [AWSCognito defaultCognito];
  3. CocoaPods を使用している場合、<AWSiOSSDKv2/AWSCore.h>AWSCore.h に置き換え、Amazon Cognito のインポートと同じ構文に従います。

iOS - Swift

  1. 認証情報の取得」の指示に従って、認証情報プロバイダーを作成します。

  2. AWSCognito をインポートし、初期化します。

    Copy
    import AWSCognito let syncClient = AWSCognito.default()!

JavaScript

  1. JavaScript 用の Amazon Cognito Sync Manager をダウンロードします。

  2. プロジェクトに Sync Manager ライブラリを含めます。

  3. 認証情報の取得」の指示に従って、認証情報プロバイダーを作成します。

  4. Sync Manager を初期化します。

    Copy
    var syncManager = new AWS.CognitoSyncManager();

Unity

  1. 認証情報の取得」の指示に従って、CognitoAWSCredentials のインスタンスを最初に作成する必要があります。

  2. CognitoSyncManager のインスタンスを作成し、CognitoAwsCredentials オブジェクトと AmazonCognitoSyncConfig を、少なくともリージョンセットとともに渡します。

    Copy
    AmazonCognitoSyncConfig clientConfig = new AmazonCognitoSyncConfig { RegionEndpoint = REGION }; CognitoSyncManager syncManager = new CognitoSyncManager(credentials, clientConfig);

Xamarin

  1. 認証情報の取得」の指示に従って、CognitoAWSCredentials のインスタンスを最初に作成する必要があります。

  2. CognitoSyncManager のインスタンスを作成し、CognitoAwsCredentials オブジェクトと AmazonCognitoSyncConfig を、少なくともリージョンセットとともに渡します。

    Copy
    AmazonCognitoSyncConfig clientConfig = new AmazonCognitoSyncConfig { RegionEndpoint = REGION }; CognitoSyncManager syncManager = new CognitoSyncManager(credentials, clientConfig);

データセットについて

Amazon Cognito では、エンドユーザーのプロファイルデータがデータセットに整理されます。各データセットはキーと値のペアの形式で、最大 1 MB のデータを含むことができます。データセットは、同期操作を実行できる最も細かいエンティティです。データセットで実行される読み取りと書き込みのオペレーションは、同期メソッドが呼び出されるまでしか、ローカルストアに影響しません。データセットは一意の文字列によって識別されます。次に示すように新しいデータセットを作成するか、既存のデータセットを開くことができます。

Android

Copy
Dataset dataset = client.openOrCreateDataset("datasetname");

データセットを削除するには、最初にメソッドを呼び出してローカルストレージから削除し、次に synchronize メソッドを呼び出して Amazon Cognito からデータセットを削除します。

Copy
dataset.delete(); dataset.synchronize(syncCallback);

iOS - Objective-C

Copy
AWSCognitoDataset *dataset = [syncClient openOrCreateDataset:@"myDataSet"];

データセットを削除するには、最初にメソッドを呼び出してローカルストレージから削除し、次に synchronize メソッドを呼び出して Amazon Cognito からデータセットを削除します。

Copy
[dataset clear]; [dataset synchronize];

iOS - Swift

Copy
let dataset = syncClient.openOrCreateDataset("myDataSet")!

データセットを削除するには、最初にメソッドを呼び出してローカルストレージから削除し、次に synchronize メソッドを呼び出して Amazon Cognito からデータセットを削除します。

Copy
dataset.clear() dataset.synchronize()

JavaScript

Copy
syncManager.openOrCreateDataset('myDatasetName', function(err, dataset) { // ... });

Unity

Copy
string myValue = dataset.Get("myKey"); dataset.Put("myKey", "newValue");

Remove を使用して、データセットからキーを削除できます。

Copy
dataset.Remove("myKey");

Xamarin

Copy
Dataset dataset = syncManager.OpenOrCreateDataset("myDatasetName");

データセットを削除するには、最初にメソッドを呼び出してローカルストレージから削除し、次に synchronize メソッドを呼び出して Amazon Cognito からデータセットを削除します。

Copy
dataset.Delete(); dataset.SynchronizeAsync();

データセットのデータの読み取りと書き込み

Amazon Cognito データセット関数は、キーによってアクセス可能な値を持つディクショナリとして機能します。データセットのキーと値は、データセットがディクショナリであるかのように読み取り、追加、または変更できます。例を以下に示します。

Android

Copy
String value = dataset.get("myKey"); dataset.put("myKey", "my value");

iOS - Objective-C

Copy
[dataset setString:@"my value" forKey:@"myKey"]; NSString *value = [dataset stringForKey:@"myKey"];

iOS - Swift

Copy
dataset.setString("my value", forKey:"myKey") let value = dataset.stringForKey("myKey")

JavaScript

Copy
dataset.get('myKey', function(err, value) { console.log('myRecord: ' + value); }); dataset.put('newKey', 'newValue', function(err, record) { console.log(record); }); dataset.remove('oldKey', function(err, record) { console.log(success); });

Unity

Copy
string myValue = dataset.Get("myKey"); dataset.Put("myKey", "newValue");

Xamarin

Copy
//obtain a value string myValue = dataset.Get("myKey"); // Create a record in a dataset and synchronize with the server dataset.OnSyncSuccess += SyncSuccessCallback; dataset.Put("myKey", "myValue"); dataset.SynchronizeAsync(); void SyncSuccessCallback(object sender, SyncSuccessEventArgs e) { // Your handler code here }

Android

remove メソッドを使用して、データセットからキーを削除できます。

Copy
dataset.remove("myKey");

iOS - Objective-C

removeObjectForKey を使用して、データセットからキーを削除できます。

Copy
[dataset removeObjectForKey:@"myKey"];

iOS - Swift

removeObjectForKey を使用して、データセットからキーを削除できます。

Copy
dataset.removeObjectForKey("myKey")

Unity

Remove を使用して、データセットからキーを削除できます。

Copy
dataset.Remove("myKey");

Xamarin

Remove を使用して、データセットからキーを削除できます。

Copy
dataset.Remove("myKey");

データセットに書き込まれた値は、同期メソッドを呼び出すまで、データのローカルにキャッシュされたコピーのみに影響することに注意してください。

同期ストアでのローカルデータの同期

Android

synchronize メソッドは、ローカルにキャッシュされたデータを、Amazon Cognito Sync ストアに格納されているデータと比較します。リモートの変更は、Amazon Cognito Sync ストアからプルされます。競合が発生した場合、競合の解決が呼び出され、デバイス上の更新された値はサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。

Copy
dataset.synchronize(syncCallback);

synchronize メソッドは、以下に説明する SyncCallback インターフェイスの実装を受け取ります。

synchronizeOnConnectivity() メソッドは、接続が利用可能な場合に同期を試みます。接続が直ちに利用可能な場合、synchronizeOnConnectivity()synchronize() のように動作します。それ以外の場合、接続の変更をモニタリングし、接続が利用可能になると同期を実行します。synchronizeOnConnectivity() が複数回呼び出された場合、最後の同期リクエストのみが保持され、最後のコールバックのみが実行されます。データセットまたはコールバックがガーベージコレクションの対象になった場合、このメソッドは同期を実行せず、コールバックは実行されません。

データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」を参照してください。

iOS - Objective-C

synchronize メソッドは、ローカルにキャッシュされたデータを、Amazon Cognito Sync ストアに格納されているデータと比較します。リモートの変更は、Amazon Cognito Sync ストアからプルされます。競合が発生した場合、競合の解決が呼び出され、デバイス上の更新された値はサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。

synchronize メソッドは非同期で、応答を処理するために AWSTask オブジェクトを返します。

Copy
[[dataset synchronize] continueWithBlock:^id(AWSTask *task) { if (task.isCancelled) { // Task cancelled. } else if (task.error) { // Error while executing task. } else { // Task succeeded. The data was saved in the sync store. } return nil; }];

synchronizeOnConnectivity メソッドは、デバイスが接続されているときに同期を試みます。最初に、synchronizeOnConnectivity は接続を確認し、デバイスがオンラインである場合、すぐに synchronize を呼び出して、試行に関連付けられた AWSTask オブジェクトを返します。

デバイスがオフラインの場合、synchronizeOnConnectivity は、1) 次回にデバイスがオンラインになったときに同期をスケジュールし、2) 結果が nil の AWSTask を返します。スケジュールされた同期が有効なのは、データセットオブジェクトのライフサイクルの間のみです。接続が回復する前にアプリが終了された場合、データは同期されません。予定された同期中にイベントが発生した場合に通知を受けるようにする場合は、AWSCognito で見つかった通知のオブザーバーを追加する必要があります。

データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」を参照してください。

iOS - Swift

synchronize メソッドは、ローカルにキャッシュされたデータを、Amazon Cognito Sync ストアに格納されているデータと比較します。リモートの変更は、Amazon Cognito Sync ストアからプルされます。競合が発生した場合、競合の解決が呼び出され、デバイス上の更新された値はサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。

synchronize メソッドは非同期で、応答を処理するために AWSTask オブジェクトを返します。

Copy
dataset.synchronize().continueWith(block: { (task) -> AnyObject? in if task.isCancelled { // Task cancelled. } else if task.error != nil { // Error while executing task } else { // Task succeeded. The data was saved in the sync store. } return task })

synchronizeOnConnectivity メソッドは、デバイスが接続されているときに同期を試みます。最初に、synchronizeOnConnectivity は接続を確認し、デバイスがオンラインである場合、すぐに synchronize を呼び出して、試行に関連付けられた AWSTask オブジェクトを返します。

デバイスがオフラインの場合、synchronizeOnConnectivity は、1) 次回にデバイスがオンラインになったときに同期をスケジュールし、2) 結果が nil の AWSTask オブジェクトを返します。スケジュールされた同期が有効なのは、データセットオブジェクトのライフサイクルの間のみです。接続が回復する前にアプリが終了された場合、データは同期されません。予定された同期中にイベントが発生した場合に通知を受けるようにする場合は、AWSCognito で見つかった通知のオブザーバーを追加する必要があります。

データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」を参照してください。

JavaScript

synchronize メソッドは、ローカルにキャッシュされたデータを、Amazon Cognito Sync ストアに格納されているデータと比較します。リモートの変更は、Amazon Cognito Sync ストアからプルされます。競合が発生した場合、競合の解決が呼び出され、デバイス上の更新された値はサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。

Copy
dataset.synchronize();

データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」を参照してください。

Unity

synchronize メソッドは、ローカルにキャッシュされたデータを、Amazon Cognito Sync ストアに格納されているデータと比較します。リモートの変更は、Amazon Cognito Sync ストアからプルされます。競合が発生した場合、競合の解決が呼び出され、デバイス上の更新された値はサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。

Copy
dataset.Synchronize();

同期は非同期で実行され、データセット内で指定できる複数のコールバックの 1 つを呼び出します。

データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」を参照してください。

Xamarin

synchronize メソッドは、ローカルにキャッシュされたデータを、Amazon Cognito Sync ストアに格納されているデータと比較します。リモートの変更は、Amazon Cognito Sync ストアからプルされます。競合が発生した場合、競合の解決が呼び出され、デバイス上の更新された値はサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。

Copy
dataset.SynchronizeAsync();

データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」を参照してください。