PHP 友盟消息推送类

原创 2018年04月17日 17:09:44
<?php
/**
 * 友盟消息 安卓 IOS 推送类
 * 
 */

class AlliesClass
{
    protected $host; //发送地址
    protected $app_key; //appkey
    protected $appMasterSecret; //app secret
    protected $description; //app secret

    //
    public function __construct($options = null)
    {
        if (is_array($options)){

            $this->host = 'https://msgapi.umeng.com/api/send';
            $this->app_key = $options['app_key'];
            $this->appMasterSecret = $options['appMasterSecret'];

            $this->description = "友盟接口推送";

        }else{
            return false;
        }

    }


    /**
     * @param $info
     * @param $device_token
     * @return mixed|string
     * 用户单播 和 列播
     */
    public function Android_Device_Push($info, $device_token)
    {
        $data['appkey'] = $this->app_key;
        $data['timestamp'] = time(); //时间戳

        if(is_array($device_token)){

            //批量用户列播
            $data['type'] = 'listcast';
            $data['device_tokens'] =  implode(',',$device_token); //数组转字符串

        }else{

            //一个用户单播
            $data['type'] = 'unicast';
            $data['device_tokens'] =  $device_token;
        }

        //payload内容
        $data['payload']['display_type'] = 'notification'; //通知消息

        //payload body内容
        $data['payload']['body']['after_open'] = "go_custom"; //后续操作打开app

        $data['payload']['body']['ticker'] = $info['ticker'];
        $data['payload']['body']['title'] = $info['title'];
        $data['payload']['body']['text'] = $info['title']; //广播通知不能为空补填

        //这里可以写附加字段
        $data['payload']['extra']['type'] = $info['type'];  //附加字段类型


        $data['production_mode'] = $info['production_mode'];

        $data['description'] = $this->description;

        return $this->send($data, $this->host, $this->appMasterSecret);
    }

    /**
     * @param $info
     * @return mixed|string
     * 广播
     */
    public function Android_Broadcast($info)
    {
        $data['appkey'] = $this->app_key;
        $data['timestamp'] = time(); //时间戳

        //广播消息
        $data['type'] = 'broadcast';

        //payload内容
        $data['payload']['display_type'] = 'notification'; //通知消息

        //payload body内容
        $data['payload']['body']['after_open'] = "go_custom"; //后续操作打开app

        $data['payload']['body']['ticker'] = $info['ticker'];
        $data['payload']['body']['title'] = $info['title'];
        $data['payload']['body']['text'] = $info['title']; //广播通知不能为空补填

        $data['payload']['extra']['type'] = $info['type'];  //附加字段类型1 跳转消息详情
        $data['payload']['extra']['prod_id'] = $info['prod_id'];  //附加字段消息详情id
        $data['payload']['extra']['text'] = $info['text']; //

        $data['production_mode'] = $info['production_mode'];

        $data['description'] = $this->description;

        return $this->send($data, $this->host, $this->appMasterSecret);
    }

    /**
     * @param $info
     * @param $device_token
     * @return mixed|string
     * 单播 和 列播
     */
    public function Ios_Device_Push($info, $device_token)
    {
        $data = array();

        $data['appkey'] = $this->app_key;
        $data['timestamp'] = time(); //时间戳

        if(is_array($device_token)){

            //批量用户列播
            $data['type'] = 'listcast';
            $data['device_tokens'] =  implode(',',$device_token); //数组转字符串

        }else{

            //一个用户单播
            $data['type'] = 'unicast';
            $data['device_tokens'] =  $device_token;
        }

        //payload内容
        $data['payload']['aps']['alert'] = $info['text']; //消息主体
        $data['payload']['aps']['sound'] = 'default'; //声音

        $data['payload']['type'] = $info['type']; //消息类型 0打开消息详情

        $data['payload']['prod_id'] = $info['prod_id']; //消息id
        $data['payload']['title'] = $info['title'];
        $data['payload']['text'] = $info['text']; //

        $data['production_mode'] = $info['production_mode'];

        $data['description'] = $this->description;

        return $this->send($data, $this->host, $this->appMasterSecret);
    }


