기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이벤트 콜백 처리
Amazon Cognito Sync를 처음 사용하는 경우 AWS AppSync
앱 기본 설정이나 게임 상태 같은 사용자 데이터를 동기화할 수 있습니다. 또한 이러한 기능을 더욱 확장해, 복수의 사용자가 공유 데이터를 실시간으로 동기화하고 협업할 수 있게 합니다.
Amazon Cognito Sync 개발자는 다양한 콜백을 구현하여 다양한 동기화 이벤트 및 시나리오를 처리할 수 있습니다. Android의 SyncCallback
인터페이스는 데이터 세트가 성공적으로 다운로드되는 onSuccess()
시기, 예외가 발생하는 onFailure()
시기, 로컬 데이터와 원격 데이터 간의 충돌을 해결하는 등 데이터 세트 동기화onConflict()
에 대한 알림을 SDK 구성합니다.
iOS 에서는 와 유사한 알림에 등록AWSCognitoDidStartSynchronizeNotification
하고 충돌 해결을 위해 와 같은 핸들러AWSCognitoRecordConflictHandler
를 설정할 SDK수 있습니다. JavaScript, Unity 및 Xamarin 플랫폼에는 유사한 콜백 메커니즘이 있습니다. 이러한 콜백을 구현하면 애플리케이션이 Amazon Cognito Sync를 사용할 때 발생할 수 있는 다양한 동기화 이벤트 및 시나리오를 정상적으로 처리할 수 있습니다.
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
인터페이스를 사용하여 로컬로 캐싱된 데이터 세트의 사본도 삭제해야 하는지 여부를 확인합니다. 클라이언트에게 로컬 데이터로 SDK 수행할 작업을 알려주는 onDatasetDeleted()
방법을 구현합니다.
@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 객체가 포함됩니다. 를 사용하여 로컬 레코드 [분쟁 resolveWithLocal레코드], 원격 레코드 [분쟁 resolveWithRemote레코드] 또는 새 값 [분쟁 resolveWithValue:값]과 충돌을 해결할 AWSCognitoConflict 수 있습니다. 이 메서드에서 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
객체가 포함됩니다. 를 사용하여 로컬 레코드 [분쟁 resolveWithLocal레코드], 원격 레코드 [분쟁 resolveWithRemote레코드] 또는 새 값 [분쟁 resolveWithValue:값]과 충돌을 해결할 AWSCognitoConflict
수 있습니다. 이 메서드에서 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;
SyncSuccess
및 SyncFailure
는 = 대신 +=를 사용하므로 이에 대해 둘 이상의 콜백을 구독할 수 있습니다.
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;
SyncSuccess
및 SyncFailure
는 = 대신 +=를 사용하므로 이에 대해 둘 이상의 콜백을 구독할 수 있습니다.
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; }