पुश नोटिफ़िकेशन के लिए सर्वर सेट अप करें

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 लाइन (शामिल) होनी चाहिए. सटीक प्रक्रिया आपके सीए (सर्टिफ़िकेट देने वाली संस्था) पर निर्भर करता है, लेकिन इसमें नीचे दिए गए चरण शामिल होंगे:

  1. अपनी सीएसआर फ़ाइल को सीए की साइट पर अपलोड करें या फ़ाइल के कॉन्टेंट को सीए की साइट पर चिपकाएं. इसके बाद, आपका सीए इस डेटा की पुष्टि करके उसे प्रोसेस करता है.
  2. उस प्रमाणपत्र को डाउनलोड करें जिसे आपके सीए ने जनरेट किया है.

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.
2. Debian सिस्टम पर, Maven और दोनों को इंस्टॉल करें यह Google प्रोटोकॉल बफ़र कंपाइलर:
    $ 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
5. उदाहरणों को कंपाइल करें. पुष्टि करें कि 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
6. पुष्टि करें कि आपके पास, कंपाइल किए गए 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 }
मैसेज सही तरीके से मिला और प्रोसेस किया गया.