目录

User Manual of PNS

The document introduces usage of PNS Web interface.

Here are the concepts of user channel and tag channel, which must be clarified:

Invoking the Web interface

Developers need to POST data to Web interface, and the Web interface will return result in JSON.

If the following is configured in the file of toaster.conf:

[web]
bind localhost:8080

Then you can call Web Interface using the following Linux command, or call it by programming of HTTP:

curl –X POST –d POST_DATA http://localhost:8080/METHOD_NAME

inside

POST_DATA is POST data to PNS
METHOD_NAME is the method name to be called

Push to a single user or multiple users(pub)

METHOD_NAME: pub

POST_DATA:

"expired": "1403521931",
             "appid": "XXX",
             "channel": "xxx@qq.com",
             "channel": "xxx@gmail.com",
             "data": "hello world" 

Notification Bar message template

If you are using the embedded presentation template in SDK, for the Notification Bar of Android, you need to use format data in POST method, refer to the JSON string as following:

{ 
     "type":"notification", //notification bar type
    "style":"1",                    //notification bar style number
    "config":{ 
        "icondata":"XXXXXXX",   //icon file data with BASE64 encoding
        "vibrate":"1",                     //whether to vibrate when receive the message: 1 vibrating, 0 no vibrating
        "sound":"1",                       //whether to play sound: 1 sound, 0 no sound
        "title":"XXXXXX",                //notification bar title
        "ticker":"XXXXXXX",           //the rolling information
        "body":"XXXXXXX",           //notification content
        "clickconfig":{                   //define the behavior after user clicks the notification bar, please refer to the examples below
            "operation":"launchActivity", 
            "package":"com.wbkit.icclient", 
            "targetActivity":"com.wbkit.icclient.MainActivity" 
        } 
    } 
}

clickconfig Example 1: open APP (Activity)

{
 “operation”:“launchActivity”,          //operation type: open Activity
 “package” : “com.example.demo”  //APK package name
 “targetActivity”: “com.example.demo.MainActivity” //Activity
}

clickconfig Example 2: download APK and install

{
 “operation”:“download”,       //operation type: download APK
 “appname”: “fishing”             //APP name
 “dlurl”: “http://xxxxxx.apk”        //APK url
  //PS: popup installation guide of Android automatically after downloading
}

clickconfig Example 3: open a web page

{
 “operation”:“loadWebpage”,      //operation type: open a web page
  //PS: if both url and page are provided, the SDK will use url
 “url”: “http://www.baidu.com”,     //url
 “page”: “.....”            //content of page
}

Payload message template embedded

Format data as following:

{
 “type”:“transparent”, //payload type
 “config”:“{
         	“content”:“XXXXXXX”, //payload notification content
	         } ”
}

Format of returns from Web Interface:

{
            "status":      "200",
            "pushedCount": 100,
            "offCount":    1,
            "elapsed":     0.52,
            "mid":         "489c4464de66000"
         }

Push to specified one or more tag channels (tagpub)

tagpub is a command for the tag channel pushing, also supporting offline messages, as long as non-zero value of expired. But please note offline messages will cost more resources. If only a instant message, please set expired to 0 . METHOD_NAME: tagpub POST_DATA:

           "channel": "localtion:beijing",
           "channel": "location:guangzhou",
           "data": "hello world",
           "appid": "XXX",
           "expired": "1403521931"

Returns format:

       {
          "status":      "200",
          "pushedCount": 100,
          "elapsed":     0.52,
          "mid":         "489c4465de66000"
       }

All the returns have same meaning with pub method.

Push to all the users of an APP (allpub)

The method will push notification to online users or all users(devices) under appid. “expired” is used to distinguish online users and offline users. If expired is set 0, PNS will send data to online users, and do not save offline message.

METHOD_NAME: allpub POST_DATA:

           "appid": "XXX",
           "data": "hello world",
           "expired": "1403521931"

Returns format:

      {
          "status":      "200",
          "pushedCount": 100,
          "elapsed":     0.52,
          "mid":         "489c4466de66000" 
       }

Status description:

Add uid to tag-channel (sub-tag)

PNS will add the uids to a certain tag channel when this interface is invoking. This method is idempotent. METHOD_NAME:sub-tag POST_DATA:

           "appid": "XXX",
           "tag": "localtion:beijing",
           "uid": "xxx@qq.com",
           "uid": "xxxx@gmail.com" 

Parameters description:

appid: the associated appid, only one tag: the tag name to be used, also only one uid: uid to be added to the tag-channel, can be multiple Returns format:

      {
          "status": "200"
       }

Status description:

Remove uid form tag-channel(unsub-tag)

METHOD_NAME: unsub-tag POST_DATA:

          "appid": "XXX",
           "tag": "localtion:beijing",
           "uid": "xxx@qq.com",
           "uid": "xxxx@gmail.com", 

Parameters description:

appid: the associated appid, only one tag: the tag-channel name to be used, also only one uid: uid to be removed from the tag-channel, can be multiple Returns format:

     {
          "status": "200" 
      }

Status:

Push task query (message)

METHOD_NAME: message POST_DATA:

      "mid": "489c4466de66000"          

Returns format:

      {
           "status":"200"
           "489c4466de66000": 
             {
                  "content":"hello world!",        
                  "expire":"1404378620",
                  "readCount":"0",
                  "recvdCount":"0",
                  "startTime":"1403407632",
                  "totalCount":"2",
                  "appid": "XXX"
              }
      }

Returns description:

User channel query (userchannel)

METHOD_NAME: userchannel POST_DATA:

          "channel": "xxx@qq.com",
          "channel": "xxxx@gmail.com" 

Returns:

   {
       "status": "200",
       "xxx@qq.com": 1, //this uid is online
       "xxxx@gmail.com": 0 //this uid is offline
    }

Tag channel query (tagchannel)

METHOD_NAME: tagchannel POST_DATA:

          "channel": "location:Beijing",
          "channel": "location:Guangzhou"

Return :

   {
       "status": "200",
       "location:Beijing": 456, //there are 456 people under TAG "location:Beijing" currently, including online and offline
       "location:Guangzhou": 23 //there are 23 people under TAG "location:Guangzhou" currently, including online and offline
    }

APP query(app-size)

METHOD_NAME: app-size POST_DATA:

          "online": 1,
          "appid": "xxx",
          "appid": "yyy" 

online: 1 indicates to query online user count, 0 for the total count including offline appid: can provide multiple appid to query Return format:

  {
       "status": "200",
       "xxx": 1234, //app which appid is xxx online (or total) user number is 1234 currently
       "yyy": 567 //app which appid is yyy online (or total) user number is 567 currently
    }

The returned number indicates count of devices, and the meaning depends on the “online” value of the method.