Menangani callback acara - Amazon Cognito

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menangani callback acara

Jika Anda baru mengenal Amazon Cognito Sync, gunakan AWS AppSync. Seperti Amazon Cognito Sync, AWS AppSync adalah layanan untuk menyinkronkan data aplikasi di seluruh perangkat.

Hal ini memungkinkan data pengguna seperti preferensi aplikasi atau game state agar dapat disinkronkan. Hal ini juga memperluas kemampuan ini dengan memungkinkan beberapa pengguna untuk menyinkronkan dan berkolaborasi secara langsung pada data bersama.

Sebagai pengembang Amazon Cognito Sync, Anda dapat menerapkan berbagai panggilan balik untuk menangani berbagai peristiwa dan skenario sinkronisasi. SyncCallbackAntarmuka di Android SDK mengonfigurasi notifikasi tentang sinkronisasi kumpulan data, termasuk onSuccess() kapan kumpulan data berhasil diunduh, onFailure() saat pengecualian terjadi, dan onConflict() untuk menyelesaikan konflik antara data lokal dan jarak jauh.

Di iOSSDK, Anda dapat mendaftar untuk pemberitahuan serupa seperti AWSCognitoDidStartSynchronizeNotification dan mengatur penangan seperti AWSCognitoRecordConflictHandler untuk resolusi konflik. Platform JavaScript, Unity, dan Xamarin memiliki mekanisme callback analog. Saat Anda menerapkan callback ini, aplikasi Anda dapat menangani berbagai peristiwa dan skenario sinkronisasi dengan anggun yang dapat terjadi saat menggunakan Amazon Cognito Sync.

Android

SyncCallback Antarmuka

Dengan menerapkan antarmuka SyncCallback, Anda dapat menerima pemberitahuan di aplikasi Anda tentang sinkronisasi set data. Aplikasi Anda kemudian dapat membuat keputusan aktif tentang menghapus data lokal, menggabungkan profil yang tidak diautentikasi dan terautentikasi, dan menyelesaikan konflik sinkronisasi. Anda harus menerapkan metode berikut, yang diperlukan oleh antarmuka:

  • onSuccess()

  • onFailure()

  • onConflict()

  • onDatasetDeleted()

  • onDatasetsMerged()

Perhatikan bahwa, jika Anda tidak ingin menentukan semua callback, Anda juga dapat menggunakan kelas DefaultSyncCallback yang menyediakan implementasi kosong dan default untuk mereka semua.

onSuccess

Callback onSuccess() dipicu saat set data berhasil diunduh dari sync store.

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

onFailure

onFailure() dipanggil jika pengecualian terjadi selama sinkronisasi.

@Override public void onFailure(DataStorageException dse) { }

onConflict

Konflik mungkin timbul jika kunci yang sama telah diubah di local store dan sync store. Metode onConflict() menangani resolusi konflik. Jika Anda tidak menerapkan metode ini, Amazon Cognito Sync client menerapkan default dengan menggunakan perubahan terbaru.

@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

Ketika set data dihapus, Amazon Cognito client menggunakan antarmuka SyncCallback untuk memastikan apakah salinan yang di-cache-kan secara lokal pada set data harus dihapus juga. Terapkan onDatasetDeleted() metode untuk memberi tahu klien SDK apa yang harus dilakukan dengan data lokal.

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

onDatasetMerged

Ketika dua identitas yang sebelumnya tidak terhubung dihubungkan bersama-sama, semua set data mereka digabung. Aplikasi akan menerima pemberitahuan tentang penggabungan melalui metode 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

Pemberitahuan Sinkronisasi

Amazon Cognito client akan memancarkan sejumlah peristiwa NSNotification selama panggilan sinkronisasi. Anda dapat mendaftar untuk memantau notifikasi ini melalui standar NSNotificationCenter:

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

Amazon Cognito mendukung lima jenis notifikasi, sebagaimana yang tercantum di bawah ini.

AWSCognitoDidStartSynchronizeNotification

Dipanggil ketika operasi sinkronisasi dimulai. userInfo akan berisi set data kunci yang merupakan nama dari set data yang disinkronkan.

