urban airship实现消息内容的推送

来源:互联网 发布:rgb转换 算法 编辑:程序博客网 时间:2024/05/01 00:09

首先介绍一下urban airship是个什么样的东西。在我们使用手机的时候,经常会受到一些类似于弹窗的东西,会给我们一些提示,可能是微信等一些聊天工具发出的“你受到了一条消息”,这一类我们称为消息推送。苹果有APNs是针对ios做的推送服务,但是对于其他的手机用户,就无法使用APNs了。这个时候,如果有对所有类型的手机进行推送请求的需求诞生,是否针对不同手机就需要使用不同的推送服务呢?这个时候我们需要其他的推送方式,而urban airship就是其中之一。

https://docs.urbanairship.com/index.html 参考文档

上述文档链接包含了urban airship的接口和api。

先看一份推送请求的样例

curl https://go.urbanairship.com/api/lists/ \   -X POST \   -u "<AppKey>:<MasterSecret>" \   -H "Accept: application/vnd.urbanairship+json; version=3" \   -H "Content-Type: application/json" \   -d '{          "audience": { "static_list": "weekly_offers" },          "device_types": "all",          "notification": {             "alert": "Check out these deals!",             "open": {                "type": "deep_link",                "content": "offers"             }          }       }'
       (可以使用postman进行调试)

url我们可以在参考文档当中找到(目前使用https://go.urbanairship.com/api/push/)。因为我们是想urban airship发送的请求,所以请求种类填写POST。
<AppKey>:<MasterSecret>是用于登录urbanship的账号和密码,这个需要你在官网进行申请,会有正式用和测试用两种。之后是放在header当中的一些参数,主要是你所要使用的版
本以及之后发送的data内容格式(json)。
 接下来的data内容才是重点,这里面有五个顶级属性Audience ,Notification Payload , Device Types ,Delivery Options  ,Rich Message Content (Optional)

  audience用于确定你推送的对象,可以采取直接对于设备地址进行推送,可以使用Channel,APID等属性。另外也可以依据其他一些属性进行对象选择,Named Users是一个很好用的属性,(aliases原先和named users是相同的功能但是现在已经被named users取代),我们可以利用named users发给指定的用户,同时我们也可以发给一类用户群体,使用tags或者tag froups可以让你对标有这类标签的对象进行推送。关于audience信息的设置,可以采取在用户登录你的应用时候,对其进行备注,然后将你设置的信息发送给urban airship,我们在服务器端进行推送的时候,就可以利用audience的信息发送至urban airship实现交互确认。

        Notification Payload 这表示我们使用的是Notification进行推送,里面最简单,也是最重要的一个属性就是alert,这个属性需要使用就json格式填写信息,你所填写的信息也将是推送给用户的信息。

 Device Types 表示推送设备的类型,可以是all代表推送给所有类型的设备,也可以是ios, android ,blackberry ,wns ,mpns这几种类型,要注意的是Device Types是一个数组。

一般而言,在填写了上述三个属性之后,就可以进行消息的推送了。至于Delivery Options,目前只有唯一的选项expirty。Rich Message Content (Optional)这也是一个可以选择的项,用于丰富你的推送内容。

附上一份php封装推送的代码

class push {...function pushtoios ($appid, $apppassword, $user_id) {        $loginInformation = $appid . ":" . $apppassword;        $username = $user_id .;        $headers = array();        $headers[] = "Content-Type: application/json";        $headers[] = "Accept: application/vnd.urbanairship+json; version=3";        $alert_info = "HELLO";        $datasArray = array('audience' => array('named_user' => $username), 'notification' => array('alert' => $alert_info), 'device_types' => array("ios"));        $datas = json_encode($datasArray);        $response = $this->http_request($url, $datas, 'POST', $headers, $loginInformation);}        function http_request($url, $params, $request_type = 'POST', $header = false, $loginInformation = null, $connectTimeout = 15, $readTimeout = 15) {        $ch = curl_init();        curl_setopt($ch, CURLOPT_TIMEOUT, $readTimeout);           curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connectTimeout);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);         if($header) {             curl_setopt($ch, CURLOPT_HEADER, 1);             curl_setopt($ch, CURLOPT_HTTPHEADER, $header);         }         if (!empty($loginInformation)) {             curl_setopt($ch, CURLOPT_USERPWD, $loginInformation);       }       curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request_type);         if ($request_type == 'POST') {                    curl_setopt($ch, CURLOPT_POST, 1);                    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);        }           curl_setopt($ch, CURLOPT_URL, $url);                $result = curl_exec($ch);          curl_close($ch);        return $result;}}
如果返回结果为true,则表示推送成功


0 0