Google Play, होने वाले इवेंट के जवाब में सूचनाएं जनरेट करता है और किसी एंटरप्राइज़ को प्रभावित कर सकती है. ईएमएम समाधान देने वाली कंपनियां, यह जानकारी पा सकती हैं सूचना देने और उन पर कार्रवाई करने के लिए, एडमिन ऐक्सेस कर सकते हैं.
इस गाइड में, ज़रूरी सर्वर इन्फ़्रास्ट्रक्चर को कॉन्फ़िगर करने का तरीका बताया गया है का इस्तेमाल, सिर्फ़ ईएमएम के पुश नोटिफ़िकेशन पाने और उन्हें प्रोसेस करने के लिए किया जाता है. पुल नोटिफ़िकेशन के लिए इस गाइड में बताए गए सेटअप की ज़रूरत नहीं है.
इस गाइड में बताए गए सर्वर सेटअप के अलावा, पुश नोटिफ़िकेशन के लिए आपको ज़रूरी अधिकार और अन्य कॉन्फ़िगरेशन भी करने होंगे Google API कंसोल में टास्क पूरे किए जा सकते हैं. यहां जाएं: ईएमएम पुश नोटिफ़िकेशन चालू करना देखें.
Google Cloud Pub/Sub के बारे में ज़्यादा जानने के लिए, उदाहरण के साथ यह लेख देखें Cloud Pub/Sub का दस्तावेज़.
आप अपने सिस्टम को कॉन्फ़िगर कर सकते हैं, ताकि पुश नोटिफ़िकेशन या ऐसे सर्वर पर भेज सकते हैं जो सूचना भेजे जाने का इंतज़ार करता है.
पुश एंडपॉइंट के कॉन्फ़िगरेशन के बारे में जानकारी
पुश एंडपॉइंट को कॉन्फ़िगर करने के लिए, आपको मान्य एसएसएल सर्टिफ़िकेट वाले सर्वर की ज़रूरत होगी. तय सीमा में इस उदाहरण में, आप एक एसएसएल सर्टिफ़िकेट बनाकर, उसे किसी सर्टिफ़िकेट देने वाली संस्था या निकाय पर अपलोड करते हैं (CA), फिर NGINX सर्वर को कॉन्फ़िगर करें. आखिर में, टेस्ट कोड को कंपाइल करके चलाया जाता है पुष्टि करें कि आपका सेटअप सही है.
इस उदाहरण में बताया गया है कि
NGINX सर्वर यहां
सदस्य के ऐप्लिकेशन से कनेक्ट करने के लिए रिवर्स प्रॉक्सी मोड (PushSubscriber.java
में)
पोर्ट 8093 पर, Ubuntu 14.04 का उपयोग कर रहे हैं. आपका एंटरप्राइज़,
सर्वर, लेकिन नमूना सेटअप, बिना किसी बदलाव के, सभी Debian-आधारित सभी
डिस्ट्रिब्यूशन. दूसरे डिस्ट्रिब्यूशन (जैसे, RedHat पर आधारित) एक जैसे हैं,
लेकिन कॉन्फ़िगरेशन फ़ाइलों की जगह अलग हो सकती है.
सूचनाएं पाने से पहले, आपको एक ऐसा एंडपॉइंट कॉन्फ़िगर करना होगा जो नीचे दी गई शर्तें पूरी करता है:
आपको डोमेन का मालिक होना चाहिए और इसमें अपने मालिकाना हक की पुष्टि करनी चाहिए Google API कंसोल.
यह ज़रूरी है कि आप पोर्ट 443 (एसएसएल) पर सेवा चला सकें.
आपके पास CA से साइन किया गया एसएसएल सर्टिफ़िकेट होना चाहिए. खुद हस्ताक्षर किए हुए सर्टिफ़िकेट काम नहीं कर रहे.
आप जो वेब सर्वर चला रहे हैं उसे सही तरीके से काम करना चाहिए वेबहुक शामिल हैं.
आपके एंडपॉइंट को Google App Engine पर चलाने की ज़रूरत नहीं है (हालांकि ऐसा हो सकता है).
एसएसएल सर्टिफ़िकेट बनाएं और अपलोड करें
1. सिक्योर सॉकेट लेयर (एसएसएल) सर्टिफ़िकेट बनाएं:
myusername@myhost:/tmp$ sudo openssl req -x509 -nodes -days 365 \ -newkey rsa:2048 -keyout cert.key -out cert.crt
इससे यह रिस्पॉन्स जनरेट होता है. सैंपल वैल्यू बदलना
(जैसे कि push.solarmora.com
और myusername@myhost
) को अपने असल सर्वर से कनेक्ट करें
नाम, कंपनी, पता वगैरह की जानकारी शामिल करें. किसी भी
जब तक इस सबडोमेन का A
रिकॉर्ड आपके सर्वर को दिखाता है, तब तक वह सबडोमेन.
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. पुष्टि करें कि सर्टिफ़िकेट फ़ाइल बनाई गई है:
$ myusername@myhost:/tmp$ ls cert*
cert.crt cert.key
3. इस प्रमाणपत्र पर हस्ताक्षर करने के लिए, हस्ताक्षर करने वाले व्यक्ति को सर्टिफ़िकेट पर हस्ताक्षर करने का अनुरोध (सीएसआर) अपलोड करें:
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. सुनिश्चित करें कि सीएसआर फ़ाइल की सामग्री इस तरह से दिखती है:
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. अपने सर्टिफ़िकेट के उस हिस्से को BEGIN
के बीच अपलोड करें
और सीए के लिए END
लाइन (शामिल) होनी चाहिए. सटीक प्रक्रिया
आपके सीए (सर्टिफ़िकेट देने वाली संस्था) पर निर्भर करता है, लेकिन इसमें नीचे दिए गए चरण शामिल होंगे:
- अपनी सीएसआर फ़ाइल को सीए की साइट पर अपलोड करें या फ़ाइल के कॉन्टेंट को सीए की साइट पर चिपकाएं. इसके बाद, आपका सीए इस डेटा की पुष्टि करके उसे प्रोसेस करता है.
- उस प्रमाणपत्र को डाउनलोड करें जिसे आपके सीए ने जनरेट किया है.
6. सीए के आउटपुट में एक से ज़्यादा फ़ाइलें होनी चाहिए:
सर्टिफ़िकेट और सीए का सर्टिफ़िकेट, जिनसे पुष्टि होती हो कि वे इन शर्तों को पूरा कर सकते हैं
सर्टिफ़िकेट पर जाएं. डाउनलोड की गई फ़ाइलों में, सर्टिफ़िकेट वाली सभी *.crt
फ़ाइलें जोड़ें
बंडल को एक फ़ाइल में बंडल करें, उदाहरण के लिए bundle.push.solarmora.com.crt
:
$ cat *.crt > bundle.push.solarmora.com.crt
अपना प्रॉक्सी सर्वर कॉन्फ़िगर करें
इस सेक्शन में, NGINX ओपन सोर्स वेब सर्वर को कॉन्फ़िगर किया जाता है. इसके बाद, प्रॉक्सी सर्वर, एंडपॉइंट को सेवा देने और आने वाले सभी अनुरोधों को सदस्यता लेने के लिए इस्तेमाल किया जा सकता है. उदाहरण के तौर पर, NGINX का इस्तेमाल किया गया है, लेकिन किसी भी अन्य तरीके का इस्तेमाल किया जा सकता है इसके बजाय, एचटीटीपी प्रॉक्सी का इस्तेमाल करें.
1. अपने सर्वर पर NGINX इंस्टॉल करें:
$ sudo apt-get update $ sudo apt-get install nginx $ nginx -v $ nginx version: nginx/1.4.6 (Ubuntu)
2. यह सुनिश्चित करने के लिए कि जो अतिरिक्त सर्वर कॉन्फ़िगरेशन फ़ाइलें आप
sites-enabled
डायरेक्ट्री को NGINX प्रोसेस करता है. /etc/nginx/nginx.conf
में बदलाव करें
और इसमें नीचे दी गई जानकारी शामिल होनी चाहिए:
$ include /etc/nginx/conf.d/*.conf; $ include /etc/nginx/sites-enabled/*;
3. अपनी प्रमाणपत्र फ़ाइलों को किसी सुरक्षित स्थान पर कॉपी करें, जिसे
www-data
उपयोगकर्ता है, लेकिन हो सकता है कि कोई अन्य उपयोगकर्ता उसे ऐक्सेस न कर सके (आपको इन चीज़ों की ज़रूरत पड़ सकती है
उपयोगकर्ता नाम को समायोजित करने के लिए, यदि आपका वेब सर्वर किसी अन्य वेब सर्वर के रूप में
उपयोगकर्ता):
$ 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. server
का कोई नया कॉन्फ़िगरेशन बनाएं. push.solarmora.com
में बदलाव करें
/etc/nginx/sites-enabled
में और अपने वास्तविक
सर्वर का पूरी तरह क्वालिफ़ाइड डोमेन नेम, जैसे कि फ़ाइल नाम:
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. बदलावों को लागू करने के लिए, NGINX को रीस्टार्ट करें:
myusername@myhost:/etc/nginx$ sudo service nginx restart * Restarting nginx nginx ...done.
6. अब आपका सर्वर कॉन्फ़िगर हो गया है. पुष्टि करने के लिए
कॉन्फ़िगरेशन के लिए, 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>
यह उम्मीद के मुताबिक जवाब है, क्योंकि कोई भी डाउनस्ट्रीम सर्वर कॉन्फ़िगर नहीं किया गया है
(हमारी कॉन्फ़िगरेशन फ़ाइल में localhost:8093
).
उदाहरणों को कंपाइल करना और चलाना
इस सेक्शन में दिए गए उदाहरणों को चलाने के लिए, आपके पास Google API कंसोल चालू होना चाहिए प्रोजेक्ट. हमारा सुझाव है कि आप खास तौर पर टेस्टिंग के लिए बनाएं और इसे अपने प्रोडक्शन प्रोजेक्ट से अलग रखें. टेस्ट प्रोजेक्ट बनाने के बाद, आपको सेवा खाता बनाना होगा. सेवा खाते के ईमेल पते को नोट कर लें और इससे जुड़ी .p12 फ़ाइल को अपने सर्वर पर कहीं रखें.
सोर्स कोड ट्री सेट अप करना
1. 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. पुष्टि करना कि Maven और Google प्रोटोकॉल बफ़र कंपाइलर, दोनों सही तरीके से इंस्टॉल किया गया:
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 कॉन्फ़िगरेशन फ़ाइल pom.xml
यह मानती है कि प्रोटोकॉल बफ़र कंपाइलर को /usr/bin/protoc
डायरेक्ट्री में इंस्टॉल किया गया है:
myusername@myhost:~$ which protoc /usr/bin/protoc
pom.xml
या protoc
को सिमलिंक करें:
$ sudo ln -s which protoc
/usr/bin/protoc
mvn clean compile assembly:single
चलाकर कोड बनाया जा सकता है. इससे एक फ़ाइल होगी, जिसका नाम
emm-notifications-[version-number]-jar-with-dependencies.jar
, जहां
[version number]
, उदाहरण का मौजूदा वर्शन है, उदाहरण के लिए 1.0-SNAPSHOT
:
myusername@myhost:~/code/play-work/examples/emm-notifications$ ls target/* target/emm-notifications-1.0-SNAPSHOT-jar-with-dependencies.jar
TestPublisher
कोड को चलाने का विकल्प है. ऐसा हो सकता है कि कोड काम न करे:
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
फ़ाइल में कुछ वैल्यू को बदलना होगा. ऐसा करने के लिए,
फ़ाइल की एक कॉपी बनाएं और कॉपी की प्रॉपर्टी को इस तरह से बदलें:
# 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. TestPublisher
कोड को फिर से चलाएं, ताकि यह पक्का हो सके कि वह अब क्रैश नहीं होता है. (आपको रिपोर्ट में,
लॉग आउटपुट में एक गड़बड़ी दिखेगी.)
पब्लिशर टेस्ट कोड चलाएं
सूचनाएं पब्लिश करने के लिए, आपको सैंपल कोड चलाना होगा, ताकि आपके सदस्य के पास पढ़ने के लिए कुछ मैसेज हैं.
नीचे दिए गए उदाहरण में, कोड
विषय my_settings.properties
में दिया गया है, लेकिन वह उसे नहीं मिला और इसलिए यह विषय बना देता है.
इसके बाद, उस विषय के लिए मैसेज पब्लिश किया जाता है. इस उदाहरण में दिखाया गया है कि
टेस्टिंग टूल, जो आपको Google Play के ईएमएम एपीआई से भेजे गए मैसेज को एम्युलेट करने की अनुमति देता है.
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}]}
सदस्यता की जांच करने वाला कोड चलाना
सदस्यता की जांच करने वाले कोड से यह पुष्टि होती है कि आपको
TestPublisher
कोड.
1. पक्का करें कि आपका कोड अप-टू-डेट हो और उसे कंपाइल किया गया हो. इसके बाद, सदस्य की जाँच करने के लिए कोड:
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. पब्लिशर को फिर से चलाएं और नए मैसेज मिलेंगे लॉग में जोड़ा गया:
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 }