<?php
/**
* 安卓和苹果消息主推
*/
class JPush extends CComponent
{ private $_push_body = array();
private $_android_body = array();
private $_ios_body = array();
const PUSH_URL = 'https://api.jpush.cn/v3/push';
const REPORT_URL = 'https://report.jpush.cn/v2/received';
const VALIDATE_URL = 'https://api.jpush.cn/v3/push/validate';
const CONNECT_TIMEOUT = 5;
const READ_TIMEOUT = 30;
const DEFAULT_MAX_RETRY_TIMES = 3;
private $_header = '';
private $_auth_basic = '';
private $_app_key = 'a7d627a70f752f32de5a0939';
private $_master_secret = 'f02725c2a9802badb60ab312';
public $retryTimes; public function __construct($retryTimes = self::DEFAULT_MAX_RETRY_TIMES, $appKey = '', $masterSecret = '')
{
$this->retryTimes = $retryTimes; if(!empty($appKey))
$this->_app_key = $appKey;
if(!empty($masterSecret))
$this->_master_secret = $masterSecret; //base64(appKey:masterSecret)
$this->_auth_basic = base64_encode($this->_app_key . ':' . $this->_master_secret);
//$this->_auth_basic = $this->_app_key . ':' . $this->_master_secret;
$this->_push_body = array(
'platform' => 'ios',// 推送平台设置 必填
'audience' => 'all', //推送设备指定 必填
//'notification' => array(), // 通知内容体。是被推送到客户端的内容。与 message 一起二者必须有其一,可以二者并存 可选
//'message' => array(), //推送参数 可选
'options' => array('time_to_live' => 30, 'apns_production' => false), //推送参数 可选
);
$this->_ios_body = array(
'alert' => '',
'sound' => 'ding.caf',
'badge' => '+1',
);
$this->_android_body = array(
'alert' => '',
'title' => 'send to android',
'builder_id' => 1,
);
$this->_header = array(
'Connection: Keep-Alive',
'Charset: UTF-8',
'Content-Type: application/json',
'Authorization: Basic ' . $this->_auth_basic,
); } /**
* notification android
*/
public function setAndroid($alert, $title = '', $builder_id = '')
{
$this->_android_body['alert'] = $alert;
if(!empty($title))
$this->_android_body['title'] = $title;
if(!empty($builder_id))
$this->_android_body['builder_id'] = $builder_id; $this->_push_body['notification']['android'] = $this->_android_body; }
/**
* notification ios
*/
public function setIos($alert, $sound = '', $badge = '')
{
$this->_ios_body['alert'] = $alert;
if(!empty($sound))
$this->_ios_body['sound'] = $sound;
if(!empty($badge))
$this->_ios_body['badge'] = $badge;
$this->_push_body['notification']['ios'] = $this->_ios_body;
}
/**
* set extras
*/
public function setExtras($extras)
{
if(!empty($extras) && is_array($extras)) {
if(!empty($this->_push_body['notification']['ios']))
$this->_push_body['notification']['ios']['extras'] = $extras;
if(!empty($this->_push_body['notification']['android']))
$this->_push_body['notification']['android']['extras'] = $extras;
}
} /**
* set options
*/
public function setOptions($options)
{
$this->_push_body['options'] = $options;
} /**
* 设置 推送
*/
public function push($platform = '', $audience = '')
{
if(!empty($platform)) {
$this->_push_body['platform'] = $platform;
}
if(!empty($audience)) {
$this->_push_body['audience'] = $audience;
} $data = json_encode($this->_push_body);
$res = $this->curlPost(self::PUSH_URL, $data, $this->_header); return $res;
} /**
* curl post
*/
public function curlPost($url, $data, $header = array())
{
$ch = curl_init();
if(!empty($header))
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
return $result;
}
/**
* curl get
*/
public function curlGet($url, $data, $header = array())
{
$ch = curl_init();
if(!empty($header))
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, $url.'?'.http_build_query($data));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
ob_start();
curl_exec($ch);
$result = ob_get_contents() ;
ob_end_clean(); return $result;
} }

  

