콜백 처리 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

콜백 처리

Amazon Cognito Sync를 처음 사용하는 경우 AWS AppSync를 사용하세요. Amazon Cognito Sync와 마찬가지로, AWS AppSync도 디바이스 사이에서 애플리케이션 데이터를 동기화하는 서비스입니다.

앱 기본 설정이나 게임 상태 같은 사용자 데이터를 동기화할 수 있습니다. 또한 이러한 기능을 더욱 확장해, 복수의 사용자가 공유 데이터를 실시간으로 동기화하고 협업할 수 있게 합니다.

이 섹션에서는 콜백 처리 방법을 설명합니다.

Android

SyncCallback 인터페이스

SyncCallback 인터페이스를 구현하여 앱에서 데이터 세트 동기화에 대한 알림을 받을 수 있습니다. 그러면 앱에서는 로컬 데이터 삭제, 미인증 및 인증 프로파일 병합 및 동기화 충돌 해결에 대해 결정할 수 있습니다. 인터페이스에 필요한 다음 메서드를 구현해야 합니다.

  • onSuccess()

  • onFailure()

  • onConflict()

  • onDatasetDeleted()

  • onDatasetsMerged()

모든 콜백을 지정하지 않으려면 DefaultSyncCallback 클래스를 사용할 수도 있습니다. 이 클래스는 모든 콜백에 대해 기본적으로 빈 구현을 제공합니다.

onSuccess

onSuccess() 콜백은 동기화 스토어에서 데이터 세트를 성공적으로 다운로드한 경우 트리거됩니다.

@Override public void onSuccess(Dataset dataset, List<Record> newRecords) { }

onFailure

동기화 중 예외가 발생할 경우 onFailure()가 호출됩니다.

@Override public void onFailure(DataStorageException dse) { }

onConflict

로컬 스토어와 동기화 스토어에서 동일한 키가 수정된 경우 충돌이 발생할 수 있습니다. onConflict() 메서드는 충돌 해결을 처리합니다. 이 메서드를 구현하지 않으면 Amazon Cognito Sync 클라이언트는 기본적으로 가장 최근 변경 사항을 사용합니다.

