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
}