php 使用 极光推送 类的更多相关文章

  1. 总结:极光推送java服务端(1)

    遇到的问题: 1.怎么用极光推送 2.极光推送发送失败报错 返回{ } 3.透传和推送区别以及怎么设置 我的解决方案: 问题1.极光推送类里面有不同的方法,需要发给那些人就调用相应的方法.有安卓.io ...

  2. 极光推送Jpush(v3)服务端PHP版本的api脚本类

    原文地址:http://www.dodobook.net/php/780 关于极光推送的上一篇文章已经说明了,此处就不多说了.使用v3版本的原因是v2使用到2014年年底就停止了.点击查看上一篇的地址 ...

  3. 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言

    在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...

  4. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

  5. iOS推送(利用极光推送)

    本文主要是基于极光推送的SDK封装的一个快速集成极光推送的类的封装(不喜勿喷) (1)首先说一下推送的一些原理: Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指 ...

  6. 极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)

    因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush ...

  7. JPush API client library for C Sharp(极光推送API)

    概述 这是 JPush REST API 的 C# 版本封装开发包,是由极光推送官方提供的,一般支持最新的 API 功能. 对应的 REST API 文档:http://docs.jpush.io/s ...

  8. (转载)iOS 极光推送SDK 集成指南

    iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能 ...

  9. java 极光推送

    Web.xml配置文件 <context-param> <param-name>contextConfigLocation</param-name> <par ...

随机推荐

  1. ---bind 配置

    http://blog.csdn.net/zjunjun/article/details/7419125

  2. STP的作用和操作

    STP的作用 STP通过阻塞端口来消除环路,并能够实现链路备份的目的 STP的操作 选举一个根桥 比较交换机的桥ID,越小越优先 桥ID  是8个字节,2个字节的优先级+6个字节的MAC地址 2.每个 ...

  3. 大毕设-MATLAB-滤波器的实现

    在工程实际中遇到的信号经常伴有噪声,为了消除或减弱噪声,提取有用信号,必须进行滤波,能实现滤波功能的系统称为滤波器.严格地讲,滤波器可以定义为对已知的激励提供规定响应的系统,响应的要求可以在时域或频域 ...

  4. JDBC步骤

    总结JDBC五步骤: 1.Class.forName 加载驱动 2.conn = (Connection) DriverManager.getConnection(url, user, passwor ...

  5. 将sqlserve数据绑定到dataGridView中及一些操作

    一:将数据绑定到dataGridView控件上. string sqlconn = "server=.;database=student;integrated security=true&q ...

  6. 错误的CPU时间片大小概念

    1.错误的CPU时间片大小概念:http://blog.csdn.net/blue_morning/article/details/7843581 2.时间片:http://baike.baidu.c ...

  7. Finder Item脚本如何包装成 Mac App

    第一步,包装 记得之前把一个 java 程序的 jar 包 用 automator包装成了 app, 但自己找不到做法了.回头我想了想 这么实验可行. 这样做成 app 后保存在 /Applicati ...

  8. 测试webAPP时图标背景一片黑色

    写了个web小程序,打包成APP后安装到手机里,在魅族手机里显示是正常的,但是在EMUI和MIUI中却显示一片黑色,搞了半天才发现原来是因为EMUI会自动给应用的图标裁剪圆角并加上背景色,背景色是系统 ...

  9. DataRead 和DataSet区别

    dataset表示一个数据集,是数据在内存中的缓存. 可以包括多个表DatSet 连接数据库时是非面向连接的.把表全部读到Sql中的缓冲池,并断开于数据库的连接 datareader 连接数据库时是面 ...

  10. WebConfig 自定义节点configSections配置信息

    WebConfig 自定义节点configSections配置信息 示例: <configuration>   <configSections>     <!-- For ...