Menerapkan sinkronisasi push - Amazon Cognito

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

Menerapkan sinkronisasi push

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.

Amazon Cognito secara otomatis melacak hubungan antara identitas dan perangkat. Dengan menggunakan fitur sinkronisasi push, atau push sync, Anda dapat memastikan bahwa setiap instans dari identitas yang diberikan akan diberitahukan ketika data identitas berubah. Sinkronisasi push memastikan bahwa, setiap kali sinkronisasi menyimpan perubahan data untuk identitas tertentu, semua perangkat yang terkait dengan identitas tersebut menerima notifikasi push diam yang memberitahukan perubahan tersebut.

catatan

Sinkronisasi push tidak didukung untuk JavaScript, Unity, atau Xamarin.

Sebelum Anda dapat menggunakan push sync, Anda harus terlebih dahulu menyiapkan akun Anda untuk push sync dan mengaktifkan push sync di konsol Amazon Cognito.

Buat aplikasi Amazon Simple Notification Service (AmazonSNS)

Buat dan konfigurasikan SNS aplikasi Amazon untuk platform yang didukung, seperti yang dijelaskan dalam Panduan SNS Pengembang.

Aktifkan sinkronisasi push di konsol Amazon Cognito

Anda dapat mengaktifkan push sync di konsol Amazon Cognito. Dari halaman beranda konsol:

  1. Klik nama kolam identitas berisi push sync yang ingin Anda aktifkan. Halaman Dasbor untuk kolam identitas Anda akan muncul.

  2. Di pojok kanan atas halaman Dasbor, klik Kelola Kolam Identitas. Halaman Gabungan identitas muncul.

  3. Gulir ke bawah dan klik Sinkronisasi push untuk memperluasnya.

  4. Di menu tarik-turun peran Layanan, pilih IAM peran yang memberikan izin Cognito untuk mengirim pemberitahuan. SNS Klik Buat peran untuk membuat atau mengubah peran yang terkait dengan kumpulan identitas Anda di AWS IAMKonsol.

  5. Pilih aplikasi platform, kemudian klik Simpan perubahan.

  6. Berikan SNS Akses ke Aplikasi Anda

Di AWS Identity and Access Management konsol, konfigurasikan IAM peran Anda untuk memiliki SNS akses Amazon penuh, atau buat peran baru yang memiliki SNS akses Amazon penuh. Contoh kebijakan kepercayaan peran berikut memberi Amazon Cognito Sync kemampuan terbatas untuk mengambil peranIAM. Sinkronisasi Amazon Cognito hanya dapat mengambil peran ketika melakukannya atas nama kumpulan identitas dalam aws:SourceArn kondisi dan akun dalam kondisi tersebutaws:SourceAccount.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cognito-sync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" }, "ArnLike": { "AWS:SourceArn": "arn:aws:cognito-identity:us-east-1:123456789012:identitypool/us-east-1:177a950c-2c08-43f0-9983-28727EXAMPLE" } } } ] }

Untuk mempelajari lebih lanjut tentang IAM peran, lihat Peran (Delegasi dan Federasi).

Gunakan sinkronisasi push di aplikasi Anda: Android

Aplikasi Anda akan perlu mengimpor layanan Google Play. Anda dapat mengunduh versi terbaru Google Play SDK melalui SDKpengelola Android. Ikuti dokumentasi Android tentang Implementasi Android untuk mendaftarkan aplikasi Anda dan menerima ID pendaftaran dariGCM. Setelah Anda memiliki ID registrasi, Anda perlu mendaftarkan perangkat dengan Amazon Cognito, seperti yang ditunjukkan pada cuplikan di bawah ini:

String registrationId = "MY_GCM_REGISTRATION_ID"; try { client.registerDevice("GCM", registrationId); } catch (RegistrationFailedException rfe) { Log.e(TAG, "Failed to register device for silent sync", rfe); } catch (AmazonClientException ace) { Log.e(TAG, "An unknown error caused registration for silent sync to fail", ace); }

Sekarang Anda dapat berlangganan perangkat untuk menerima pembaruan dari set data tertentu:

Dataset trackedDataset = client.openOrCreateDataset("myDataset"); if (client.isDeviceRegistered()) { try { trackedDataset.subscribe(); } catch (SubscribeFailedException sfe) { Log.e(TAG, "Failed to subscribe to datasets", sfe); } catch (AmazonClientException ace) { Log.e(TAG, "An unknown error caused the subscription to fail", ace); } }

Untuk berhenti menerima notifikasi push dari set data, cukup panggil metode berhenti berlangganan. Untuk berlangganan semua set data (atau subset tertentu) di objek CognitoSyncManager, gunakan subscribeAll():

if (client.isDeviceRegistered()) { try { client.subscribeAll(); } catch (SubscribeFailedException sfe) { Log.e(TAG, "Failed to subscribe to datasets", sfe); } catch (AmazonClientException ace) { Log.e(TAG, "An unknown error caused the subscription to fail", ace); } }

Dalam implementasi BroadcastReceiver objek Android, Anda dapat memeriksa versi terbaru dari kumpulan data yang dimodifikasi dan memutuskan apakah aplikasi perlu disinkronkan lagi:

