データの同期 - Amazon Cognito

データの同期

Amazon Cognito Sync を初めて使用する場合は、AWS AppSync を使用してください。Amazon Cognito Sync と同様に、AWS AppSync はデバイス間でアプリケーションデータを同期化するためのサービスです。

このサービスは、アプリの設定やゲームステートといったユーザーデータの同期化を可能にします。また、複数のユーザーが同期し、共有されたデータでリアルタイムにコラボレートできるようにすることで、これらの機能を拡張します。

Amazon Cognito では、キーバリューペアが含まれるデータセットにユーザーデータを保存することができます。Amazon Cognito は、このデータを ID プールの ID と関連付け、アプリがログインやデバイス全体でアクセスできるようにします。このデータを Amazon Cognito サービスとエンドユーザーのデバイス間で同期するには、同期メソッドを呼び出します。q 各データセットは、最大 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 の認証情報プロバイダーを渡します。

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

iOS - Objective-C

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

  2. 以下のように、AWSCore および Cognito をインポートし、AWSCognito を初期化します。

    #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 をインポートし、初期化します。

    import AWSCognito let syncClient = AWSCognito.default()!

JavaScript

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

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

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

  4. Sync Manager を以下のように初期化します。

    var syncManager = new AWS.CognitoSyncManager();

Unity

  1. 認証情報の取得」の指示に従って、CognitoAWSCredentials のインスタンスを作成します。

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

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

Xamarin

  1. 認証情報の取得」の指示に従って、CognitoAWSCredentials のインスタンスを作成します。

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

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

データセットについて

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

Android

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

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

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

iOS - Objective-C

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

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

[dataset clear]; [dataset synchronize];

iOS - Swift

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

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

dataset.clear() dataset.synchronize()

JavaScript

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

Unity

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

データセットからキーを削除するには、以下のように Remove を設定します。

dataset.Remove("myKey");

Xamarin

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

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

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

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

Amazon Cognito データセットはディクショナリとして機能し、値はキーでアクセスできます。データセットのキーと値は、データセットがディクショナリであるかのように読み取り、追加、または変更できます。

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

Android

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

iOS - Objective-C

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

iOS - Swift

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

JavaScript

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

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

Xamarin

//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 メソッドを使用して、データセットからキーを削除できます。

dataset.remove("myKey");

iOS - Objective-C

データセット からキーを削除するには、以下のように removeObjectForKey を使用します。

[dataset removeObjectForKey:@"myKey"];

iOS - Swift

データセットからキーを削除するには、以下のように removeObjectForKey を使用します。

dataset.removeObjectForKey("myKey")

Unity

データセットからキーを削除するには、以下のように Remove を設定します。

dataset.Remove("myKey");

Xamarin

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

dataset.Remove("myKey");

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

Android

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

dataset.synchronize(syncCallback);

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

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

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

iOS - Objective-C

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

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

[[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 オブジェクトを返します。

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 メソッドを呼び出します。

dataset.synchronize();

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

Unity

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

dataset.Synchronize();

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

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

Xamarin

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

dataset.SynchronizeAsync();

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