AWSCognitoDidEndSynchronizeNotification

Disebut ketika operasi sinkronisasi selesai (berhasil atau sebaliknya). userInfo akan berisi set data kunci yang merupakan nama dari set data yang disinkronkan.

AWSCognitoDidFailToSynchronizeNotification

Dipanggil ketika operasi sinkronisasi gagal. userInfo akan berisi set data kunci yang merupakan nama set data yang disinkronkan dan kesalahan kunci yang akan berisi kesalahan yang menyebabkan kegagalan.

AWSCognitoDidChangeRemoteValueNotification

Dipanggil ketika perubahan lokal berhasil didorong ke Amazon Cognito. userInfoAkan berisi dataset kunci yang merupakan nama dataset yang disinkronkan dan kunci kunci yang akan berisi kunci rekam NSArray yang didorong.

AWSCognitoDidChangeLocalValueFromRemoteNotification

Dipanggil ketika nilai lokal berubah akibat operasi sinkronisasi. userInfoAkan berisi dataset kunci yang merupakan nama dataset yang disinkronkan dan kunci kunci yang akan berisi kunci rekam NSArray yang berubah.

Penangan Resolusi Konflik

Selama operasi sinkronisasi, konflik mungkin timbul jika kunci yang sama telah diubah di local store dan sync store. Jika Anda belum menetapkan penanganan resolusi konflik, Amazon Cognito menetapkan setelan default yaitu memilih pembaruan terbaru.

Dengan menerapkan dan menetapkan, AWSCognitoRecordConflictHandler Anda dapat mengubah resolusi konflik default. Konflik parameter AWSCognitoConflict input berisi AWSCognitoRecord objek untuk data cache lokal dan untuk catatan yang bertentangan di penyimpanan sinkronisasi. Dengan menggunakan AWSCognitoConflict Anda dapat menyelesaikan konflik dengan local record: [conflict resolveWithLocal Record], remote record: [conflict resolveWithRemote Record] atau brand new value: [conflict resolveWithValue: value]. Menampilkan nil dari metode ini mencegah sinkronisasi berlanjut dan konflik akan ditampilkan lagi saat proses sinkronisasi dimulai kembali.

Anda dapat mengatur penanganan resolusi konflik di tingkat klien:

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

Atau pada tingkat set data:

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

Dataset Dihapus Handler

Ketika set data dihapus, Amazon Cognito client menggunakan AWSCognitoDatasetDeletedHandler untuk memastikan apakah salinan yang di-cache-kan secara lokal pada set data harus dihapus juga. Jika no AWSCognitoDatasetDeletedHandler tidak diimplementasikan, data lokal akan dibersihkan secara otomatis. Terapkan AWSCognitoDatasetDeletedHandler jika Anda ingin menyimpan salinan data lokal sebelum menghapus, atau untuk menyimpan data lokal.

Anda dapat mengatur handler dengan set data terhapus pada tingkat klien:

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

Atau pada tingkat set data:

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

Dataset Gabungan Handler

Ketika dua identitas yang sebelumnya tidak terhubung dihubungkan bersama-sama, semua set data mereka digabung. Aplikasi akan menerima notifikasi tentang penggabungan melalui DatasetMergeHandler. Handler akan menerima nama set data root serta array nama set data yang ditandai sebagai penggabungan dari set data root.

Jika no DatasetMergeHandler tidak diimplementasikan, set data ini akan diabaikan, tetapi akan terus menggunakan ruang dalam total set data maksimal 20 milik identitas.

Anda dapat mengatur handler dengan gabungan set data pada tingkat klien:

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]; } };

Atau pada tingkat set data:

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

Pemberitahuan Sinkronisasi

Amazon Cognito client akan memancarkan sejumlah peristiwa NSNotification selama panggilan sinkronisasi. Anda dapat mendaftar untuk memantau notifikasi ini melalui standar NSNotificationCenter:

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

Amazon Cognito mendukung lima jenis notifikasi, sebagaimana yang tercantum di bawah ini.

AWSCognitoDidStartSynchronizeNotification