@Override public void onReceive(Context context, Intent intent) { PushSyncUpdate update = client.getPushSyncUpdate(intent); // The update has the source (cognito-sync here), identityId of the // user, identityPoolId in question, the non-local sync count of the // data set and the name of the dataset. All are accessible through // relevant getters. String source = update.getSource(); String identityPoolId = update.getIdentityPoolId(); String identityId = update.getIdentityId(); String datasetName = update.getDatasetName; long syncCount = update.getSyncCount; Dataset dataset = client.openOrCreateDataset(datasetName); // need to access last sync count. If sync count is less or equal to // last sync count of the dataset, no sync is required. long lastSyncCount = dataset.getLastSyncCount(); if (lastSyncCount < syncCount) { dataset.synchronize(new SyncCallback() { // ... }); } }

Tombol berikut tersedia dalam muatan notifikasi push:

  • source: cognito-sync. Ini dapat berfungsi sebagai faktor pembeda antara notifikasi.

  • identityPoolId: ID kolam identitas. Ini dapat digunakan untuk validasi atau informasi tambahan, meskipun tidak terpisahkan dari sudut pandang penerima.

  • identityId: ID identitas dalam kolam.

  • datasetName: Nama set data yang diperbarui. Ini tersedia demi panggilan openOrCreate Dataset.

  • syncCount: Jumlah sinkronisasi untuk set data jarak jauh. Anda dapat menggunakan ini sebagai cara untuk memastikan bahwa set data lokal telah kedaluwarsa, dan sinkronisasi yang masuk adalah sinkronisasi baru.

Menggunakan sinkronisasi push di aplikasi Anda: iOS - Objective-C

Agar dapat mendapatkan token perangkat untuk aplikasi Anda, ikuti dokumentasi Apple pada Pendaftaran Notifikasi Jarak Jauh. Setelah menerima token perangkat sebagai NSData objek dariAPNs, Anda harus mendaftarkan perangkat dengan Amazon Cognito menggunakan registerDevice: metode klien sinkronisasi, seperti yang ditunjukkan di bawah ini:

AWSCognito *syncClient = [AWSCognito defaultCognito]; [[syncClient registerDevice: devToken] continueWithBlock:^id(AWSTask *task) { if(task.error){ NSLog(@"Unable to registerDevice: %@", task.error); } else { NSLog(@"Successfully registered device with id: %@", task.result); } return nil; } ];

Dalam mode debug, perangkat Anda akan mendaftar dengan APNs kotak pasir; dalam mode rilis, itu akan mendaftar dengan. APNs Untuk menerima pembaruan dari set data tertentu, gunakan metode subscribe:

[[[syncClient openOrCreateDataset:@"MyDataset"] subscribe] continueWithBlock:^id(AWSTask *task) { if(task.error){ NSLog(@"Unable to subscribe to dataset: %@", task.error); } else { NSLog(@"Successfully subscribed to dataset: %@", task.result); } return nil; } ];

Untuk berhenti menerima notifikasi push dari set data, cukup panggil metode unsubscribe:

[[[syncClient openOrCreateDataset:@”MyDataset”] unsubscribe] continueWithBlock:^id(AWSTask *task) { if(task.error){ NSLog(@"Unable to unsubscribe from dataset: %@", task.error); } else { NSLog(@"Successfully unsubscribed from dataset: %@", task.result); } return nil; } ];

Untuk berlangganan semua set data di objek AWSCognito, panggil subscribeAll:

[[syncClient subscribeAll] continueWithBlock:^id(AWSTask *task) { if(task.error){ NSLog(@"Unable to subscribe to all datasets: %@", task.error); } else { NSLog(@"Successfully subscribed to all datasets: %@", task.result); } return nil; } ];

Sebelum memanggil subscribeAll, pastikan untuk menyinkronkan setidaknya sekali pada setiap set data, sehingga set data ada di server.

Untuk bereaksi terhadap notifikasi push, Anda perlu menerapkan metode didReceiveRemoteNotification di delegasi aplikasi Anda:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [[NSNotificationCenter defaultCenter] postNotificationName:@"CognitoPushNotification" object:userInfo]; }

Jika Anda mengirim notifikasi dengan menggunakan handler notifikasi, Anda kemudian dapat menanggapi notifikasi di tempat lain dalam aplikasi tempat Anda memiliki handler untuk set data Anda. Jika Anda berlangganan notifikasi seperti ini...

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceivePushSync:) name: :@"CognitoPushNotification" object:nil];

... Anda dapat bertindak atas notifikasi seperti ini:

- (void)didReceivePushSync:(NSNotification*)notification { NSDictionary * data = [(NSDictionary *)[notification object] objectForKey:@"data"]; NSString * identityId = [data objectForKey:@"identityId"]; NSString * datasetName = [data objectForKey:@"datasetName"]; if([self.dataset.name isEqualToString:datasetName] && [self.identityId isEqualToString:identityId]){ [[self.dataset synchronize] continueWithBlock:^id(AWSTask *task) { if(!task.error){ NSLog(@"Successfully synced dataset"); } return nil; }]; } }