@Override public boolean onConflict(Dataset dataset, final List<SyncConflict> conflicts) { List<Record> resolvedRecords = new ArrayList<Record>(); for (SyncConflict conflict : conflicts) { /* resolved by taking remote records */ resolvedRecords.add(conflict.resolveWithRemoteRecord()); /* alternately take the local records */ // resolvedRecords.add(conflict.resolveWithLocalRecord()); /* or customer logic, say concatenate strings */ // String newValue = conflict.getRemoteRecord().getValue() // + conflict.getLocalRecord().getValue(); // resolvedRecords.add(conflict.resolveWithValue(newValue); } dataset.resolve(resolvedRecords); // return true so that synchronize() is retried after conflicts are resolved return true; }

onDatasetDeleted

데이터 세트가 삭제되면 Amazon Cognito 클라이언트는 SyncCallback 인터페이스를 사용하여 로컬로 캐싱된 데이터 세트의 사본도 삭제해야 하는지 여부를 확인합니다. onDatasetDeleted() 메서드를 구현하여 로컬 데이터를 사용하여 수행할 사항을 클라이언트 SDK에게 알립니다.

@Override public boolean onDatasetDeleted(Dataset dataset, String datasetName) { // return true to delete the local copy of the dataset return true; }

onDatasetMerged

이전에 연결되지 않은 두 자격 증명이 서로 연결되면 해당 데이터 세트가 모두 병합됩니다. 애플리케이션은 onDatasetsMerged() 메서드를 통해 병합에 대한 알림을 받습니다.

@Override public boolean onDatasetsMerged(Dataset dataset, List<String> datasetNames) { // return false to handle Dataset merge outside the synchronization callback return false; }

iOS - Objective-C

동기화 알림

Amazon Cognito 클라이언트는 동기화를 호출하는 중 여러 NSNotification 이벤트를 출력합니다. 표준 NSNotificationCenter를 통해 이러한 알림을 모니터링하도록 등록할 수 있습니다.

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationHandler:) name:NOTIFICATION_TYPE object:nil];

Amazon Cognito는 아래에 나열된 대로 5가지 알림 유형을 지원합니다.

AWSCognitoDidStartSynchronizeNotification

동기화 작업이 시작될 때 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트가 포함되어 있습니다.

AWSCognitoDidEndSynchronizeNotification

동기화 작업이 완료(성공 등)될 때 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트가 포함되어 있습니다.

AWSCognitoDidFailToSynchronizeNotification

동기화 작업이 실패할 때 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트와 실패의 원인인 오류가 포함된 핵심 오류가 포함되어 있습니다.

AWSCognitoDidChangeRemoteValueNotification

로컬 변경 사항이 Amazon Cognito에 성공적으로 푸시된 경우 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트와 푸시된 레코드 키의 NSArray가 포함된 핵심 키가 포함되어 있습니다.

AWSCognitoDidChangeLocalValueFromRemoteNotification

동기화 작업으로 인해 로컬 값이 변경될 때 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트와 변경된 레코드 키의 NSArray가 포함된 핵심 키가 포함되어 있습니다.

충돌 해결 핸들러

동기화 작업 중 로컬 스토어와 동기화 스토어에서 동일한 키가 수정된 경우 충돌이 발생할 수 있습니다. 충돌 해결 핸들러를 설정하지 않은 경우 Amazon Cognito에서는 기본적으로 가장 최근 업데이트를 선택합니다.

AWSCognitoRecordConflictHandler를 구현하고 할당하면 기본 충돌 해결을 변경할 수 있습니다. AWSCognitoConflict 입력 파라미터 충돌에는 로컬로 캐시된 데이터와 동기화 스토어의 충돌 레코드 둘 모두에 대한 AWSCognitoRecord 객체가 포함됩니다. AWSCognitoConflict를 사용하면 로컬 레코드 [conflict resolveWithLocalRecord]와 원격 레코드 [conflict resolveWithRemoteRecord] 또는 새로운 값인 [conflict resolveWithValue:value]를 사용하여 충돌을 해결할 수 있습니다. 이 메서드에서 nil을 반환하면 동기화가 계속되지 않으며, 다음에 동기화 프로세스를 시작할 때 충돌이 다시 표시됩니다.

클라이언트 수준에서 충돌 해결 핸들러를 설정할 수 있습니다.

client.conflictHandler = ^AWSCognitoResolvedConflict* (NSString *datasetName, AWSCognitoConflict *conflict) { // always choose local changes return [conflict resolveWithLocalRecord]; };

또는 데이터 세트 수준에서 해당 핸들러를 설정할 수 있습니다.

dataset.conflictHandler = ^AWSCognitoResolvedConflict* (NSString *datasetName, AWSCognitoConflict *conflict) { // override and always choose remote changes return [conflict resolveWithRemoteRecord]; };

데이터 세트 삭제 핸들러

데이터 세트가 삭제되면 Amazon Cognito 클라이언트는 AWSCognitoDatasetDeletedHandler를 사용하여 로컬로 캐싱된 데이터 세트의 사본도 삭제해야 하는지 여부를 확인합니다. AWSCognitoDatasetDeletedHandler가 구현되지 않으면 로컬 데이터가 자동으로 제거됩니다. 제거하기 전에 로컬 데이터의 사본을 유지하거나 로컬 데이터를 유지하려면 AWSCognitoDatasetDeletedHandler를 구현하세요.

클라이언트 수준에서 데이터 세트 삭제 핸들러를 설정할 수 있습니다.

client.datasetDeletedHandler = ^BOOL (NSString *datasetName) { // make a backup of the data if you choose ... // delete the local data (default behavior) return YES; };

또는 데이터 세트 수준에서 해당 핸들러를 설정할 수 있습니다.

dataset.datasetDeletedHandler = ^BOOL (NSString *datasetName) { // override default and keep the local data return NO; };

데이터 세트 병합 핸들러

이전에 연결되지 않은 두 자격 증명이 서로 연결되면 해당 데이터 세트가 모두 병합됩니다. 애플리케이션은 DatasetMergeHandler를 통해 병합에 대한 알림을 받습니다. 핸들러는 루트 데이터 세트의 이름과 루트 데이터 세트의 병합으로 표시된 데이터 세트 이름의 어레이를 받습니다.

DatasetMergeHandler가 구현되지 않으면 이러한 데이터 세트가 무시되지만, 자격 증명의 20개 최대 총 데이터 세트에서 공간을 계속 소비합니다.

클라이언트 수준에서 데이터 세트 병합 핸들러를 설정할 수 있습니다.

client.datasetMergedHandler = ^(NSString *datasetName, NSArray *datasets) { // Blindly delete the datasets for (NSString *name in datasets) { AWSCognitoDataset *merged = [[AWSCognito defaultCognito] openOrCreateDataset:name]; [merged clear]; [merged synchronize]; } };

또는 데이터 세트 수준에서 해당 핸들러를 설정할 수 있습니다.

dataset.datasetMergedHandler = ^(NSString *datasetName, NSArray *datasets) { // Blindly delete the datasets for (NSString *name in datasets) { AWSCognitoDataset *merged = [[AWSCognito defaultCognito] openOrCreateDataset:name]; // do something with the data if it differs from existing dataset ... // now delete it [merged clear]; [merged synchronize]; } };

iOS - Swift

동기화 알림

Amazon Cognito 클라이언트는 동기화를 호출하는 중 여러 NSNotification 이벤트를 출력합니다. 표준 NSNotificationCenter를 통해 이러한 알림을 모니터링하도록 등록할 수 있습니다.

NSNotificationCenter.defaultCenter().addObserver(observer: self, selector: "myNotificationHandler", name:NOTIFICATION_TYPE, object:nil)

Amazon Cognito는 아래에 나열된 대로 5가지 알림 유형을 지원합니다.

AWSCognitoDidStartSynchronizeNotification

동기화 작업이 시작될 때 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트가 포함되어 있습니다.

AWSCognitoDidEndSynchronizeNotification

동기화 작업이 완료(성공 등)될 때 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트가 포함되어 있습니다.

AWSCognitoDidFailToSynchronizeNotification

동기화 작업이 실패할 때 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트와 실패의 원인인 오류가 포함된 핵심 오류가 포함되어 있습니다.

AWSCognitoDidChangeRemoteValueNotification

로컬 변경 사항이 Amazon Cognito에 성공적으로 푸시된 경우 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트와 푸시된 레코드 키의 NSArray가 포함된 핵심 키가 포함되어 있습니다.

AWSCognitoDidChangeLocalValueFromRemoteNotification

동기화 작업으로 인해 로컬 값이 변경될 때 호출됩니다. userInfo에는 동기화되는 데이터 세트의 이름인 핵심 데이터 세트와 변경된 레코드 키의 NSArray가 포함된 핵심 키가 포함되어 있습니다.

충돌 해결 핸들러

동기화 작업 중 로컬 스토어와 동기화 스토어에서 동일한 키가 수정된 경우 충돌이 발생할 수 있습니다. 충돌 해결 핸들러를 설정하지 않은 경우 Amazon Cognito에서는 기본적으로 가장 최근 업데이트를 선택합니다.

AWSCognitoRecordConflictHandler를 구현하고 할당하면 기본 충돌 해결을 변경할 수 있습니다. AWSCognitoConflict 입력 파라미터 충돌에는 로컬로 캐시된 데이터와 동기화 스토어의 충돌 레코드 둘 모두에 대한 AWSCognitoRecord 객체가 포함됩니다. AWSCognitoConflict를 사용하면 로컬 레코드 [conflict resolveWithLocalRecord]와 원격 레코드 [conflict resolveWithRemoteRecord] 또는 새로운 값인 [conflict resolveWithValue:value]를 사용하여 충돌을 해결할 수 있습니다. 이 메서드에서 nil을 반환하면 동기화가 계속되지 않으며, 다음에 동기화 프로세스를 시작할 때 충돌이 다시 표시됩니다.

클라이언트 수준에서 충돌 해결 핸들러를 설정할 수 있습니다.

client.conflictHandler = { (datasetName: String?, conflict: AWSCognitoConflict?) -> AWSCognitoResolvedConflict? in return conflict.resolveWithLocalRecord() }

또는 데이터 세트 수준에서 해당 핸들러를 설정할 수 있습니다.

dataset.conflictHandler = { (datasetName: String?, conflict: AWSCognitoConflict?) -> AWSCognitoResolvedConflict? in return conflict.resolveWithLocalRecord() }

데이터 세트 삭제 핸들러

데이터 세트가 삭제되면 Amazon Cognito 클라이언트는 AWSCognitoDatasetDeletedHandler를 사용하여 로컬로 캐싱된 데이터 세트의 사본도 삭제해야 하는지 여부를 확인합니다. AWSCognitoDatasetDeletedHandler가 구현되지 않으면 로컬 데이터가 자동으로 제거됩니다. 제거하기 전에 로컬 데이터의 사본을 유지하거나 로컬 데이터를 유지하려면 AWSCognitoDatasetDeletedHandler를 구현하세요.

클라이언트 수준에서 데이터 세트 삭제 핸들러를 설정할 수 있습니다.

client.datasetDeletedHandler = { (datasetName: String!) -> Bool in // make a backup of the data if you choose ... // delete the local data (default behaviour) return true }

또는 데이터 세트 수준에서 해당 핸들러를 설정할 수 있습니다.

dataset.datasetDeletedHandler = { (datasetName: String!) -> Bool in // make a backup of the data if you choose ... // delete the local data (default behaviour) return true }

데이터 집합 병합 핸들러

이전에 연결되지 않은 두 자격 증명이 서로 연결되면 해당 데이터 세트가 모두 병합됩니다. 애플리케이션은 DatasetMergeHandler를 통해 병합에 대한 알림을 받습니다. 핸들러는 루트 데이터 세트의 이름과 루트 데이터 세트의 병합으로 표시된 데이터 세트 이름의 어레이를 받습니다.

DatasetMergeHandler가 구현되지 않으면 이러한 데이터 세트가 무시되지만, 자격 증명의 20개 최대 총 데이터 세트에서 공간을 계속 소비합니다.

클라이언트 수준에서 데이터 세트 병합 핸들러를 설정할 수 있습니다.

client.datasetMergedHandler = { (datasetName: String!, datasets: [AnyObject]!) -> Void in for nameObject in datasets { if let name = nameObject as? String { let merged = AWSCognito.defaultCognito().openOrCreateDataset(name) merged.clear() merged.synchronize() } } }

또는 데이터 세트 수준에서 해당 핸들러를 설정할 수 있습니다.

dataset.datasetMergedHandler = { (datasetName: String!, datasets: [AnyObject]!) -> Void in for nameObject in datasets { if let name = nameObject as? String { let merged = AWSCognito.defaultCognito().openOrCreateDataset(name) // do something with the data if it differs from existing dataset ... // now delete it merged.clear() merged.synchronize() } } }

JavaScript

동기화 콜백

데이터 세트에 대해 synchronize()를 수행하면 선택적으로 콜백을 지정하여 다음의 각 상태를 처리할 수 있습니다.

dataset.synchronize({ onSuccess: function(dataset, newRecords) { //... }, onFailure: function(err) { //... }, onConflict: function(dataset, conflicts, callback) { //... }, onDatasetDeleted: function(dataset, datasetName, callback) { //... }, onDatasetMerged: function(dataset, datasetNames, callback) { //... } });

onSuccess()

onSuccess() 콜백은 동기화 스토어에서 데이터 세트를 성공적으로 업데이트한 경우 트리거됩니다. 콜백을 정의하지 않으면 동기화가 자동으로 수행됩니다.

onSuccess: function(dataset, newRecords) { console.log('Successfully synchronized ' + newRecords.length + ' new records.'); }

onFailure()

동기화 중 예외가 발생할 경우 onFailure()가 호출됩니다. 콜백을 정의하지 않으면 동기화가 자동으로 실패합니다.

onFailure: function(err) { console.log('Synchronization failed.'); console.log(err); }

onConflict()

로컬 스토어와 동기화 스토어에서 동일한 키가 수정된 경우 충돌이 발생할 수 있습니다. onConflict() 메서드는 충돌 해결을 처리합니다. 이 메서드를 구현하지 않으면 충돌이 있는 경우 동기화가 중단됩니다.

onConflict: function(dataset, conflicts, callback) { var resolved = []; for (var i=0; i<conflicts.length; i++) { // Take remote version. resolved.push(conflicts[i].resolveWithRemoteRecord()); // Or... take local version. // resolved.push(conflicts[i].resolveWithLocalRecord()); // Or... use custom logic. // var newValue = conflicts[i].getRemoteRecord().getValue() + conflicts[i].getLocalRecord().getValue(); // resolved.push(conflicts[i].resovleWithValue(newValue); } dataset.resolve(resolved, function() { return callback(true); }); // Or... callback false to stop the synchronization process. // return callback(false); }

onDatasetDeleted()

데이터 세트가 삭제되면 Amazon Cognito 클라이언트는 onDatasetDeleted() 콜백을 사용하여 로컬로 캐시된 데이터 세트의 사본도 삭제해야 하는지 여부를 결정합니다. 기본적으로 데이터 세트는 삭제되지 않습니다.

onDatasetDeleted: function(dataset, datasetName, callback) { // Return true to delete the local copy of the dataset. // Return false to handle deleted datasets outside the synchronization callback. return callback(true); }

onDatasetMerged()

이전에 연결되지 않은 두 자격 증명이 서로 연결되면 해당 데이터 세트가 모두 병합됩니다. 애플리케이션은 onDatasetsMerged() 콜백을 통해 병합에 대한 알림을 받습니다.

onDatasetMerged: function(dataset, datasetNames, callback) { // Return true to continue the synchronization process. // Return false to handle dataset merges outside the synchronization callback. return callback(false); }

Unity

데이터 세트를 열거나 생성한 후 Synchronize 메서드를 사용할 때 트리거되는 여러 콜백을 해당 데이터 세트에 설정할 수 있습니다. 데이터 세트에 콜백을 등록하는 방법은 다음과 같습니다.

dataset.OnSyncSuccess += this.HandleSyncSuccess; dataset.OnSyncFailure += this.HandleSyncFailure; dataset.OnSyncConflict = this.HandleSyncConflict; dataset.OnDatasetMerged = this.HandleDatasetMerged; dataset.OnDatasetDeleted = this.HandleDatasetDeleted;

SyncSuccessSyncFailure는 = 대신 +=를 사용하므로 이에 대해 둘 이상의 콜백을 구독할 수 있습니다.

OnSyncSuccess

OnSyncSuccess 콜백은 클라우드에서 데이터 세트를 성공적으로 업데이트한 경우 트리거됩니다. 콜백을 정의하지 않으면 동기화가 자동으로 수행됩니다.

private void HandleSyncSuccess(object sender, SyncSuccessEvent e) { // Continue with your game flow, display the loaded data, etc. }

OnSyncFailure

동기화 중 예외가 발생할 경우 OnSyncFailure가 호출됩니다. 콜백을 정의하지 않으면 동기화가 자동으로 실패합니다.

private void HandleSyncFailure(object sender, SyncFailureEvent e) { Dataset dataset = sender as Dataset; if (dataset.Metadata != null) { Debug.Log("Sync failed for dataset : " + dataset.Metadata.DatasetName); } else { Debug.Log("Sync failed"); } // Handle the error Debug.LogException(e.Exception); }

OnSyncConflict

로컬 스토어와 동기화 스토어에서 동일한 키가 수정된 경우 충돌이 발생할 수 있습니다. OnSyncConflict 콜백은 충돌 해결을 처리합니다. 이 메서드를 구현하지 않으면 충돌이 있는 경우 동기화가 중단됩니다.

private bool HandleSyncConflict(Dataset dataset, List < SyncConflict > conflicts) { if (dataset.Metadata != null) { Debug.LogWarning("Sync conflict " + dataset.Metadata.DatasetName); } else { Debug.LogWarning("Sync conflict"); } List < Amazon.CognitoSync.SyncManager.Record > resolvedRecords = new List < Amazon.CognitoSync.SyncManager.Record > (); foreach(SyncConflict conflictRecord in conflicts) { // SyncManager provides the following default conflict resolution methods: // ResolveWithRemoteRecord - overwrites the local with remote records // ResolveWithLocalRecord - overwrites the remote with local records // ResolveWithValue - to implement your own logic resolvedRecords.Add(conflictRecord.ResolveWithRemoteRecord()); } // resolves the conflicts in local storage dataset.Resolve(resolvedRecords); // on return true the synchronize operation continues where it left, // returning false cancels the synchronize operation return true; }

OnDatasetDeleted

데이터 세트가 삭제되면 Amazon Cognito 클라이언트는 OnDatasetDeleted 콜백을 사용하여 로컬로 캐시된 데이터 세트의 사본도 삭제해야 하는지 여부를 결정합니다. 기본적으로 데이터 세트는 삭제되지 않습니다.

private bool HandleDatasetDeleted(Dataset dataset) { Debug.Log(dataset.Metadata.DatasetName + " Dataset has been deleted"); // Do clean up if necessary // returning true informs the corresponding dataset can be purged in the local storage and return false retains the local dataset return true; }

OnDatasetMerged

이전에 연결되지 않은 두 자격 증명이 서로 연결되면 해당 데이터 세트가 모두 병합됩니다. 애플리케이션은 OnDatasetsMerged 콜백을 통해 병합에 대한 알림을 받습니다.

public bool HandleDatasetMerged(Dataset localDataset, List<string> mergedDatasetNames) { foreach (string name in mergedDatasetNames) { Dataset mergedDataset = syncManager.OpenOrCreateDataset(name); //Lambda function to delete the dataset after fetching it EventHandler<SyncSuccessEvent> lambda; lambda = (object sender, SyncSuccessEvent e) => { ICollection<string> existingValues = localDataset.GetAll().Values; ICollection<string> newValues = mergedDataset.GetAll().Values; //Implement your merge logic here mergedDataset.Delete(); //Delete the dataset locally mergedDataset.OnSyncSuccess -= lambda; //We don't want this callback to be fired again mergedDataset.OnSyncSuccess += (object s2, SyncSuccessEvent e2) => { localDataset.Synchronize(); //Continue the sync operation that was interrupted by the merge }; mergedDataset.Synchronize(); //Synchronize it as deleted, failing to do so will leave us in an inconsistent state }; mergedDataset.OnSyncSuccess += lambda; mergedDataset.Synchronize(); //Asnchronously fetch the dataset } // returning true allows the Synchronize to continue and false stops it return false; }

Xamarin

데이터 세트를 열거나 생성한 후 Synchronize 메서드를 사용할 때 트리거되는 여러 콜백을 해당 데이터 세트에 설정할 수 있습니다. 데이터 세트에 콜백을 등록하는 방법은 다음과 같습니다.

dataset.OnSyncSuccess += this.HandleSyncSuccess; dataset.OnSyncFailure += this.HandleSyncFailure; dataset.OnSyncConflict = this.HandleSyncConflict; dataset.OnDatasetMerged = this.HandleDatasetMerged; dataset.OnDatasetDeleted = this.HandleDatasetDeleted;

SyncSuccessSyncFailure는 = 대신 +=를 사용하므로 이에 대해 둘 이상의 콜백을 구독할 수 있습니다.

OnSyncSuccess

OnSyncSuccess 콜백은 클라우드에서 데이터 세트를 성공적으로 업데이트한 경우 트리거됩니다. 콜백을 정의하지 않으면 동기화가 자동으로 수행됩니다.

private void HandleSyncSuccess(object sender, SyncSuccessEventArgs e) { // Continue with your game flow, display the loaded data, etc. }

OnSyncFailure

동기화 중 예외가 발생할 경우 OnSyncFailure가 호출됩니다. 콜백을 정의하지 않으면 동기화가 자동으로 실패합니다.

private void HandleSyncFailure(object sender, SyncFailureEventArgs e) { Dataset dataset = sender as Dataset; if (dataset.Metadata != null) { Console.WriteLine("Sync failed for dataset : " + dataset.Metadata.DatasetName); } else { Console.WriteLine("Sync failed"); } }

OnSyncConflict

로컬 스토어와 동기화 스토어에서 동일한 키가 수정된 경우 충돌이 발생할 수 있습니다. OnSyncConflict 콜백은 충돌 해결을 처리합니다. 이 메서드를 구현하지 않으면 충돌이 있는 경우 동기화가 중단됩니다.

private bool HandleSyncConflict(Dataset dataset, List < SyncConflict > conflicts) { if (dataset.Metadata != null) { Console.WriteLine("Sync conflict " + dataset.Metadata.DatasetName); } else { Console.WriteLine("Sync conflict"); } List < Amazon.CognitoSync.SyncManager.Record > resolvedRecords = new List < Amazon.CognitoSync.SyncManager.Record > (); foreach(SyncConflict conflictRecord in conflicts) { // SyncManager provides the following default conflict resolution methods: // ResolveWithRemoteRecord - overwrites the local with remote records // ResolveWithLocalRecord - overwrites the remote with local records // ResolveWithValue - to implement your own logic resolvedRecords.Add(conflictRecord.ResolveWithRemoteRecord()); } // resolves the conflicts in local storage dataset.Resolve(resolvedRecords); // on return true the synchronize operation continues where it left, // returning false cancels the synchronize operation return true; }

OnDatasetDeleted

데이터 세트가 삭제되면 Amazon Cognito 클라이언트는 OnDatasetDeleted 콜백을 사용하여 로컬로 캐시된 데이터 세트의 사본도 삭제해야 하는지 여부를 결정합니다. 기본적으로 데이터 세트는 삭제되지 않습니다.

private bool HandleDatasetDeleted(Dataset dataset) { Console.WriteLine(dataset.Metadata.DatasetName + " Dataset has been deleted"); // Do clean up if necessary // returning true informs the corresponding dataset can be purged in the local storage and return false retains the local dataset return true; }

OnDatasetMerged

이전에 연결되지 않은 두 자격 증명이 서로 연결되면 해당 데이터 세트가 모두 병합됩니다. 애플리케이션은 OnDatasetsMerged 콜백을 통해 병합에 대한 알림을 받습니다.

public bool HandleDatasetMerged(Dataset localDataset, List<string> mergedDatasetNames) { foreach (string name in mergedDatasetNames) { Dataset mergedDataset = syncManager.OpenOrCreateDataset(name); //Implement your merge logic here mergedDataset.OnSyncSuccess += lambda; mergedDataset.SynchronizeAsync(); //Asnchronously fetch the dataset } // returning true allows the Synchronize to continue and false stops it return false; }