Dipanggil ketika operasi sinkronisasi dimulai. userInfo akan berisi set data kunci yang merupakan nama dari set data yang disinkronkan.

AWSCognitoDidEndSynchronizeNotification

Disebut ketika operasi sinkronisasi selesai (berhasil atau sebaliknya). userInfo akan berisi set data kunci yang merupakan nama dari set data yang disinkronkan.

AWSCognitoDidFailToSynchronizeNotification

Dipanggil ketika operasi sinkronisasi gagal. userInfo akan berisi set data kunci yang merupakan nama set data yang disinkronkan dan kesalahan kunci yang akan berisi kesalahan yang menyebabkan kegagalan.

AWSCognitoDidChangeRemoteValueNotification

Dipanggil ketika perubahan lokal berhasil didorong ke Amazon Cognito. userInfoAkan berisi dataset kunci yang merupakan nama dataset yang disinkronkan dan kunci kunci yang akan berisi kunci rekam NSArray yang didorong.

AWSCognitoDidChangeLocalValueFromRemoteNotification

Dipanggil ketika nilai lokal berubah akibat operasi sinkronisasi. userInfoAkan berisi dataset kunci yang merupakan nama dataset yang disinkronkan dan kunci kunci yang akan berisi kunci rekam NSArray yang berubah.

Penangan Resolusi Konflik

Selama operasi sinkronisasi, konflik mungkin timbul jika kunci yang sama telah diubah di local store dan sync store. Jika Anda belum menetapkan penanganan resolusi konflik, Amazon Cognito menetapkan setelan default yaitu memilih pembaruan terbaru.

Dengan menerapkan dan menetapkan AWSCognitoRecordConflictHandler Anda dapat mengubah resolusi konflik default. Konflik parameter input AWSCognitoConflict berisi objek AWSCognitoRecord untuk data yang di-cache-kan scara lokal dan catatan yang bertentangan di sync store. Dengan menggunakan AWSCognitoConflict Anda dapat menyelesaikan konflik dengan local record: [conflict resolveWithLocal Record], remote record: [conflict resolveWithRemote Record] atau brand new value: [conflict resolveWithValue: value]. Menampilkan nil dari metode ini mencegah sinkronisasi berlanjut dan konflik akan ditampilkan lagi saat proses sinkronisasi dimulai kembali.

Anda dapat mengatur penanganan resolusi konflik di tingkat klien:

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

Atau pada tingkat set data:

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

Dataset Dihapus Handler

Ketika set data dihapus, Amazon Cognito client menggunakan AWSCognitoDatasetDeletedHandler untuk memastikan apakah salinan yang di-cache-kan secara lokal pada set data harus dihapus juga. Jika no AWSCognitoDatasetDeletedHandler tidak diimplementasikan, data lokal akan dibersihkan secara otomatis. Terapkan AWSCognitoDatasetDeletedHandler jika Anda ingin menyimpan salinan data lokal sebelum menghapus, atau untuk menyimpan data lokal.

Anda dapat mengatur handler dengan set data terhapus pada tingkat klien:

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

Atau pada tingkat set data:

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

Penangan penggabungan kumpulan data

Ketika dua identitas yang sebelumnya tidak terhubung dihubungkan bersama-sama, semua set data mereka digabung. Aplikasi akan menerima notifikasi tentang penggabungan melalui DatasetMergeHandler. Handler akan menerima nama set data root serta array nama set data yang ditandai sebagai penggabungan dari set data root.

Jika no DatasetMergeHandler tidak diimplementasikan, set data ini akan diabaikan, tetapi akan terus menggunakan ruang dalam total set data maksimal 20 milik identitas.

Anda dapat mengatur handler dengan gabungan set data pada tingkat klien:

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() } } }

Atau pada tingkat set data:

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

Callback sinkronisasi

Ketika melakukan sinkronisasi() pada set data, Anda secara opsional dapat menentukan callback untuk menangani masing-masing status berikut:

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()

Callback onSuccess() dipicu saat set data berhasil diunggah dari sync store. Jika Anda tidak menentukan callback, sinkronisasi akan berhasil secara diam-diam.

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

