Push-Synchronisierung - Amazon Cognito

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Push-Synchronisierung

Wenn Amazon Cognito Sync für Sie neu ist, verwenden Sie zuerst AWS AppSync. Wie Amazon Cognito Sync ist AWS AppSync ein Service zum Synchronisieren von Anwendungsdaten zwischen verschiedenen Geräten.

Es ermöglicht Benutzerdaten wie App-Einstellungen oder Spielstatus synchronisiert werden. Darüber hinaus erweitert es diese Möglichkeiten, indem mehrere Benutzer gemeinsam genutzte Daten synchronisieren und diese in Echtzeit zusammen nutzen können.

Amazon Cognito verfolgt die Zuordnung zwischen Identitäten und Geräten automatisch nach. Über die Push-Synchronisierung oder Push-Sync-Funktion können Sie sicherstellen, dass jede Instance einer bestimmten Identität benachrichtigt wird, wenn sich die Identitätsdaten ändern. Mit der Push-Synchronisierung wird sichergestellt, dass alle einer Identität zugeordneten Geräte bei Änderung der Synchronisationsspeicherdaten für diese Identität eine automatische Push-Benachrichtigung erhalten, die sie über die Änderung informiert.

Anmerkung

Push-Synchronisierung wird nicht für JavaScript, Unity oder Xamarin unterstützt.

Bevor Sie die Push-Synchronisierung verwenden können, müssen Sie zuerst Ihr Konto für die Push-Synchronisierung einrichten und die Push-Synchronisierung in der Amazon-Cognito-Konsole aktivieren.

Erstellen einer Amazon-Simple-Notification-Service-(Amazon-SNS)-App

Erstellen und konfigurieren Sie eine Amazon-SNS-Anwendung für die unterstützten Plattformen, wie im SNS-Entwicklerhandbuch beschrieben.

Aktivieren der Push-Synchronisierung in der Amazon-Cognito-Konsole

Sie können die Push-Synchronisierung über die Amazon-Cognito-Konsole aktivieren. Auf der Startseite der Konsole:

  1. Klicken Sie auf den Namen des Identitätspools, für den Sie die Push-Synchronisierung aktivieren möchten. Die Seite Dashboard für Ihren Identitäten-Pool wird angezeigt.

  2. Klicken Sie in der rechten oberen Ecke der Seite Dashboard auf Edit identity pool (Identitäten-Pool bearbeiten). Die Seite Federated Identities (Verbundidentitäten) wird angezeigt.

  3. Führen Sie einen Bildlauf nach unten durch und klicken Sie zum Erweitern auf Push synchronization (Push-Synchronisierung).

  4. Wählen Sie im Dropdown-Menü Service role (Servicerolle) die IAM-Rolle aus, die die Cognito-Erlaubnis zum Senden einer SNS-Benachrichtigung erteilt. Klicken Sie auf Rolle erstellen, um Rollen zu erstellen oder zu ändern, die Ihrem Identitäten-Pool in der AWS-IAM-Konsole zugeordnet sind.

  5. Wählen Sie einen Plattformanwendung aus und klicken Sie dann auf Save Changes (Änderungen speichern).

  6. Gewähren Sie SNS-Zugriff auf Ihre Anwendung

Konfigurieren Sie in der AWS Identity and Access Management-Konsole Ihre IAM-Rollen so, dass sie vollständigen Amazon-SNS-Zugriff haben, oder erstellen Sie eine neue Rolle, die vollen SNS-Zugriff hat. Die folgende Rollenvertrauensrichtlinie gewährt Amazon Cognito Sync eine eingeschränkte Möglichkeit, eine IAM-Rolle zu übernehmen. Amazon Cognito Sync kann diese Rolle nur übernehmen, wenn es dies im Namen des Identitätspools mit der Bedingung aws:SourceArn und im Namen des Kontos mit der Bedingung aws:SourceAccount durchführt.

{ "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" } } } ] }

Weitere Informationen zu IAM-Rollen finden Sie unter Rollen (Übertragung und Vereinigung).

Push-Synchronisierung in Ihrer App verwenden: Android

Ihre Anwendung muss die Google Play Services importieren. Sie können die neueste Version der Google Play SDK über die Android SDK Manager herunterladen. Befolgen Sie die Android-Dokumentation zur Android-Implementierung, um Ihre App zu registrieren und eine Registrierungs-ID von GCM zu erhalten. Sobald Sie die Registrierungs-ID haben, müssen Sie das Gerät bei Amazon Cognito registrieren, wie in dem nachfolgenden Codebeispiel gezeigt:

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

Sie können jetzt ein Gerät für den Empfang von Updates von einem bestimmten Datensatz abonnieren:

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

Wenn Sie keine Push-Benachrichtigungen mehr von einem Datensatz erhalten möchten, rufen Sie einfach die Abmelden-Methode auf. Um alle Datensätze (oder eine bestimmte Teilmenge) im CognitoSyncManager Objekt zu abonnieren, verwenden Sie 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); } }

In Ihrer Implementierung des Android BroadcastReceiver-Objekts können Sie die neueste Version des geänderten Datensatzes prüfen und entscheiden, ob Ihre Anwendung erneut synchronisiert werden muss:

