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 implementieren
Wenn Amazon Cognito Sync für Sie neu ist, verwenden Sie zuerst AWS AppSync
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
Die Push-Synchronisierung wird für Unity oder JavaScript Xamarin nicht 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 Sie eine Amazon Simple Notification Service (AmazonSNS) -App
Erstellen und konfigurieren Sie eine SNS Amazon-App für Ihre unterstützten Plattformen, wie im SNSEntwicklerhandbuch 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
-
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.
-
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.
-
Führen Sie einen Bildlauf nach unten durch und klicken Sie zum Erweitern auf Push synchronization (Push-Synchronisierung).
-
Wählen Sie im Dropdownmenü Servicerolle die IAM Rolle aus, die Cognito die Erlaubnis erteilt, eine SNS Benachrichtigung zu senden. Klicken Sie auf Rolle erstellen, um die mit Ihrem Identitätspool verknüpften Rollen in der AWS IAM Konsole zu erstellen oder zu ändern.
-
Wählen Sie einen Plattformanwendung aus und klicken Sie dann auf Save Changes (Änderungen speichern).
-
Gewähren Sie SNS Zugriff auf Ihre Anwendung
Konfigurieren Sie in der AWS Identity and Access Management Konsole Ihre IAM Rollen so, dass sie vollen SNS Amazon-Zugriff haben, oder erstellen Sie eine neue Rolle mit uneingeschränktem SNS Amazon-Zugriff. Das folgende Beispiel für eine Vertrauensrichtlinie für Rollen gewährt Amazon Cognito Sync eine eingeschränkte Fähigkeit, eine IAM Rolle anzunehmen. 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 Rollen finden Sie unter IAM Rollen (Delegierung und Verbund).
Push-Synchronisierung in Ihrer App verwenden: Android
Ihre Anwendung muss die Google Play Services importieren. Sie können die neueste Version von Google Play SDK über den SDKAndroid-Manager herunterladen
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 BroadcastReceiverAndroid-Objekts
@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.identityPoolId
Die 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.identityId
Die Identitäts-ID innerhalb des Pools.datasetName
Der Namen des aktualisierten Datensatzes. Dies ist für den openOrCreate Dataset-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. Sobald Sie das Geräte-Token als NSData Objekt von erhalten habenAPNs, müssen Sie das Gerät mit der registerDevice:
Methode des Synchronisierungsclients bei Amazon Cognito 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; } ];
Im Debug-Modus registriert sich Ihr Gerät bei der APNs Sandbox; im Release-Modus registriert es sich bei. APNs 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. -
identityPoolId
Die 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. -
identityId
Die Identitäts-ID innerhalb des Pools. -
datasetName
Der Namen des aktualisierten Datensatzes. Dieser ist für denopenOrCreateDataset
-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. Sobald Sie das Geräte-Token als NSData Objekt von erhalten habenAPNs, müssen Sie das Gerät mit der MethoderegisterDevice: des Synchronisierungsclients bei Amazon Cognito registrieren, wie unten dargestellt:
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 })
Im Debug-Modus registriert sich Ihr Gerät bei der APNs Sandbox; im Release-Modus registriert es sich bei. APNs 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.identityPoolId
Die 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.identityId
Die Identitäts-ID innerhalb des Pools.datasetName
Der Namen des aktualisierten Datensatzes. Dieser ist für denopenOrCreateDataset
-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.