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
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. SyncCallback
Antarmuka 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. userInfo
Akan 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. userInfo
Akan 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. userInfo
Akan 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. userInfo
Akan 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; }