Google Play generiert Benachrichtigungen als Reaktion auf Ereignisse, die auftreten und sich auf ein Unternehmen auswirken können. Anbieter von EMM-Lösungen erhalten diese und auf sie reagieren, indem sie Warnungen oder andere Mechanismen Kundenadministratoren.
In diesem Leitfaden erfahren Sie, wie Sie die erforderliche Serverinfrastruktur , um nur Push-Benachrichtigungen von EMM-Anbietern zu empfangen und zu verarbeiten. Für Pull-Benachrichtigungen ist die in diesem Leitfaden beschriebene Einrichtung nicht erforderlich.
Zusätzlich zur in diesem Leitfaden beschriebenen Servereinrichtung können Sie für Push-Benachrichtigungen müssen Sie auch die entsprechenden Berechtigungen erteilen und andere in der Google API Console ausführen. Weitere Informationen finden Sie unter EMM-Push-Benachrichtigungen aktivieren .
Weitere Informationen und Beispiele zu Google Cloud Pub/Sub finden Sie unter Cloud Pub/Sub-Dokumentation
Sie können Ihr System so konfigurieren, dass Push-Benachrichtigungen an einen An einen angegebenen HTTPS-Endpunkt oder an einen Server, der auf das Senden von Benachrichtigungen wartet.
Konfiguration des Push-Endpunkts
Zum Konfigurieren eines Push-Endpunkts benötigen Sie einen Server mit einem gültigen SSL-Zertifikat. In In diesem Beispiel erstellen Sie ein SSL-Zertifikat und laden es in eine Zertifizierungsstelle hoch. (CA) und konfigurieren Sie dann den NGINX-Server. Schließlich kompilieren und führen Sie Testcode aus, überprüfen, ob die Einrichtung korrekt ist.
In diesem Beispiel wird gezeigt, wie ein
NGINX-Server in
Reverse-Proxy-Modus zum Herstellen einer Verbindung mit der Abonnenten-App (in PushSubscriber.java
)
auf Port 8093 unter Verwendung von Ubuntu 14.04 läuft. Ihr Unternehmen verwendet möglicherweise eine andere
Server. Das Beispiel-Setup sollte jedoch ohne Änderungen auf allen Debian-basierten
Verteilungen. Andere Distributionen (wie diejenigen, die auf RedHat basieren) sind ähnlich,
aber der Speicherort der Konfigurationsdateien kann abweichen.
Bevor Sie Benachrichtigungen erhalten können, müssen Sie einen Endpunkt konfigurieren, der erfüllt folgende Kriterien:
Sie müssen Inhaber der Domain sein und Ihre Inhaberschaft in der Google API Console:
Sie müssen einen Dienst über Port 443 (SSL) ausführen können.
Sie benötigen ein von einer Zertifizierungsstelle signiertes SSL-Zertifikat. Selbst signierte Zertifikate funktionieren nicht.
Der von Ihnen ausgeführte Webserver muss Webhooks.
Der Endpunkt muss nicht in Google App Engine ausgeführt werden, obwohl dies möglich ist.
SSL-Zertifikat erstellen und hochladen
1. Erstellen Sie ein SSL-Zertifikat (Secure Sockets Layer):
myusername@myhost:/tmp$ sudo openssl req -x509 -nodes -days 365 \ -newkey rsa:2048 -keyout cert.key -out cert.crt
Dadurch wird die folgende Antwort generiert. Beispielwerte ersetzen
(z. B. push.solarmora.com
und myusername@myhost
) durch Ihren tatsächlichen Server.
Name, Firma, Adresse usw. im folgenden Code eingeben. Sie können beliebige
Subdomain verwenden, solange der A
-Eintrag dieser Subdomain auf Ihren Server verweist.
Generating a 2048 bit RSA private key ........................................................................... .....+++ writing new private key to 'cert.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:GB State or Province Name (full name) [Some-State]:England Locality Name (eg, city) []:London Organization Name (eg, company) [Internet Widgits Pty Ltd]:Solarmora, Inc. Organizational Unit Name (eg, section) []:Creative Publications Common Name (e.g. server FQDN or YOUR name) []:push.solarmora.com Email Address []:admin@solarmora.com
2. Prüfen Sie, ob eine Zertifikatsdatei erstellt wurde:
$ myusername@myhost:/tmp$ ls cert*
cert.crt cert.key
3. Um dieses Zertifikat zu signieren, müssen Sie ein Zertifikatsignierungsanfrage, die Sie für den Unterzeichner hochladen möchten:
myusername@myhost:/tmp$ sudo openssl x509 -x509toreq -in cert.crt \ -out cert.csr -signkey cert.key Getting request Private Key Generating certificate request
myusername@myhost:/tmp$ ls cert.* cert.crt cert.csr cert.key
4. Stellen Sie sicher, dass der Inhalt der CSR-Datei wie folgt aussieht:
Certificate Request: Data: Version: 0 (0x0) Subject: C=GB, ST=England, L=London, O=Solarmora, Inc., OU=Creative Publications, CN=push.solarmora.com/emailAddress=admin@solarmora.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:cc:0f:54:26:3d:d9:17:eb:8f:6c:f7:27:5e:77: 64:65:00:db:fe:2a:1f:fa:ea:de:21:7a:c5:5d:87: ... ... Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: sha256WithRSAEncryption 1d:ea:12:b8:c2:6a:d6:f4:6e:92:2f:b9:12:5e:e3:91:15:a0: 06:b5:81:ce:c5:cf:b7:d2:a7:dd:f2:78:ca:28:8e:21:cd:6d: ... ... -----BEGIN CERTIFICATE REQUEST----- MIIC6zCCAdMCAQAwgaUxCzAJBgNVBAYTAkdCMRAwDgYDVQQIDAdFbmdsYW5kMQ8w DQYDVQQHDAZMb25kb24xGDAWBgNVBAoMD0FDTUUgQ29ycCwgSW5jLjEYMBYGA1UE CwwPQ3JlYXRpdmUgQW52aWxzMRswGQYDVQQDDBJwdXNoLmFjbWUtY29ycC5jb20x IjAgBgkqhkiG9w0BCQEWE2FkbWluQGFjbWUtY29ycC5jb20wggEiMA0GCSqGSIb3 ... ... -----END CERTIFICATE REQUEST-----
5. Laden Sie den Teil Ihres Zertifikats zwischen den BEGIN
hoch
und END
Zeilen (einschließlich) zu Ihrer Zertifizierungsstelle hinzu. Der genaue Vorgang
ist von Ihrer Zertifizierungsstelle abhängig, umfasst jedoch die folgenden Schritte:
- Laden Sie die CSR-Datei auf Ihre CA-Website hoch oder fügen Sie den Inhalt der Datei auf Ihrer CA-Website ein. Ihre Zertifizierungsstelle validiert und verarbeitet diese Daten dann.
- Laden Sie das von Ihrer Zertifizierungsstelle generierte signierte Zertifikat herunter.
6. Die Ausgabe der Zertifizierungsstelle sollte mehrere Dateien enthalten: die signierte
Zertifikat selbst und das Zertifikat der Zertifizierungsstelle, die bestätigt,
Zertifikate signieren. Verketten Sie alle *.crt
-Zertifikatsdateien im heruntergeladenen
in einer einzigen Bundle-Datei zusammenfassen, z. B. bundle.push.solarmora.com.crt
:
$ cat *.crt > bundle.push.solarmora.com.crt
Proxyserver konfigurieren
In diesem Abschnitt konfigurieren Sie den Open Source-Webserver NGINX und kehren um den Endpunkt zu bedienen und alle eingehenden Anfragen an den Abonnentenserver. Als Beispiel dient NGINX. Sie können aber auch jede andere HTTP-Proxy.
1. Installieren Sie NGINX auf Ihrem Server:
$ sudo apt-get update $ sudo apt-get install nginx $ nginx -v $ nginx version: nginx/1.4.6 (Ubuntu)
2. Um sicherzustellen, dass die zusätzlichen Serverkonfigurationsdateien, die Sie im
Das Verzeichnis „sites-enabled
“ wird von NGINX verarbeitet, bearbeiten Sie /etc/nginx/nginx.conf
und Folgendes enthalten:
$ include /etc/nginx/conf.d/*.conf; $ include /etc/nginx/sites-enabled/*;
3. Kopieren Sie Ihre Zertifikatsdateien an einen sicheren Ort, der vom
www-data
-Nutzer, aber nach Möglichkeit für andere Nutzer nicht lesbar.
um den Nutzernamen anzupassen, wenn Ihr Webserver als ein anderer
Nutzer):
$ sudo mkdir -p /var/openssl/push.solarmora.com $ sudo mv /tmp/cert.key
/var/openssl/push.solarmora.com/push.solarmora.com.key $ sudo mv /tmp/bundle.push.solarmora.com.crt
/var/openssl/push.solarmora.com/bundle.push.solarmora.com.crt
4. Erstellen Sie eine neue server
-Konfiguration. push.solarmora.com
bearbeiten
in /etc/nginx/sites-enabled
und verwenden Sie Ihren tatsächlichen
vollqualifizierten Domainnamen des Servers als Dateiname verwenden:
server {
listen 443;
server_name push.solarmora.com;
ssl on;
ssl_certificate
/var/openssl/push.solarmora.com/bundle.push.solarmora.com.crt;
ssl_certificate_key
/var/openssl/push.solarmora.com/push.solarmora.com.key;
# it is usually very convenient to have separate files for your
# access and error log to analyze for possible problems
access_log /var/log/nginx/nginx.push.solarmora.com.log;
error_log /var/log/nginx/nginx.push.solarmora.com.log;
location / {
# assuming the subscriber will run on the same machine
# on port 8093
proxy_pass http://localhost:8093;
}
}
5. Starten Sie NGINX neu, um die Änderungen zu implementieren:
myusername@myhost:/etc/nginx$ sudo service nginx restart * Restarting nginx nginx ...done.
6. Ihr Server ist nun konfiguriert. Um die
versuchen Sie, Ihren Server mit curl
abzufragen:
[myusername@myhost:~]$ curl push.solarmora.com <html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx/1.4.6 (Ubuntu)</center> </body> </html>
Dies ist die erwartete Antwort, da kein Downstream-Server konfiguriert wurde
(localhost:8093
in unserer Konfigurationsdatei).
Beispiele kompilieren und ausführen
Zum Ausführen der Beispiele in diesem Abschnitt benötigen Sie eine aktive Google API Console. Projekt arbeiten. Wir empfehlen Ihnen, eine speziell zu Testzwecken und um sie von Ihrem Produktionsprojekt zu trennen. Nachdem Sie ein Testprojekt erstellt haben, müssen Sie ein Dienstkonto erstellen. Notieren Sie sich die E-Mail-Adresse des Dienstkontos und legen Sie die zugehörige P12-Datei auf Ihrem Server ab.
Quellcodestruktur einrichten
1. Klonen Sie das Repository play-work.git
:
myusername@myhost:~/code$ git clone https://github.com/google/play-work.git Cloning into 'play-work'... Username for 'https://github.com': username Password for 'https://username@github.com': remote: Counting objects: 110, done. remote: Compressing objects: 100% (60/60), done. remote: Total 110 (delta 24), reused 95 (delta 9), pack-reused 0 Receiving objects: 100% (110/110), 23.88 KiB | 0 bytes/s, done. Resolving deltas: 100% (24/24), done. Checking connectivity... done.
$ sudo apt-get install maven protobuf-compiler
3. Prüfen, ob sowohl Maven als auch der Google Protocol Buffers-Compiler korrekt installiert ist:
myusername@myhost:~$ mvn -v Apache Maven 3.0.5 Maven home: /usr/share/maven Java version: 1.7.0_75, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.16.0-30-generic", arch: "amd64", family: "unix"
myusername@myhost:~$ protoc --version libprotoc 2.5.0
4. Die Maven-Konfigurationsdatei pom.xml
geht davon aus, dass der Protocol Buffers-Compiler im Verzeichnis /usr/bin/protoc
installiert ist:
myusername@myhost:~$ which protoc /usr/bin/protoc
pom.xml
oder symlink protoc
ändern:
$ sudo ln -s which protoc
/usr/bin/protoc
mvn clean compile assembly:single
ausführen. Dadurch sollte eine Datei mit dem Namen
emm-notifications-[version-number]-jar-with-dependencies.jar
, wobei
[version number]
ist die aktuelle Version des Beispiels, z. B. 1.0-SNAPSHOT
:
myusername@myhost:~/code/play-work/examples/emm-notifications$ ls target/* target/emm-notifications-1.0-SNAPSHOT-jar-with-dependencies.jar
TestPublisher
-Code ausführen kannst. Es ist davon auszugehen, dass der Code fehlschlägt:
myusername@myhost:~/code/play-work/examples/emm-notifications$ java -cp \ target/emm-notifications-1.0-SNAPSHOT-jar-with-dependencies.jar \ com.google.android.work.emmnotifications.TestPublisher Exception in thread "main" java.lang.IllegalArgumentException: You must specify non-default ServiceAccountEmail in settings.properties at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:119) at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:69) at com.google.android.work.emmnotifications.Settings.verifyVariable(Settings.java:129) at com.google.android.work.emmnotifications.Settings.getSettings(Settings.java:103) at com.google.android.work.emmnotifications.TestPublisher.main(TestPublisher.java:39)
7. Einige Werte in der Datei settings.properties
müssen überschrieben werden. Gehen Sie dazu wie folgt vor:
Erstellen Sie eine Kopie der Datei und ändern Sie die Eigenschaften in der Kopie wie folgt:
# This should be your own service account's email address ServiceAccountEmail=368628613713-t4hfexampledn5lhpdcu1qqfgio01626@developer.gserviceaccount.com ServiceAccountP12KeyFile=/opt/secret/secret.p12
# This will be the name of the service account ProjectName=enterprise-cloud-pub-sub SubscriptionName=projects/enterprise-cloud-pub-sub/subscriptions/default TopicName=projects/enterprise-cloud-pub-sub/topics/default
# The push endpoint in your API Console project PushEndpoint=https://push.solarmora.com
8. Führen Sie den TestPublisher
-Code noch einmal aus, damit er nicht mehr abstürzt. (Möglicherweise wird ein
einzelner Fehler in der Logausgabe.)
Publisher-Testcode ausführen
Sie müssen den Beispielcode für Veröffentlichungsbenachrichtigungen ausführen, damit Ihr hat Abonnent einige Nachrichten zu lesen.
Im folgenden Beispiel sucht der Code nach dem
Thema, das in my_settings.properties
angegeben wurde, es aber nicht findet. Daher wird das Thema erstellt.
Anschließend wird eine Nachricht im Thema veröffentlicht. Dieses Beispiel bietet eine wertvolle
Testtool, mit dem Sie Nachrichten emulieren können, die von der Google Play EMM API gesendet werden.
myusername@myhost:~/code/play-work/examples/emm-notifications$ DEVELOPER_CONSOLE_SETTINGS=./my_settings.properties java -cp \ target/emm-notifications-1.0-SNAPSHOT-jar-with-dependencies.jar com.google.android.work.emmnotifications.TestPublisher Feb 27, 2015 1:39:59 PM com.google.android.work.emmnotifications.RetryHttpInitializerWrapper$1 handleResponse INFO: RetryHandler: { "error": { "code": 404, "message": "Resource not found (resource=default).", "errors": [ { "message": "Resource not found (resource=default).", "domain": "global", "reason": "notFound" } ], "status": "NOT_FOUND" } } Feb 27, 2015 1:39:59 PM com.google.android.work.emmnotifications.TestPublisher main INFO: Topic projects/enterprise-cloud-pub-sub/topics/default doesn't exists, creating it Feb 27, 2015 1:40:02 PM com.google.android.work.emmnotifications.TestPublisher main INFO: Topic projects/enterprise-cloud-pub-sub/topics/default created Feb 27, 2015 1:40:02 PM com.google.android.work.emmnotifications.TestPublisher main INFO: Publishing a request: {messages=[{data=CjEKFQoIMTIzMjEzMjESCXJpZ2h0IG5vdxIWY29tLmdvb2dsZS5hbmRyb2lkLmdtcxgA}]}
Testcode für Abonnenten ausführen
Der Testcode für Abonnenten bestätigt, dass Sie die Nachrichten empfangen können, die von
den TestPublisher
-Code.
1. Stellen Sie sicher, dass Ihr Code aktuell und kompiliert ist, und führen Sie dann den Testcode für Abonnenten:
myusername@myhost:~/code/play-work/examples/emm-notifications$ DEVELOPER_CONSOLE_SETTINGS=./my_settings.properties
java -cp target/emm-notifications-1.0-SNAPSHOT-jar-with-dependencies.jar
com.google.android.work.emmnotifications.PushSubscriber Feb 27, 2015 1:46:37 PM com.google.android.work.emmnotifications.PushSubscriber main INFO: Will be using topic name: projects/enterprise-cloud-pub-sub/topics/default, subscription name:
projects/enterprise-cloud-pub-sub/subscriptions/default Feb 27, 2015 1:46:38 PM com.google.android.work.emmnotifications.PushSubscriber main INFO: Trying to get subscription named projects/enterprise-cloud-pub-sub/subscriptions/default Feb 27, 2015 1:46:38 PM com.google.android.work.emmnotifications.RetryHttpInitializerWrapper$1 handleResponse INFO: RetryHandler: { "error": { "code": 404, "message": "Resource not found (resource=default).", "errors": [ { "message": "Resource not found (resource=default).", "domain": "global", "reason": "notFound" } ], "status": "NOT_FOUND" } } Feb 27, 2015 1:46:38 PM com.google.android.work.emmnotifications.PushSubscriber main INFO: Subscription doesn't exist, will try to create projects/enterprise-cloud-pub-sub/subscriptions/default Feb 27, 2015 1:46:43 PM com.google.android.work.emmnotifications.PushSubscriber main INFO: Created: { "ackDeadlineSeconds" : 600, "name" : "projects/enterprise-cloud-pub-sub/subscriptions/default", "pushConfig" : { "pushEndpoint" : "https://push.solarmora.com" }, "topic" : "projects/enterprise-cloud-pub-sub/topics/default" }
2. Führen Sie den Publisher noch einmal aus. Neue Nachrichten werden wurde dem Protokoll hinzugefügt:
Feb 27, 2015 1:47:24 PM com.google.android.work.emmnotifications.PushSubscriber$1 handle INFO: Raw request: {"message":{"data":"CjEKFQoIMTIzMjEzMjESCXJpZ2h0IG5vdxIWY29tLmdvb2dsZS5hbmRyb2lkLmdtcxgA",
"attributes":{},"message_id":"71571141246"},"subscription":"/subscriptions/enterprise-cloud-pub-sub/default"} Feb 27, 2015 1:47:24 PM com.google.android.work.emmnotifications.PushSubscriber$1 handle INFO: Pubsub message received: { "attributes" : { }, "data" : "CjEKFQoIMTIzMjEzMjESCXJpZ2h0IG5vdxIWY29tLmdvb2dsZS5hbmRyb2lkLmdtcxgA", "message_id" : "71571141246" } Feb 27, 2015 1:47:24 PM com.google.android.work.emmnotifications.PushSubscriber$1 handle INFO: Message received: product_approval_event { common_event_information { enterprise_id: "12321321" event_notification_sent_timestamp: "right now" } product_id: "com.google.android.gms" approved: false }