Unsere Apps werden für Android und iOS entwickelt. Wir verwenden AWS SNS Mobile Push, um Nachrichten sowohl an GCM als auch an APNS zu senden. Das Backend ist PHP und verwendet das AWS PHP SDK.
Bis jetzt hat unser System 1 Endpoint ARN pro Benutzer gespeichert. Wir senden dann eine Mobile Push-Nachricht direkt an diesen Endpunkt ARN.
Die Frage:
Es wäre merkwürdig, wenn ein Benutzer auf mehreren Geräten in unserer App angemeldet wäre und für alle keine Push-Benachrichtigungen erhalten hätte. Also - wir werden etwas ändern müssen.
Wie wird in AWS Mobile Push das Konzept "Ein Benutzer, mehrere Geräte (und möglicherweise mehrere Plattformen)" behandelt?
Muss unser System eine Eins-zu-viele-Verknüpfung von Benutzer-zu-Endpunkt-ARNs aufrechterhalten (d. h. mehrere Endpunkt-ARNs pro Benutzer speichern, so dass wir Nachrichten nacheinander an alle senden können)?
Oder sollte ich mir das "Topics" -Konzept ansehen, das Mobile Push bietet (ich bin hier verwirrt - verwenden einige Leute ein Thema pro Benutzer und schieben dann Nachrichten zum Thema selbst? ) ..
Schließlich - ich schätze als Bonusfrage - ist es normal, dass Leute, die das PHP AWS SDK verwenden, sowohl APNS
als auch GCM
Attribute in das Message
Payload-Array aufnehmen? Wir haben nicht im Auge behalten, welche Art von Gerät jeder Benutzer verwendet. Wir haben gerade einen Endpoint ARN pro Benutzer gespeichert. Und ich denke, der Gedanke war, nur alle unsere Plattform-Basen abzudecken (APNS, APNS_SANDBOX, GCM), wenn wir eine Nachricht an einen Endpunkt schicken.
Ich habe viel nach dem Thema "Ein Benutzer mit mehreren Geräten" recherchiert: Mobile Push mit AWS SNS, und die Ergebnisse waren wirklich wenig hilfreich.
Hilfe bitte :(
Danke!
Ich habe eine Lösung für dieses Problem, da Sie bereits wissen, dass ARN mit einem Token für ein einzelnes Gerät verknüpft ist, so dass Sie es verwalten müssen, um Push an denselben Benutzer mit mehreren Geräten zu senden.
Mein Ansatz besteht darin, 2 Tabellen in mysql oder der von Ihnen verwendeten Datenbank zu erstellen 1. Für APNS oder APNS_SANDBOX mit Details wie Benutzer-ID (lokal), Geräte-Token, Endpunkt-ARN, Status usw. (ZB: sns_apns) 2. Für GCM oder BAIDU müssen Sie eine Tabelle mit Benutzerdetails mit Endpunkt ARN (EG: sns_gcm)
erstellenJedes Mal, wenn Sie Push an einen bestimmten Benutzer senden, schreiben Sie einfach einen Code wie diesen
%Vor%Sobald Sie eine SNS-Push-Nachricht gesendet haben, erhalten Sie einen Erfolgs- oder Fehlergrund. Könnten Sie bitte Ihre Protokolle überprüfen und teilen, um das genaue Problem zu identifizieren.
Cloudwatch: SNS veröffentlicht Cloudwatch-Messwerte für die Anzahl der veröffentlichten Nachrichten, die Anzahl der erfolgreichen Benachrichtigungen, die Anzahl der fehlgeschlagenen Benachrichtigungen und die Größe der veröffentlichten Daten. Metriken sind für jede Anwendung verfügbar. Sie können über die AWS Management Console oder CloudWatch-APIs auf Cloudwatch-Messwerte zugreifen.
Direkte Adressierung: Mit der direkten Adressierung können Sie Benachrichtigungen direkt an einen einzelnen Endpunkt senden, anstatt identische Nachrichten an alle Abonnenten eines Themas zu senden. Dies ist nützlich, wenn Sie präzise zielgerichtete Nachrichten an jeden Empfänger senden möchten. Wenn Sie Gerätetokens mit SNS registrieren, erstellt SNS einen Endpunkt, der dem Token entspricht. Sie können auf dem Token-Endpunkt genauso publizieren, wie Sie in einem Thema veröffentlichen würden. Sie können den Text Ihrer Benachrichtigung direkt veröffentlichen oder eine plattformspezifische Nutzlast, die plattformspezifische Funktionen wie die Aktualisierung der Badge-Anzahl Ihrer App nutzt. Die direkte Adressierung ist derzeit nur für Endpunkte von Push-Benachrichtigungen verfügbar.
Offizielle Dokumentation: "Wenn ein Thema erstellt wird, weist Amazon SNS dem Thema einen eindeutigen ARN (Amazon Ressourcenname) zu.
Ich habe das nicht versucht, aber um Ihr Problem zu lösen, würde ich eine Karte der cognito Benutzer-ID des Benutzers und des entsprechenden Endpunkt-ARN für jede wichtige App, die eine Transaktion durch den Benutzer definiert, behalten. Wenn der Endpunkt bereits existiert, muss er nicht gespeichert werden. Wenn jedoch für diese Benutzer-ID ein anderer Endpunkt-ARN angezeigt wird, speichern, aktualisieren, hinzufügen oder verknüpfen Sie diesen neuen Endpunkt-ARN mit der Benutzer-ID in DynamoDB als @Document-Attribut. Übertragen Sie dann zu jeder Zeit einfach an alle endpointARN, die mit der Benutzer-ID in DynamoDB verknüpft sind.
Die Beispielcodes für den mySample Mobile Hub sind nützlich für eine schnelle Bearbeitung. Für Android:
Holen Sie sich die endpointARN wie folgt in die App:
%Vor%Sie können DynamoDB mithilfe des Aktualisierungsspeicherverhaltens aktualisieren, um zu ignorieren, wenn ein bereits vorhandener Endpunkt für den Benutzer bemerkt wird:
%Vor%Nicht sicher, wie man das in PHP tut. Hoffe, diese Idee hilft.
Tags und Links push-notification amazon-web-services amazon-sns aws-sdk aws-php-sdk