@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() { // ... }); } }

Die folgenden Schlüssel sind in der Push-Benachrichtigung-Nutzlast verfügbar:

  • source: Cognito-Synchronisierung Diese kann als ein Unterscheidungsmerkmal zwischen Benachrichtigungen dienen.

  • identityPoolIdDie Identitätspool-ID. Diese kann für die Validierung verwendet werden oder dient als zusätzliche Informationen, ist jedoch aus Sicht des Empfängers nicht unbedingt erforderlich.

  • identityIdDie Identitäts-ID innerhalb des Pools.

  • datasetNameDer Namen des aktualisierten Datensatzes. Dieser ist für den openOrCreateDataset-Aufruf verfügbar.

  • syncCount: Die Synchronisierungszahl für den Remote-Datensatz. Damit können Sie sicherstellen, dass lokale Datensatz nicht mehr auf dem neuesten Stand ist und die eingehende Synchronisierung neu ist.

Push-Sync in Ihrer App verwenden: iOS – Objective-C

Um ein Geräte-Token für Ihre Anwendung zu erhalten, befolgen Sie die Apple Dokumentation zum Registrieren von für Remote-Benachrichtigungen. Nachdem Sie das Geräte-Token als NSData-Objekt von APNs erhalten haben, müssen Sie das Gerät bei Amazon Cognito mithilfe der registerDevice:-Methode des Sync-Clienten registrieren, wie unten gezeigt:

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

In Debug-Modus wird Ihr Gerät mit der APNs-Sandbox registriert, im Release-Modus wird es mit APNs registriert. Um Updates von einem bestimmten Datensatz zu erhalten, verwenden Sie die subscribe-Methode:

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

Wenn Sie keine Push-Benachrichtigungen mehr von einem Datensatz erhalten möchten, rufen Sie einfach die unsubscribe-Methode auf.

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

Um alle Datensätze im AWSCognito-Objekt zu abonnieren, rufen Sie subscribeAll auf:

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

Bevor Sie subscribeAll aufrufen, sollten Sie jeden Datensatz mindestens einmal synchronisieren, damit diese Datensätze auf dem Server vorliegen.

Um auf Push-Benachrichtigungen zu reagieren, müssen Sie die didReceiveRemoteNotification-Methode auf Ihre App delegieren:

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

Wenn Sie eine Benachrichtigung mithilfe des Benachrichtigungs-Handlers veröffentlichen, können Sie die Benachrichtigung an anderer Stelle in der Anwendung beantworten, an der Sie einen Handle für den Datensatz haben Wenn Sie die Benachrichtigung auf folgende Weise abonnieren...

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

... können Sie auf die Benachrichtigung auf folgende Weise reagieren:

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

Die folgenden Schlüssel sind in der Push-Benachrichtigung-Nutzlast verfügbar:

  • source: Cognito-Synchronisierung Diese kann als ein Unterscheidungsmerkmal zwischen Benachrichtigungen dienen.

  • identityPoolIdDie Identitätspool-ID. Diese kann für die Validierung verwendet werden oder dient als zusätzliche Informationen, ist jedoch aus Sicht des Empfängers nicht unbedingt erforderlich.

  • identityIdDie Identitäts-ID innerhalb des Pools.

  • datasetNameDer Namen des aktualisierten Datensatzes. Dieser ist für den openOrCreateDataset-Aufruf verfügbar.

  • syncCount: Die Synchronisierungszahl für den Remote-Datensatz. Damit können Sie sicherstellen, dass lokale Datensatz nicht mehr auf dem neuesten Stand ist und die eingehende Synchronisierung neu ist.

Push-Sync in Ihrer App verwenden: iOS – Swift

Um ein Geräte-Token für Ihre Anwendung zu erhalten, befolgen Sie die Apple Dokumentation zum Registrieren von für Remote-Benachrichtigungen. Nachdem Sie das Geräte-Token als NSData-Objekt von APNs erhalten haben, müssen Sie das Gerät bei Amazon Cognito mithilfe der registerDevice:-Methode des Sync-Clienten registrieren, wie unten gezeigt:

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

In Debug-Modus wird Ihr Gerät mit der APNs-Sandbox registriert, im Release-Modus wird es mit APNs registriert. Um Updates von einem bestimmten Datensatz zu erhalten, verwenden Sie die subscribe-Methode:

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

Wenn Sie keine Push-Benachrichtigungen mehr von einem Datensatz erhalten möchten, rufen Sie die unsubscribe-Methode auf:

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

Um alle Datensätze im AWSCognito-Objekt zu abonnieren, rufen Sie subscribeAll auf:

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

Bevor Sie subscribeAll aufrufen, sollten Sie jeden Datensatz mindestens einmal synchronisieren, damit diese Datensätze auf dem Server vorliegen.

Um auf Push-Benachrichtigungen zu reagieren, müssen Sie die didReceiveRemoteNotification-Methode auf Ihre App delegieren:

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

Wenn Sie eine Benachrichtigung mithilfe des Benachrichtigungs-Handlers veröffentlichen, können Sie die Benachrichtigung an anderer Stelle in der Anwendung beantworten, an der Sie einen Handle für den Datensatz haben Wenn Sie die Benachrichtigung auf folgende Weise abonnieren...

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

... können Sie auf die Benachrichtigung auf folgende Weise reagieren:

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

Die folgenden Schlüssel sind in der Push-Benachrichtigung-Nutzlast verfügbar:

  • source: Cognito-Synchronisierung Diese kann als ein Unterscheidungsmerkmal zwischen Benachrichtigungen dienen.

  • identityPoolIdDie Identitätspool-ID. Diese kann für die Validierung verwendet werden oder dient als zusätzliche Informationen, ist jedoch aus Sicht des Empfängers nicht unbedingt erforderlich.

  • identityIdDie Identitäts-ID innerhalb des Pools.

  • datasetNameDer Namen des aktualisierten Datensatzes. Dieser ist für den openOrCreateDataset-Aufruf verfügbar.

  • syncCount: Die Synchronisierungszahl für den Remote-Datensatz. Damit können Sie sicherstellen, dass lokale Datensatz nicht mehr auf dem neuesten Stand ist und die eingehende Synchronisierung neu ist.