快速了解极光推送开发流程- 附PHP开发完整版

开发流程步骤详解
一、初准备(基础材料):
1.https://jiguang.cn,注册账号创建应用
2.在应用设置-推送设置中,配置好android和ios相关配置选项
3.开发文档https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/

二、功能业务(前后端配合完成):
1.当用户在客户端登录成功后,调用获取 RegistrationID API,并根据业务场景选择,为用户设置tags标签组、alias别名
2.把设置好的tags标签或alias别名告诉给后端开发人员并保存(因为做推送的时候,我们就可以通过标签组,或别名来给指定的人群推送消息了)

三、功能业务(后端):
根据自己业务场景所需,进行推送消息即可

四、功能业务(前端):
1.当后端推送一条信息时,手机可以正常接收,当用户点击打开信息时触发极光推送的点击事件(这块自行查阅),后端会携带业务场景所需参数,前端可以根据参数进行页面功能展示

五、PHP代码示例

<?php

namespace app\lib\push;


class JpushSend
{
    private $app_key = 'acxxxxxxx';        // 极光推送中,所创建应用中获取
    private $master_secret = 'a0xxxxxxx';  // 同理
    private $url = "https://api.jpush.cn/v3/push";        // 推送api接口

    public function __construct($app_key = null, $master_secret = null, $url = null)
    {
        if ($app_key) $this->app_key = $app_key;
        if ($master_secret) $this->master_secret = $master_secret;
        if ($url) $this->url = $url;
    }

    public function send_pub($receiver, $push_data, $extras, $m_time=86400)
    {
        $message = "";//存储推送状态
        $result = $this->push($receiver, $push_data, $extras, $m_time);
        if ($result) {
            $res_arr = json_decode($result, true);
            if (isset($res_arr['error'])) {                       //如果返回了error则证明失败
                echo $res_arr['error']['message'];          //错误信息
                $error_code = $res_arr['error']['code'];             //错误码
                switch ($error_code) {
                    case 200:
                        $message = '发送成功!';
                        break;
                    case 1000:
                        $message = '失败(系统内部错误)';
                        break;
                    case 1001:
                        $message = '失败(只支持 HTTP Post 方法,不支持 Get 方法)';
                        break;
                    case 1002:
                        $message = '失败(缺少了必须的参数)';
                        break;
                    case 1003:
                        $message = '失败(参数值不合法)';
                        break;
                    case 1004:
                        $message = '失败(验证失败)';
                        break;
                    case 1005:
                        $message = '失败(消息体太大)';
                        break;
                    case 1008:
                        $message = '失败(appkey参数非法)';
                        break;
                    case 1020:
                        $message = '失败(只支持 HTTPS 请求)';
                        break;
                    case 1030:
                        $message = '失败(内部服务超时)';
                        break;
                    default:
                        $message = '失败(返回其他状态,目前不清楚额,请联系开发人员!)';
                        break;
                }
            } else {
                $message = "success"; // 发送成功
            }
        } else {
            $message = 'fail'; // 其他
        }
        return $message; // 发送失败,打印错误信息
    }

    /**
     * @param $receiver // 接收对象 场景1所有人,场景2别名,注意按别名推送时,参数是一个数组型如['alias1','alias2']
     * @param $push_data // 基础发送展示 title、content
     * @param $extras // 业务逻辑 额外参数 自定义
     * @param $m_time //保存离线时间的秒数默认为一天 注意参数类型是一个非负整数型
     * @return bool|mixed
     */
    public function push($receiver, $push_data, $extras, $m_time)
    {
        $base64 = base64_encode("$this->app_key:$this->master_secret");
        $header = array("Authorization:Basic $base64", "Content-Type:application/json");
        $data = array();
        $data['platform'] = 'all';          //目标用户终端手机的平台类型android,ios,winphone,all所有平台
        if ($receiver == 'all') {
            $data['audience'] = $receiver;      //目标用户(all所有)
        }else{
            $data['audience']['alias'] = $receiver; // 目标(别名)用户 $receiver是个数组
        }

        $data['notification'] = array(
            // 统一的模式--标准模式
//            "alert"=>$push_data,
            //安卓自定义
            "android" => array(
                "alert" => $push_data['title'],
                "title" => $push_data['content'],
                "builder_id" => 1,
                "extras" => $extras
            ),
            //ios的自定义
            "ios" => array(
                "alert" => $push_data['title'],
                "sound" => "default",
                "badge" => "+1",
                "content-available" => true,
                "mutable-content" => true,
                "extras" => $extras
            )
        );

        // 苹果自定义---为了弹出值方便调测
        $data['message'] = array(
            "msg_content" => $push_data['content'],
            'title' => $push_data['title'],
            'content_type' => 'text',
            "extras" => $extras
        );

        //附加选项
        $data['options'] = array(
            "sendno" => time(),
            "time_to_live" => $m_time, // 保存离线时间的秒数默认为一天
            "apns_production" => false, // APNS 通知发送环境:0开发环境,1生产环境。或者传递false和true
        );
        $param = json_encode($data);
        $res = $this->push_curl($param, $header);

        if ($res) {
            return $res;
        } else {
            return false;
        }
    }

    // 推送的Curl方法
    public function push_curl($param = "", $header = "")
    {
        if (empty($param)) {
            return false;
        }
        $postUrl = $this->url;
        $curlPost = $param;
        $ch = curl_init();                                      //初始化curl
        curl_setopt($ch, CURLOPT_URL, $postUrl);                 //抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);                    //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);                      //post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);           // 增加 HTTP Header(头)里的字段
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        // 终止从服务端进行验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $data = curl_exec($ch);                                 //运行curl
        curl_close($ch);
        return $data;
    }
}
Last modification:June 26th, 2019 at 06:52 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment