পুশ বিজ্ঞপ্তির জন্য সার্ভার সেট আপ করুন

Google Play কোনো এন্টারপ্রাইজকে প্রভাবিত করতে পারে এমন ইভেন্টগুলির প্রতিক্রিয়া হিসাবে বিজ্ঞপ্তি তৈরি করে৷ EMM সমাধান প্রদানকারীরা এই বিজ্ঞপ্তিগুলি গ্রহণ করতে পারে এবং তাদের গ্রাহক প্রশাসকদের জন্য সতর্কতা বা অন্যান্য প্রক্রিয়া প্রদান করে তাদের উপর কাজ করতে পারে, উদাহরণস্বরূপ।

শুধুমাত্র EMM পুশ বিজ্ঞপ্তিগুলি গ্রহণ এবং প্রক্রিয়া করার জন্য প্রয়োজনীয় সার্ভার পরিকাঠামো কীভাবে কনফিগার করবেন তা এই নির্দেশিকা আপনাকে বলে৷ পুল বিজ্ঞপ্তিগুলির জন্য এই গাইডে বিস্তারিত সেটআপের প্রয়োজন নেই।

এই নির্দেশিকায় বর্ণিত সার্ভার সেটআপ ছাড়াও, পুশ বিজ্ঞপ্তিগুলির জন্য আপনাকে অবশ্যই উপযুক্ত বিশেষাধিকার প্রদান করতে হবে এবং Google API কনসোলে অন্যান্য কনফিগারেশন কাজগুলি সম্পাদন করতে হবে৷ বিস্তারিত জানার জন্য EMM পুশ বিজ্ঞপ্তি সক্ষম করুন দেখুন।

উদাহরণ সহ Google Cloud Pub/Sub সম্পর্কে আরও তথ্যের জন্য, Cloud Pub/Sub ডকুমেন্টেশন দেখুন।

আপনি আপনার সিস্টেম কনফিগার করতে পারেন যাতে পুশ বিজ্ঞপ্তিগুলি একটি নির্দিষ্ট HTTPS এন্ডপয়েন্টে বা এমন একটি সার্ভারে পাঠানো হয় যা বিজ্ঞপ্তি পাঠানোর জন্য অপেক্ষা করে।

পুশ এন্ডপয়েন্ট কনফিগারেশন সম্পর্কে

একটি পুশ এন্ডপয়েন্ট কনফিগার করতে আপনার একটি বৈধ SSL শংসাপত্র সহ একটি সার্ভার প্রয়োজন৷ এই উদাহরণে, আপনি একটি সার্টিফিকেট অথরিটি (CA) তে একটি SSL শংসাপত্র তৈরি এবং আপলোড করুন, তারপর NGINX সার্ভার কনফিগার করুন৷ অবশেষে আপনি আপনার সেটআপ সঠিক কিনা তা নিশ্চিত করতে পরীক্ষা কোড কম্পাইল করুন এবং চালান।

এই উদাহরণটি দেখায় কিভাবে উবুন্টু 14.04 ব্যবহার করে পোর্ট 8093-এ চলমান সাবস্ক্রাইবার অ্যাপে ( PushSubscriber.java ) সংযোগ করতে বিপরীত প্রক্সি মোডে একটি NGINX সার্ভার কনফিগার করতে হয়। আপনার এন্টারপ্রাইজ একটি ভিন্ন সার্ভার ব্যবহার করতে পারে, কিন্তু নমুনা সেটআপটি সমস্ত ডেবিয়ান-ভিত্তিক বিতরণে পরিবর্তন ছাড়াই কাজ করা উচিত। অন্যান্য ডিস্ট্রিবিউশন (যেমন RedHat ভিত্তিক) একই রকম, কিন্তু কনফিগারেশন ফাইলের অবস্থান ভিন্ন হতে পারে।

