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 }