onFailure()

onFailure() dipanggil jika pengecualian terjadi selama sinkronisasi. Jika Anda tidak menentukan callback, sinkronisasi akan gagal secara diam-diam.

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

onConflict()

Konflik mungkin timbul jika kunci yang sama telah diubah di local store dan sync store. Metode onConflict() menangani resolusi konflik. Jika Anda tidak menerapkan metode ini, sinkronisasi akan dibatalkan jika terjadi konflik.

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()

Ketika set data dihapus, Amazon Cognito client menggunakan callback onDatasetDeleted() untuk memutuskan apakah salinan yang di-cache-kan secara lokal pada set data harus dihapus juga. Secara default, set data tidak akan dihapus.

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()

Ketika dua identitas yang sebelumnya tidak terhubung dihubungkan bersama-sama, semua set data mereka digabung. Aplikasi akan menerima notifikasi tentang penggabungan melalui callback 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

Setelah Anda membuka atau membuat set data, Anda dapat mengatur callback yang berbeda untuk itu yang akan dipicu ketika Anda menggunakan metode Sinkronisasi. Ini adalah cara untuk mendaftarkan callback Anda kepada mereka:

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

Perhatikan bahwa SyncSuccess dan SyncFailure menggunakan += instead of = sehingga Anda dapat berlangganan lebih dari satu callback kepada mereka.

OnSyncSuccess

Callback OnSyncSuccess dipicu saat set data berhasil diperbarui dari cloud. Jika Anda tidak menentukan callback, sinkronisasi akan berhasil secara diam-diam.

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

OnSyncFailure

OnSyncFailure dipanggil jika pengecualian terjadi selama sinkronisasi. Jika Anda tidak menentukan callback, sinkronisasi akan gagal secara diam-diam.

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

Konflik mungkin timbul jika kunci yang sama telah diubah di local store dan sync store. Callback OnSyncConflict menangani resolusi konflik. Jika Anda tidak menerapkan metode ini, sinkronisasi akan dibatalkan jika terjadi konflik.

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

Ketika set data dihapus, Amazon Cognito client menggunakan callback OnDatasetDeleted untuk memutuskan apakah salinan yang di-cache-kan secara lokal pada set data harus dihapus juga. Secara default, set data tidak akan dihapus.

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

Ketika dua identitas yang sebelumnya tidak terhubung dihubungkan bersama-sama, semua set data mereka digabung. Aplikasi akan menerima notifikasi tentang penggabungan melalui callback 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

Setelah Anda membuka atau membuat set data, Anda dapat mengatur callback yang berbeda untuk itu yang akan dipicu ketika Anda menggunakan metode Sinkronisasi. Ini adalah cara untuk mendaftarkan callback Anda kepada mereka:

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

Perhatikan bahwa SyncSuccess dan SyncFailure menggunakan += instead of = sehingga Anda dapat berlangganan lebih dari satu callback kepada mereka.

OnSyncSuccess

Callback OnSyncSuccess dipicu saat set data berhasil diperbarui dari cloud. Jika Anda tidak menentukan callback, sinkronisasi akan berhasil secara diam-diam.

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

OnSyncFailure

OnSyncFailure dipanggil jika pengecualian terjadi selama sinkronisasi. Jika Anda tidak menentukan callback, sinkronisasi akan gagal secara diam-diam.

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

Konflik mungkin timbul jika kunci yang sama telah diubah di local store dan sync store. Callback OnSyncConflict menangani resolusi konflik. Jika Anda tidak menerapkan metode ini, sinkronisasi akan dibatalkan jika terjadi konflik.

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

Ketika set data dihapus, Amazon Cognito client menggunakan callback OnDatasetDeleted untuk memutuskan apakah salinan yang di-cache-kan secara lokal pada set data harus dihapus juga. Secara default, set data tidak akan dihapus.

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

Ketika dua identitas yang sebelumnya tidak terhubung dihubungkan bersama-sama, semua set data mereka digabung. Aplikasi akan menerima notifikasi tentang penggabungan melalui callback 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; }