আপনি বিজ্ঞপ্তিগুলি পাওয়ার আগে, আপনাকে অবশ্যই একটি শেষ পয়েন্ট কনফিগার করতে হবে যা নিম্নলিখিত মানদণ্ড পূরণ করে:

  • আপনাকে অবশ্যই ডোমেনের মালিক হতে হবে এবং Google API কনসোলে আপনার মালিকানা যাচাই করতে হবে।

  • আপনি পোর্ট 443 (SSL) এ একটি পরিষেবা চালাতে সক্ষম হতে হবে।

  • আপনার অবশ্যই একটি CA- স্বাক্ষরিত SSL শংসাপত্র থাকতে হবে৷ স্ব-স্বাক্ষরিত শংসাপত্র কাজ করে না।

  • আপনি যে ওয়েব সার্ভারটি চালাচ্ছেন সেটি অবশ্যই ওয়েবহুক সমর্থন করবে৷

আপনার এন্ডপয়েন্টকে Google অ্যাপ ইঞ্জিনে চালানোর প্রয়োজন নেই (যদিও এটি পারে)।

একটি SSL শংসাপত্র তৈরি করুন এবং আপলোড করুন৷

1. একটি সিকিউর সকেট লেয়ার (SSL) সার্টিফিকেট তৈরি করুন:

    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. এই শংসাপত্রটি স্বাক্ষরিত পেতে, আপনার স্বাক্ষরকারীকে আপলোড করার জন্য একটি শংসাপত্র স্বাক্ষর করার অনুরোধ (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 ফাইলের বিষয়বস্তু এইরকম দেখাচ্ছে:

    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 লাইনের মধ্যে (অন্তর্ভুক্ত) আপনার CA-তে আপলোড করুন৷ সঠিক প্রক্রিয়াটি আপনার CA এর উপর নির্ভর করবে, তবে নিম্নলিখিত পদক্ষেপগুলি অন্তর্ভুক্ত করবে:

  1. আপনার CA সাইটে আপনার CSR ফাইল আপলোড করুন, অথবা আপনার CA সাইটে আপনার ফাইলের সামগ্রী পেস্ট করুন৷ আপনার CA তারপর এই ডেটা যাচাই করে এবং প্রক্রিয়া করে।
  2. আপনার CA দ্বারা তৈরি স্বাক্ষরিত শংসাপত্রটি ডাউনলোড করুন৷

6. CA থেকে আউটপুটে একাধিক ফাইল থাকা উচিত: স্বাক্ষরিত শংসাপত্র নিজেই এবং CA-এর শংসাপত্র নিশ্চিত করে যে তারা শংসাপত্রে স্বাক্ষর করার যোগ্য। ডাউনলোড করা বান্ডেলের সমস্ত *.crt সার্টিফিকেট ফাইল একটি একক বান্ডেল ফাইলে সংযুক্ত করুন, উদাহরণস্বরূপ bundle.push.solarmora.com.crt :

$ cat *.crt > bundle.push.solarmora.com.crt

আপনার প্রক্সি সার্ভার কনফিগার করুন

এই বিভাগে আপনি এনজিআইএনএক্স ওপেন সোর্স ওয়েব সার্ভার এবং রিভার্স প্রক্সি সার্ভার কনফিগার করেন যাতে এন্ডপয়েন্ট পরিবেশন করা যায় এবং সমস্ত ইনকামিং অনুরোধ সাবস্ক্রাইবার সার্ভারে ফরোয়ার্ড করা হয়। NGINX একটি উদাহরণ হিসাবে ব্যবহার করা হয়, কিন্তু আপনি পরিবর্তে অন্য কোনো HTTP প্রক্সি ব্যবহার করতে পারেন।

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 কনফিগারেশন তৈরি করুন। /etc/nginx/sites-enabledpush.solarmora.com সম্পাদনা করুন এবং ফাইলের নাম হিসাবে আপনার প্রকৃত সার্ভারের সম্পূর্ণ যোগ্য ডোমেন নাম ব্যবহার করুন:

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. ডেবিয়ান-ভিত্তিক সিস্টেমে মাভেন এবং গুগল প্রোটোকল বাফার কম্পাইলার উভয়ই ইনস্টল করুন:
    $ 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 বা symlink 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 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}]}

গ্রাহক পরীক্ষার কোড চালান

গ্রাহক পরীক্ষার কোড নিশ্চিত করে যে আপনি 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 }
একটি বার্তা সঠিকভাবে প্রাপ্ত এবং প্রক্রিয়া করা হয়েছে.