Google Play membuat notifikasi untuk merespons peristiwa yang terjadi dan dapat memengaruhi perusahaan. Penyedia solusi EMM dapat menerima notifikasi dan menindaklanjutinya, dengan memberikan peringatan atau mekanisme lain untuk administrator pelanggan mereka.
Panduan ini menjelaskan cara mengkonfigurasi infrastruktur server yang diperlukan untuk menerima dan memproses notifikasi push EMM saja. Notifikasi pull tidak memerlukan pengaturan yang dijelaskan dalam panduan ini.
Selain penyiapan server yang dijelaskan dalam panduan ini, untuk notifikasi push Anda juga harus memberikan hak istimewa yang sesuai dan melakukan konfigurasi tugas di Konsol API Google. Lihat Mengaktifkan notifikasi push EMM untuk mengetahui detailnya.
Untuk mengetahui informasi lebih lanjut tentang Google Cloud Pub/Sub, termasuk contohnya, lihat Dokumentasi Cloud Pub/Sub.
Anda dapat mengonfigurasi sistem sehingga notifikasi push dikirim ke endpoint HTTPS tertentu, atau ke server yang menunggu notifikasi dikirimkan.
Tentang konfigurasi endpoint push
Untuk mengonfigurasi endpoint push, Anda memerlukan server dengan sertifikat SSL yang valid. Di beberapa contoh ini, Anda membuat dan mengunggah sertifikat SSL ke otoritas sertifikat (CA), lalu konfigurasikan server NGINX. Terakhir, Anda mengompilasi dan menjalankan kode pengujian untuk konfirmasi bahwa konfigurasi Anda sudah benar.
Contoh ini menunjukkan cara mengonfigurasi
Server NGINX di
mode reverse proxy untuk terhubung ke aplikasi pelanggan (di PushSubscriber.java
)
berjalan pada porta 8093, menggunakan Ubuntu 14.04. Perusahaan Anda mungkin menggunakan
server lama, tetapi konfigurasi contoh akan berfungsi, tanpa perubahan, di semua server berbasis Debian
distribusi. Distribusi lain (seperti yang didasarkan
pada RedHat) serupa,
tetapi lokasi file
konfigurasi mungkin berbeda.
Sebelum dapat menerima notifikasi, Anda harus mengonfigurasi endpoint yang memenuhi kriteria berikut:
Anda harus memiliki domain dan memverifikasi kepemilikan Anda di Konsol API Google.
Anda harus dapat menjalankan layanan pada port 443 (SSL).
Anda harus memiliki sertifikat SSL yang ditandatangani CA. Sertifikat yang ditandatangani sendiri tidak berfungsi.
Server web yang Anda jalankan harus mendukung webhook.
Endpoint Anda tidak perlu berjalan di Google App Engine (meskipun dapat).
Membuat dan mengupload sertifikat SSL
1. Buat sertifikat Secure Sockets Layer (SSL):
myusername@myhost:/tmp$ sudo openssl req -x509 -nodes -days 365 \ -newkey rsa:2048 -keyout cert.key -out cert.crt
Tindakan ini akan menghasilkan respons berikut. Ganti nilai contoh
(seperti push.solarmora.com
dan myusername@myhost
) dengan server Anda yang sebenarnya
nama, perusahaan, alamat, dan sebagainya, dalam kode berikut. Anda dapat menggunakan
subdomain selama data A
subdomain ini mengarah ke server Anda.
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. Pastikan bahwa file sertifikat telah dibuat:
$ myusername@myhost:/tmp$ ls cert*
cert.crt cert.key
3. Agar sertifikat ini ditandatangani, buat sebuah permintaan penandatanganan sertifikat (CSR) yang akan diupload ke penanda tangan Anda:
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. Pastikan konten file CSR terlihat seperti ini:
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. Upload bagian sertifikat Anda antara BEGIN
dan END
baris (inklusif) ke CA Anda. Proses yang tepat akan
bergantung pada CA Anda, tetapi akan menyertakan langkah-langkah berikut:
- Unggah file CSR Anda ke situs CA, atau tempelkan konten file ke situs CA Anda. CA Anda kemudian memvalidasi dan memproses data ini.
- Download sertifikat bertanda tangan yang dibuat oleh CA Anda.
6. Output dari CA harus berisi beberapa file: file yang telah
sertifikat itu sendiri dan sertifikat CA yang
mengkonfirmasi bahwa mereka memenuhi syarat untuk
menandatangani sertifikat. Gabungkan semua file sertifikat *.crt
di file yang didownload
dikelompokkan menjadi satu file paket, misalnya bundle.push.solarmora.com.crt
:
$ cat *.crt > bundle.push.solarmora.com.crt
Mengonfigurasi server proxy
Di bagian ini, Anda akan mengonfigurasi server web {i>open source <i}NGINX dan server proxy untuk melayani endpoint dan meneruskan semua permintaan yang masuk ke server pelanggan. NGINX digunakan sebagai contoh, tetapi Anda dapat menggunakan Sebagai gantinya, proxy HTTP.
1. Instal NGINX di server Anda:
$ sudo apt-get update $ sudo apt-get install nginx $ nginx -v $ nginx version: nginx/1.4.6 (Ubuntu)
2. Untuk memastikan bahwa file konfigurasi server ekstra
yang Anda buat di
Direktori sites-enabled
diproses oleh NGINX, edit /etc/nginx/nginx.conf
dan mencakup hal-hal berikut:
$ include /etc/nginx/conf.d/*.conf; $ include /etc/nginx/sites-enabled/*;
3. Salin file sertifikat Anda ke lokasi yang aman, yang dapat dibaca oleh
www-data
pengguna, namun sebaiknya tidak dapat dibaca oleh pengguna lain (Anda mungkin perlu
untuk menyesuaikan nama pengguna jika
server web Anda berjalan sebagai
):
$ 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. Buat konfigurasi server
baru. Edit push.solarmora.com
di /etc/nginx/sites-enabled
dan gunakan ID
nama domain server yang sepenuhnya
memenuhi syarat sebagai nama file:
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. Mulai ulang NGINX untuk menerapkan perubahan:
myusername@myhost:/etc/nginx$ sudo service nginx restart * Restarting nginx nginx ...done.
6. Server Anda telah dikonfigurasi. Untuk memverifikasi
konfigurasi, coba buat kueri server Anda menggunakan curl
:
[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>
Ini adalah respons yang diharapkan mengingat tidak ada server downstream yang dikonfigurasi
(localhost:8093
dalam file konfigurasi).
Mengompilasi dan menjalankan contoh
Untuk menjalankan contoh di bagian ini, Anda memerlukan Konsol API Google yang aktif proyek. Sebaiknya Anda membuatnya khusus untuk tujuan pengujian dan memisahkannya dari proyek produksi. Setelah membuat project uji, Anda harus membuat akun layanan. Catat alamat email akun layanan, dan letakkan file .p12 terkait di server Anda.
Menyiapkan hierarki kode sumber
1. Membuat cloning play-work.git
repositori:
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. Pastikan bahwa Maven dan compiler Buffering Protokol Google diinstal dengan benar:
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. File konfigurasi Maven pom.xml
mengasumsikan bahwa compiler Buffering Protokol diinstal ke direktori /usr/bin/protoc
:
myusername@myhost:~$ which protoc /usr/bin/protoc
pom.xml
atau symlink protoc
:
$ sudo ln -s which protoc
/usr/bin/protoc
mvn clean compile assembly:single
. Ini akan menghasilkan file bernama
emm-notifications-[version-number]-jar-with-dependencies.jar
, dengan
[version number]
adalah versi contoh saat ini, misalnya 1.0-SNAPSHOT
:
myusername@myhost:~/code/play-work/examples/emm-notifications$ ls target/* target/emm-notifications-1.0-SNAPSHOT-jar-with-dependencies.jar
TestPublisher
yang telah dikompilasi. Kode ini diperkirakan akan gagal:
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. Anda harus mengganti beberapa nilai dalam file settings.properties
. Untuk melakukannya:
Buat salinan file dan ubah properti dalam salinan sebagai berikut:
# 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. Jalankan kode TestPublisher
lagi untuk memastikan kode tidak lagi error. (Anda mungkin melihat
error tunggal dalam output log.)
Menjalankan kode pengujian penayang
Anda perlu menjalankan kode contoh untuk memublikasikan notifikasi sehingga pelanggan memiliki beberapa pesan untuk dibaca.
Pada contoh berikut, kode mencari bagian
topik yang ditentukan dalam my_settings.properties
tetapi tidak menemukannya. Dengan demikian, topik dibuat.
Kemudian, pesan akan dipublikasikan ke topik. Contoh ini memberikan gambaran
alat pengujian yang memungkinkan Anda mengemulasi pesan yang dikirim oleh Google Play EMM API.
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}]}
Menjalankan kode pengujian pelanggan
Kode uji pelanggan mengkonfirmasi bahwa Anda dapat menerima pesan yang diterbitkan oleh
kode TestPublisher
.
1. Pastikan kode Anda diperbarui dan dikompilasi, lalu jalankan kode uji pelanggan:
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. Jalankan kembali penayang, dan pesan baru akan ditambahkan ke log:
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 }