Tombol berikut tersedia dalam muatan notifikasi push:

  • source: cognito-sync. Ini dapat berfungsi sebagai faktor pembeda antara notifikasi.

  • identityPoolId: ID kolam identitas. Ini dapat digunakan untuk validasi atau informasi tambahan, meskipun tidak terpisahkan dari sudut pandang penerima.

  • identityId: ID identitas dalam kolam.

  • datasetName: Nama set data yang diperbarui. Ini tersedia untuk kepentingan panggilan openOrCreateDataset.

  • syncCount: Jumlah sinkronisasi untuk set data jarak jauh. Anda dapat menggunakan ini sebagai cara untuk memastikan bahwa set data lokal telah kedaluwarsa, dan sinkronisasi yang masuk adalah sinkronisasi baru.

Menggunakan sinkronisasi push di aplikasi Anda: iOS - Swift

Agar dapat mendapatkan token perangkat untuk aplikasi Anda, ikuti dokumentasi Apple pada Pendaftaran Notifikasi Jarak Jauh. Setelah menerima token perangkat sebagai NSData objek dariAPNs, Anda harus mendaftarkan perangkat dengan Amazon Cognito menggunakan metoderegisterDevice: dari klien sinkronisasi, seperti yang ditunjukkan di bawah ini:

let syncClient = AWSCognito.default() syncClient.registerDevice(devToken).continueWith(block: { (task: AWSTask!) -> AnyObject! in if (task.error != nil) { print("Unable to register device: " + task.error.localizedDescription) } else { print("Successfully registered device with id: \(task.result)") } return task })

Dalam mode debug, perangkat Anda akan mendaftar dengan APNs kotak pasir; dalam mode rilis, itu akan mendaftar dengan. APNs Untuk menerima pembaruan dari set data tertentu, gunakan metode subscribe:

syncClient.openOrCreateDataset("MyDataset").subscribe().continueWith(block: { (task: AWSTask!) -> AnyObject! in if (task.error != nil) { print("Unable to subscribe to dataset: " + task.error.localizedDescription) } else { print("Successfully subscribed to dataset: \(task.result)") } return task })

Untuk berhenti menerima notifikasi push dari set data, panggil metode unsubscribe:

syncClient.openOrCreateDataset("MyDataset").unsubscribe().continueWith(block: { (task: AWSTask!) -> AnyObject! in if (task.error != nil) { print("Unable to unsubscribe to dataset: " + task.error.localizedDescription) } else { print("Successfully unsubscribed to dataset: \(task.result)") } return task })

Untuk berlangganan semua set data di objek AWSCognito, panggil subscribeAll:

syncClient.openOrCreateDataset("MyDataset").subscribeAll().continueWith(block: { (task: AWSTask!) -> AnyObject! in if (task.error != nil) { print("Unable to subscribe to all datasets: " + task.error.localizedDescription) } else { print("Successfully subscribed to all datasets: \(task.result)") } return task })

Sebelum memanggil subscribeAll, pastikan untuk menyinkronkan setidaknya sekali pada setiap set data, sehingga set data ada di server.

Untuk bereaksi terhadap notifikasi push, Anda perlu menerapkan metode didReceiveRemoteNotification di delegasi aplikasi Anda:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { NSNotificationCenter.defaultCenter().postNotificationName("CognitoPushNotification", object: userInfo) })

Jika Anda mengirim notifikasi dengan menggunakan handler notifikasi, Anda kemudian dapat menanggapi notifikasi di tempat lain dalam aplikasi tempat Anda memiliki handler untuk set data Anda. Jika Anda berlangganan notifikasi seperti ini...

NSNotificationCenter.defaultCenter().addObserver(observer:self, selector:"didReceivePushSync:", name:"CognitoPushNotification", object:nil)

... Anda dapat bertindak atas notifikasi seperti ini:

func didReceivePushSync(notification: NSNotification) { if let data = (notification.object as! [String: AnyObject])["data"] as? [String: AnyObject] { let identityId = data["identityId"] as! String let datasetName = data["datasetName"] as! String if self.dataset.name == datasetName && self.identityId == identityId { dataset.synchronize().continueWithBlock {(task) -> AnyObject! in if task.error == nil { print("Successfully synced dataset") } return nil } } } }

Tombol berikut tersedia dalam muatan notifikasi push:

  • source: cognito-sync. Ini dapat berfungsi sebagai faktor pembeda antara notifikasi.

  • identityPoolId: ID kolam identitas. Ini dapat digunakan untuk validasi atau informasi tambahan, meskipun tidak terpisahkan dari sudut pandang penerima.

  • identityId: ID identitas dalam kolam.

  • datasetName: Nama set data yang diperbarui. Ini tersedia untuk kepentingan panggilan openOrCreateDataset.

  • syncCount: Jumlah sinkronisasi untuk set data jarak jauh. Anda dapat menggunakan ini sebagai cara untuk memastikan bahwa set data lokal telah kedaluwarsa, dan sinkronisasi yang masuk adalah sinkronisasi baru.