Google Play meydana gelen etkinliklere yanıt olarak bildirimler oluşturur ve bir kurumu etkileyebilir. EMM çözüm sağlayıcıları bunları alabilir uyarılar veya başka mekanizmalar paylaşarak, bu e-postalarla ilgili yöneticileriyle bağlantı kurabilir.
Bu kılavuzda, gerekli sunucu altyapısını nasıl yapılandıracağınız açıklanmaktadır. Yalnızca EMM push bildirimlerini almak ve işlemek için. Getirme bildirimleri, bu kılavuzda ayrıntılı olarak açıklanan kurulum işlemini gerektirmez.
Bu kılavuzda açıklanan sunucu kurulumuna ek olarak, push bildirimleri için ayrıca uygun ayrıcalıkları vermeli ve diğer yapılandırma işlemlerini gerçekleştirmeniz Google API Konsolu'ndaki görevlere dönelim. Görüntüleyin EMM push bildirimlerini etkinleştirme inceleyebilirsiniz.
Örnekler dahil olmak üzere Google Cloud Pub/Sub hakkında daha fazla bilgi edinmek için Cloud Pub/Sub belgeleri.
Sisteminizi push bildirimlerinin bir HTTPS uç noktasına ya da bildirimlerin gönderilmesini bekleyen bir sunucuya gönderebilirsiniz.
Push uç noktası yapılandırması hakkında
Push uç noktası yapılandırmak için geçerli SSL sertifikası olan bir sunucuya ihtiyacınız vardır. İçinde Bu örnekte, bir SSL sertifikası oluşturup bunu bir sertifika yetkilisine (CA) açın, ardından NGINX sunucusunu yapılandırın. Son olarak da test kodunu derleyip çalıştırarak kurulumunuzun doğru olduğunu onaylayın.
Bu örnekte, bir öğeyi
NGINX sunucusu:
abone uygulamasına bağlanmak için ters proxy modu (PushSubscriber.java içinde)
bağlantı noktası 8093'te çalıştırmaktır. İşletmeniz farklı bir
sunucudur, ancak örnek kurulumun değişiklik yapılmadan tüm Debian tabanlı
en iyi uygulamaları içerir. Diğer dağılımlar (RedHat'e dayalı olanlar gibi) benzerdir,
ancak yapılandırma dosyalarının konumu farklı olabilir.
Bildirim almaya başlamadan önce, aşağıdaki özelliklere sahip bir uç nokta yapılandırmanız gerekir: şu ölçütleri karşılıyor:
Alanın sahibi olmanız ve Google API Konsolu.
443 numaralı bağlantı noktası (SSL) üzerinden bir hizmeti çalıştırabiliyor olmanız gerekir.
CA imzalı bir SSL sertifikanız olmalıdır. Kendinden imzalı sertifikalar çalışmaz.
Çalıştırdığınız web sunucusu, webhook'lar gibi.
Uç noktanızın Google App Engine'de çalışması gerekmez (ancak çalıştırılabilir).
SSL sertifikası oluşturma ve yükleme
1. Güvenli Yuva Katmanı (SSL) sertifikası oluşturun:
myusername@myhost:/tmp$ sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 -keyout cert.key -out cert.crt
Bu işlem aşağıdaki yanıtı oluşturur. Örnek değerleri değiştirin
(ör. push.solarmora.com ve myusername@myhost) gerçek sunucunuzla
ad, şirket, adres vb. bilgileri aşağıdaki koda ekleyin. Herhangi bir
olması koşuluyla, bu alt alan adının A kaydı sunucunuza işaret eder.
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. Bir sertifika dosyasının oluşturulduğunu doğrulayın:
$ myusername@myhost:/tmp$ ls cert*
cert.crt cert.key
3. Bu sertifikayı imzalatmak için sertifika imzalama isteği (CSR):
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. CSR dosyasının içeriğinin aşağıdaki gibi göründüğünden emin olun:
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. Sertifikanızın bir bölümünü BEGIN
ve CA'nıza END satır (dahil) eklendi. Tam süreç,
CA'nıza bağlıdır ancak şu adımları içerir:
- CSR dosyanızı CA sitenize yükleyin veya dosyanızın içeriğini CA sitenize yapıştırın. Ardından CA'nız bu verileri doğrular ve işler.
- CA'nız tarafından oluşturulan imzalı sertifikayı indirin.
6. CA'dan alınan çıkış birden fazla dosya içermelidir: imzalı
ve ilgili CA'nın sertifikasına göre, bu sertifikanın kendisi
imzalar. İndirilen dosyadaki tüm *.crt sertifika dosyalarını birleştir
paket, tek bir paket dosyasında toplanır (örneğin, bundle.push.solarmora.com.crt):
$ cat *.crt > bundle.push.solarmora.com.crt
Proxy sunucunuzu yapılandırma
Bu bölümde, NGINX açık kaynak web sunucusunu yapılandırıp uç noktayı sunmasını ve tüm gelen istekleri abone sunucusu. NGINX örnek olarak kullanılır, ancak HTTP proxy'yi seçin.
1. Sunucunuza NGINX'i yükleyin:
$ sudo apt-get update
$ sudo apt-get install nginx
$ nginx -v
$ nginx version: nginx/1.4.6 (Ubuntu)
2. Google Etiket Yöneticisi'nde oluşturduğunuz ek sunucu yapılandırma dosyalarının
sites-enabled dizini NGINX tarafından işleniyor, /etc/nginx/nginx.conf öğesini düzenleyin
ve aşağıdakileri ekleyin:
$ include /etc/nginx/conf.d/*.conf;
$ include /etc/nginx/sites-enabled/*;
3. Sertifika dosyalarınızı
www-data kullanıcı tarafından okunamaz, ancak tercihen başka kullanıcılar tarafından okunamaz (
web sunucunuz farklı bir sunucu olarak çalışıyorsa, kullanıcı adını
kullanıcı):
$ 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. Yeni bir server yapılandırması oluşturun. push.solarmora.com öğesini düzenle
/etc/nginx/sites-enabled ve gerçek
sunucunun tam alan adını dosya adı olarak kullanın:
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. Değişiklikleri uygulamak için NGINX'i yeniden başlatın:
myusername@myhost:/etc/nginx$ sudo service nginx restart
* Restarting nginx nginx
...done.
6. Sunucunuz artık yapılandırılmış. Doğrulamak için
yapılandırmasında curl kullanarak sunucunuzu sorgulamayı deneyin:
[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>
Herhangi bir aşağı akış sunucusu yapılandırılmadığı için beklenen yanıt budur
(yapılandırma dosyamızda localhost:8093).
Örnekleri derleyin ve çalıştırın
Bu bölümdeki örnekleri çalıştırmak için etkin bir Google API Konsolu'na ihtiyacınız vardır belirler. Test amacıyla özel olarak bir tane oluşturmanızı öneririz. ve üretim projenizden ayrı tutmaktır. Bir test projesi oluşturduktan sonra, Bir hizmet hesabı oluşturmanız gerekir. Hizmet hesabı e-posta adresini not edin ve ilişkili .p12 dosyasını sunucunuzda bir yere yerleştirin.
Kaynak kodu ağacını ayarlama
1. play-work.git deposunu klonlayın:
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. Maven ve Google Protokol Arabellekleri derleyicisinin doğru yüklü olduğundan emin olun:
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. Maven yapılandırma dosyası pom.xml, Protokol Arabellekleri derleyicisinin /usr/bin/protoc dizinine yüklendiğini varsayar:
myusername@myhost:~$ which protoc
/usr/bin/protoc
pom.xml öğesini veya protoc sembolik bağlantısını değiştirebilirsiniz:
$ sudo ln -s which protoc /usr/bin/protoc
mvn clean compile assembly:single komutunu çalıştırarak kodu oluşturabildiğinizi doğrulayın. Bu işlem,
emm-notifications-[version-number]-jar-with-dependencies.jar, burada:
[version number], örneğin geçerli sürümüdür. Örneğin 1.0-SNAPSHOT:
myusername@myhost:~/code/play-work/examples/emm-notifications$ ls target/*
target/emm-notifications-1.0-SNAPSHOT-jar-with-dependencies.jar
TestPublisher kodunu çalıştırabildiğinizi doğrulayın. Kodun başarısız olması beklenir:
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. settings.properties dosyasındaki bazı değerleri geçersiz kılmanız gerekir. Bunu yapmak için
dosyanın bir kopyasını oluşturun ve kopyadaki özellikleri aşağıdaki gibi değiştirin:
# 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. Kilitlenmemesinden emin olmak için TestPublisher kodunu tekrar çalıştırın. (
tek hata olabilir.)
Yayıncı test kodunu çalıştırma
Bildirimlerin yayınlanması için örnek kodu çalıştırmanız gerekir. Bu işlem abonenin okuyacağı bazı mesajlar var.
Aşağıdaki örnekte kod,
konu my_settings.properties işlevinde belirtilmiş ancak bulamıyor; dolayısıyla, konu oluşturuyor.
Ardından konuda bir mesaj yayınlar. Bu örnek, çok değerli bir
Google Play EMM API'si tarafından gönderilen mesajları emüle etmenize olanak tanıyan test aracı
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}]}
Abone test kodunu çalıştırma
Abone test kodu, Google Ads tarafından yayınlanan
TestPublisher kodu.
1. Kodunuzun güncel ve derlenmiş olduğundan emin olduktan sonra abone test kodu:
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. Yayıncıyı tekrar çalıştırın. Yeni mesajlar günlüğe eklendi:
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
}