    public function Ios_Broadcast($info)
    {
        $data = array();

        $data['appkey'] = $this->app_key;
        $data['timestamp'] = time(); //时间戳

        //广播消息
        $data['type'] = 'broadcast';

        //payload内容
        $data['payload']['aps']['alert'] = $info['title']; //消息主体
        $data['payload']['aps']['sound'] = 'chime'; //声音
        $data['payload']['aps']['badge'] = 1; //显示角标

        $data['payload']['type'] = $info['type']; //消息类型 0打开消息详情

        $data['payload']['prod_id'] = $info['prod_id']; //消息id
        $data['payload']['title'] = $info['title'];
        $data['payload']['text'] = $info['ticker']; //

        $data['production_mode'] = $info['production_mode'];

        $data['description'] = $this->description;

        return $this->send($data, $this->host, $this->appMasterSecret);
    }

    /**
     * @param $data
     * @param $url_s
     * @param $appMasterSecret
     * @return mixed|string
     * curl 请求
     */
    private function send($data, $url_s, $appMasterSecret)
    {
        $postBody = json_encode($data);

        //加密
        $sign = md5("POST" . $url_s . $postBody . $appMasterSecret);
        $url = $url_s . "?sign=" . $sign;

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postBody );
        $result = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $curlErrNo = curl_errno($ch);
        $curlErr = curl_error($ch);
        curl_close($ch);

        // print_r($result);
        // exit;

        if ($httpCode == "0") {
            // Time out
            return ("Curl error number:" . $curlErrNo . " , Curl error details:" . $curlErr . "\r\n");
        } else if ($httpCode != "200") {
            return ("Http code:" . $httpCode .  " details:" . $result . "\r\n");
        } else {
            return $result;
        }
    }
}

?>

 <?php
    //使用类
    $options['app_key'] = ''; //友盟key;
    $options['appMasterSecret'] = ''; //友盟MasterSecret

    $this->umeng = new AlliesClass($options);

    $info['ticker'] = '';
    $info['title'] ='';
    $info['title'] =''; //广播通知不能为空补填
    $info['type'] = 4;  //附加字段类型1 跳转消息详情
    $info['text'] = '提醒'; //
    $info['production_mode'] = 'false';

    $value=$this->umeng->Android_Device_Push($info, $token);  //单播传入数据和用户token

    $value=$this->umeng->Android_Broadcast($info);  //广播直接传入数据
?>

thinkphp整合系列之友盟消息推送

上篇文章 thinkphp集成系列之phpmailer批量发送邮件讲过的; 邮件有着零成本、内容丰富的优点; 但是一个非常硬的硬伤;这家伙的及时性太差了; 尤其是随着90、00后的崛起;从上...
  • bai9474500755
  • bai9474500755
  • 2016-06-11 23:28:49
  • 804

友盟+消息推送Demo

  • 2017年09月28日 10:17
  • 4.42MB
  • 下载

友盟消息推送SDK集成

1.创建应用 在友盟有账号的情况下(没有的请自行创建),创建应用之前需要去苹果开发者网站申请一个App ID和配置一个用于推送的APNs证书,下载并安装APNs推送证书后,打开钥匙串从这个证书导...
  • magical_code
  • magical_code
  • 2016-04-09 09:52:55
  • 437

使用laravel-umeng完成移动端推送

使用laravel-umeng完成移动端推送
  • zzl0206
  • zzl0206
  • 2016-12-07 19:59:40
  • 621

友盟三方登录,分享,推送demo

前一段时间项目中使用到了友盟的一些功能,自己做了一个小demo,已经上传,今天有空,给大家讲解一下吧。 首先下载最新的友盟sdkhttp://dev.umeng.com/social/android...
  • looookery
  • looookery
  • 2015-04-28 11:40:16
  • 4744

友盟消息推送

  • 2015年01月16日 11:51
  • 1.71MB
  • 下载

php 友盟 推送 android代码

部分文档参阅友盟   记得在友盟后台添加你的 ip ,否则无法推送成功 public function index() { $body = array( ...
  • eric19920720
  • eric19920720
  • 2016-05-20 15:52:26
  • 1090

友盟推动服务端代码DEMO

  • 2016年09月08日 16:29
  • 12KB
  • 下载

umeng友盟消息推送sdk集成

  • 2016年09月20日 13:46
  • 4.95MB
  • 下载

iOS-友盟消息推送的快速实现

在需求的要求下,今天学习了友盟、极光、个推以及百度推送。这些推送都是恨简单的,在各个api的帮助下顺利实现了推送功能。 首先,友盟这个的sdk用的挺多了,也方便,api文档也简单、易懂,因此以它为首个...
  • lct710992308
  • lct710992308
  • 2016-03-22 16:32:47
  • 660
收藏助手
不良信息举报
您举报文章:PHP 友盟消息推送类
举报原因:
原因补充:

(最多只允许输入30个字)