位置:首页 » 技术2 » php APNS苹果推送通知服务的服务器端公共类

php APNS苹果推送通知服务的服务器端公共类

日期:2016-05-23 阅读:1num
Advertisement

APNS(英文全称:Apple Push Notification Service),中文翻译为:苹果推送通知服务。[1] 该技术由苹果公司提供的APNS服务,下面来看一个比较完善的苹果推送通知服务的php服务器端公共类

前段时间开发的一套APNS推送平台效率很差,通过再次深入研究苹果的消息推送服务,总结了不少经验。同时也参考了网上一些技术blog的博文,重新完善了此前写过的一个PHP类,代码如下:

代码如下 复制代码

<?php
/**
* ApplePush 苹果消息推送公共类
*/
class ApplePush
{

const STATUS_CODE_INTERNAL_ERROR = 999;
const ERROR_RESPONSE_SIZE = 6;
const ERROR_RESPONSE_COMMAND = 8;

protected $_errorResponseMessages = array(
0 => 'No errors encountered',
1 => 'Processing error',
2 => 'Missing device token',
3 => 'Missing topic',
4 => 'Missing payload',
5 => 'Invalid token size',
6 => 'Invalid topic size',
7 => 'Invalid payload size',
8 => 'Invalid token',
self::STATUS_CODE_INTERNAL_ERROR => 'Internal error'
);

/**
* APNS server url
*
* @var string
*/
protected $apns_url = 'ssl://gateway.push.apple.com:2195'; //沙盒地址:ssl://gateway.sandbox.push.apple.com:2195

/**
* 推送数据
*
* @var string
*/
private $payload_json;

/**
* 数据流对象
*
* @var mixed
*/
private $fp;

/**
* 设置APNS地址
*
* @param string $url
*/

public function setApnsUrl($url)
{
if (empty($url)) {
return false;
} else {
$this->apns_url = $url;
}
return true;
}

/**
* 设置推送的消息
*
* @param string $body
*/
public function setBody($body)
{
if (empty($body)) {
return false;
} else {
$this->payload_json = json_encode($body);
}
return true;
}

/**
* Open 打开APNS服务器连接
*
* @param string $pem 证书
* @param string $passphrase 证书密钥
*/
public function open($pem, $passphrase)
{
if (empty($pem)) {
return false;
}
if (empty($passphrase)) {
return false;
}
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $pem);
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client($this->apns_url, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp) {
return false;
}
$this->fp = $fp;
return true;
}

/**
* Send 推送
*
* @param string $token
*/
public function send($token, $id)
{
$msg = pack('CNNnH*', 1, $id, 864000, 32, $token) . pack('n', strlen($this->payload_json)) . $this->payload_json;
// Send it to the server
$result = fwrite($this->fp, $msg, strlen($msg));
return $result;
}

public function readErrMsg()
{
$errInfo = @fread($this->fp, self::ERROR_RESPONSE_SIZE);
if ($errInfo === false || strlen($errInfo) != self::ERROR_RESPONSE_SIZE) {
return true;
}
$errInfo = $this->parseErrMsg($errInfo);
if (!is_array($errInfo) || empty($errInfo)) {
return true;
}
if (!isset($errInfo['command'], $errInfo['statusCode'], $errInfo['identifier'])) {
return true;
}
if ($errInfo['command'] != self::ERROR_RESPONSE_COMMAND) {
return true;
}
$errInfo['timeline'] = time();
$errInfo['statusMessage'] = 'None (unknown)';
$errInfo['errorIdentifier'] = $errInfo['identifier'];
if (isset($this->_aErrorResponseMessages[$errInfo['statusCode']])) {
$errInfo['statusMessage'] = $this->_errorResponseMessages[$errInfo['statusCode']];
}
return $errInfo;
}

protected function parseErrMsg($errorMessage)
{
return unpack('Ccommand/CstatusCode/Nidentifier', $errorMessage);
}

/**
* Close APNS server 关闭APNS服务器连接
*
*/
public function close()
{
// Close the connection to the server
fclose($this->fp);
return true;
}
}
?>

相关文章
  • php APNS苹果推送通知服务的服务器端公共类

    APNS(英文全称:Apple Push Notification Service),中文翻译为:苹果推送通知服务.[1] 该技术由苹果公司提供的APNS服务,下面来看一个比较完善的苹果推送通知服务的php服务器端公共类 前段时间开发的一套APNS推送平台效率很差,通过再次深入研究苹果的消息推送服务,总结了不少经验.同时也参考了网上一些技术blog的博文,重新完善了此前写过的一个PHP类,代码如下: 代码如下 复制代码 <?php /** * ApplePush 苹果消息推送公共类 */ cla

  • JAVA APNS苹果推送

    最近在做苹果推送,找到了一个比较好的开源项目,国人写的 下载地址为:https://github.com/RamosLi/dbay-apns-for-java 调用代码如下: import java.io.InputStream; import java.util.List; import com.dbay.apns4j.IApnsService; import com.dbay.apns4j.impl.ApnsServiceImpl; import com.dbay.apns4j.model.

  • Windows Phone 7推送通知服务范例

    推送服务端代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; namespace PushNotifica

  • iPhone应用中APNS推送通知流程代码实现案例

    iPhone应用中APNS推送通知流程代码实现案例是本文要介绍的内容,主要是如何来实现APNS的推送通知,具体内容来看本文详细代码. 1. 将app注册notification里面, 并从APNS上获取测试机的deviceToken. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[UIApplication share

  • 移动设备和SharePoint2013-第3部分:推送通知 移动设备和SharePoint2013-第3部分:推送通知

    推送通知 可以在SharePoint站点启用推送通知服务来发送设备更新如瓷砖或吐司通知到Windows Phone设备. 通知包含发生在网站的事件,比如当用户将一个条目添加到一个列表中或更新一个条目. 它并没有取代报警Alert功能(电子邮件通知),是一个额外的功能. SharePoint Server 2013支持移动设备上的应用程序从一个SharePoint站点接收通知. 移动设备必须和一个SharePoint站点注册来接收这样的通知.一旦注册,你就可以编写事件处理代码来和微软推送服务(MP

  • 移动设备跟SharePoint 2013 - 第3部分:推送通知 移动设备跟SharePoint 2013 - 第3部分:推送通知

    移动设备和SharePoint 2013 - 第3部分:推送通知 博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和SharePoint 2013 - 第1部分:概述 移动设备和SharePoint 2013 - 第2部分:设备管道和SharePoint页面模型 移动设备和SharePoint 2013 - 第3部分:推送通知 移动设备和Share

  • Windows Phone 7编程实践—推送通知(剖析推送通知实现架构) Windows Phone 7编程实践—推送通知(剖析推送通知实现架构)

    xuesong 作品目标:Windows Phone 7 开发的实用手册 推送通知的工作流 Window Phone客户端应用程序请求与微软推送通知服务(Microsoft Push Notification Services)建立通道连接,微软推送通知服务(Microsoft Push Notification Services)使用通道URI响应. Window Phone客户端应用程序向监视服务(Web Service或者Cloud Application)发送包含推送通知服务通道URI以

  • Windows Phone 7 开发 31 日谈——第19日:推送通知 Windows Phone 7 开发 31 日谈——第19日:推送通知

    第19日. 昨天,我介绍了WebBrowser控件,以及如何在程序中使用它.今天,我们来谈谈可能是这个系列中最重要的话题:推送通知. 可能你对推送通知这个概念还不是很熟悉,其实很简单:不用强制你的应用程序每几分钟就去检查一下服务器,服务器在有新数据的时候可以通知你的手机. 为什么要使用推送通知? 第一个原因,节省用户的电池电量.检测服务器数据很耗电,而在手机中,电池绝对是稀缺资源.你永远不会有足够的电量,并且不论你的电池能撑多久,都要尽量避免会使电池续航时间变短的通知. 第二,你可以通过推送通知

  • 再次深入研究苹果消息推送服务(APNS) 完善PHP版服务器端公共类

    再次深入研究苹果消息推送服务(APNS) 完善PHP版服务器端公共类 十二月 18, 2014 前段时间开发的一套APNS推送平台效率很差,通过再次深入研究苹果的消息推送服务,总结了不少经验.同时也参考了网上一些技术blog的博文,重新完善了此前写过的一个PHP类,代码如下: PHP 'No errors encountered', 1 => 'Processing error', 2 => 'Missing device token', 3 => 'Missing topic', 4

  • 苹果推送机制APNs(1) 苹果推送机制APNs(1)

    苹果推送机制APNs(一) 推送是解决轮询所造成的流量消耗和电量消耗的一个比较好的解决方案,在Android上,虽然Google提供了GCM(之前为C2DM),但在国内基本等于没用,各大Android应用基本都自己架设推送Server或是使用第三方推送平台,例如新浪微博使用第三方推送平台"个推"(非广告).今天要学习的是苹果提供的推送服务APNs(Apple Push Notification services)基本原理和工作流程. 苹果的推送服务APNs基本原理简单来说就是苹果利用自

  • IOS学习笔记33—苹果推送机制APNs(一) IOS学习笔记33—苹果推送机制APNs(一)

    推送是解决轮询所造成的流量消耗和电量消耗的一个比较好的解决方案,在Android上,虽然Google提供了GCM(之前为C2DM),但在国内基本等于没用,各大Android应用基本都自己架设推送Server或是使用第三方推送平台,例如新浪微博使用第三方推送平台"个推"(非广告).今天要学习的是苹果提供的推送服务APNs(Apple Push Notification services)基本原理和工作流程. 苹果的推送服务APNs基本原理简单来说就是苹果利用自己专门的推送服务器(APNs

  • 苹果iPhoneSE锁屏不显示推送通知怎么设置 苹果iPhoneSE锁屏不显示推送通知怎么设置

    苹果iPhoneSE锁屏不显示推送通知怎么设置?相信很多小伙伴们都不想被人看到自己的应用消息给别人看到吧,这就需要我们关闭锁屏显示通知了,防止隐私泄露,下面小编将为你们讲下苹果iPhoneSE锁屏不显示推送通知教程! 1)首先我们先打开[设置],然后找到[通知],打开后我们再选择自己要进行设置的应用软件.(如下图) 2)最后将[在锁定屏幕上显示]那栏右边的椭圆 往左拉关闭即可.(如下图)

  • 苹果6sPlus怎么关闭应用推送通知 苹果6sPlus怎么关闭应用推送通知

    苹果6sPlus关闭应用推送通知教程.最近常常能听到网友抱怨,说自己下载的应用软件老是推送一些自己不敢兴趣的东西来,相当烦躁,到底怎样才能关闭这些应用软件的推送通知呢,下面就让小编来教你们苹果6sPlus如何关闭应用推送通知吧! 1)首先我们先打开[设置],然后找到[通知].(如下图) 2)然后挑选你需要关闭通知的应用软件并点击,打开后我们再把[允许通知]那栏右边的[椭圆]往左拉关闭即设置成功.(如下图)

  • 苹果iPhoneSE应用推送通知怎么关闭 苹果iPhoneSE应用推送通知怎么关闭

    苹果iPhoneSE应用推送通知怎么关闭?相信很多小伙伴们都有为一些不常用的应用软件所推送的消息通知搞得相当烦躁吧,那么我们应该如何关闭掉这些应用推送通知呢,下面就让小编来教你们苹果iPhoneSE应用推送通知关闭教程吧! 1)首先我们先打开[设置],然后打开[通知].(如下图) 2)打开后我们再点击自己需要设置的应用,最后再把[允许通知]那栏右边的椭圆往右拉打开即可.(如下图)

  • 苹果推送APNS有关问题总结

    苹果推送APNS问题总结 苹果推送APNS问题总结 iOS边城之推送APNS详解

  • 基于C++ 的苹果apns消息推送实现(二)

    基于C++ 的苹果apns消息推送实现(2) 1.本模块使用C++ 和 Openssl 代码 实现了一个简单的apns客户端 2.本文的姐妹篇:基于boost 的苹果apns消息推送实现(1) 3.最初使用的sslv23/sslv2/sslv3只能和apple 建立连接,但一直是handshake失败, 最后换tls连接,握手成功! original_ssl_client.h #ifndef original_ssl_client_h #define original_ssl_client_h

  • 苹果iPhone6S怎么关闭应用推送通知 苹果iPhone6S怎么关闭应用推送通知

    因为工作原因,大猫手机里装了很多软件,所以,每天有一半的电量会消耗在应用推送通知上,但是,大猫想到了一个办法可以关闭这些烦人的通知,想知道的话就随大猫来学习以下这篇教程吧! 1)点击[设置]进入,然后点击[通知]一栏.(如下图) 2)接着选择要关闭的[应用],最后关闭[允许通知]右边滑块即可.(如下图)

  • iOS网络推送通知

    推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端. 推送通知的过程可以分为以下几步: 应用服务提供商从服务器端把要发送的消息和设备令牌(device token)发送给苹果的消息推送服务器APNs. APNs根据设备令牌在已注册的设备(iPhone.iPad.iTouch.mac等)查找对应的设备,将消息发送给相应的设备. 客户端设备接将接收到的消息传递给相应的应用程序,应用程序根据用户设置弹出通知消息. 1.应

  • 浅谈iPhone 中Push 效能原理 推送通知(收藏) 浅谈iPhone 中Push 效能原理 推送通知(收藏)

    浅谈iPhone 中Push 功能原理 推送通知(收藏) iPhone 中Push 功能原理 推送通知是本文要介绍的内容,主要讲述了PUSH的一些功能,具体内容先来看本文讲述. Push原理 (以下绝大多数内容参考自.图片来自iPhone OS Reference Library) 机制简介 Push 的工作机制可以简单的概括为下图 图中, Provider是指某个iPhone软 件的Push服务器. APNS 是Apple Push Notification Service(Apple Pus

  • iphone推送通知java 实现

    前提准备, 在编写push notification之获取device token中拿到device token以后,需要把token字符串发送给应用的服务器端,即provider. 对于越狱手机获取不到device token的可以通过cydia安装pushdoctor,安装方法可以google一下在这就不多说了,我的越狱手机通过安装push补丁可以获取token了. provider将token号.通知内容.通知形式(比如是否弹出提示窗口.是否发声等)发送给苹果的服务器(apns). 最简单

最新文章
  • 出个 iPad 3

    iPad 3(WIFI) 16GB 白色 序列号:XXOO 设备名称:iPad (3rd gen) Wi-Fi 容 量:16GB 颜 色:白色 类 型:iPad3,1 代 号:j1ap 型 号:MD328 激活状态:已激活 电话支持:已过期 硬件保修:已过期 生产日期:2012年06月24日 - 2012年06月30日 生产工厂:中国(富士康-深圳) 外观完好,基本没有损伤,八九成新,没啥配件...光板一个,现在的行情是多少,有要的嘛... --cut-- lvyunyi在2014-05-05

  • 端午节源于古越民族图腾祭

    近代大量出土文物和考古研究证实:长江中下游广大地区,在新石器时代,有一种几何印纹陶为特征的文化遗存.该遗存的族属,据专家推断是一个崇拜龙的图腾的部族--史称百越族.出土陶器上的纹饰和历史传说示明,他们有断发纹身的习俗,生活于水乡,自比是龙的子孙.其生产工具,大量的还是石器,也有铲.凿等小件的青铜器.作为生活用品的坛坛罐罐中,烧煮食物的印纹陶鼎是他们所特有的,是他们族群的标志之一.直到秦汉时代尚有百越人,端午节就是他们创立用于祭祖的节日.在数千年的历史发展中,大部分百越人已经融合到汉族中去了,其余

  • 几个小方法帮你久坐不累 几个小方法帮你久坐不累

    本站生活常识配图 1.将椅子调高,使大腿与地面平行,可以降低对肌肉.肌腱和骨骼的压力,预防肌肉骨骼疾病; 2.选择靠背椅,在腰部放一个卷起的毛巾或靠枕;手.手腕和前臂在一条直线上,使小臂放在办公桌上时肘部成直角; 3.头部和身体保持直线,稍微前倾;肘部应靠近身体,弯曲90-120度为宜;双肩放松,上臂自然下垂;双脚平放在地板上;椅子最好加个垫子. 美国梅奥诊所研究发现,身体对同一坐姿的可承受时限为20分钟,之后就会产生不适感.建议每隔15分钟,站立.拉伸或走动一下,至少30秒应改变一次 坐姿.用

  • 军训心得体会1500字大全

    军训心得体会1500字 心得一:高中军训心得体会1500字 一遍又一遍枯燥乏味的动作,一句又一句不得违抗的命令,一套又一套令人生畏的纪律--一天的军训终于把同学们原本种种美好的设想一一击碎,取而代之的是眩目的阳光.咸咸的汗水.酸痛的四肢,这就是军训对我们身体素质.意志信念.组织纪律的考验."不经一番烈日烤,哪得钢铁意志成",想想正在戍边保卫的英勇战士,想想正在拼搏的奥运健儿,想想所有为我们今天幸福生活努力的各行各业的普通人民,我们的这点苦算得了什么?不过,毕竟是打娘胎里头一回,各种想法

  • 装的MYSQL不能自动启动?

    不知道你的mysql版本是多少,我安装的是5.x cp $path_of_mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld 修改一下 basedir,datadir,pid_file到你mysql的相关路径. chkconfig --level 2345 mysqld on 就可以了...

  • iPhone5有望跌破4k5 最新苹果机型水货行情 iPhone5有望跌破4k5 最新苹果机型水货行情

    在经过了元旦大促销之后,水货手机市场逐渐回归到正常状态.随着行货苹果iPhone 5的铺货和普及,近期水货iPhone 5的价格进一步下降,16GB版本价格更是迫近4500元大关. 此外,自iPhone 5行货上市以来,改版机市场上的iPhone 4S.iPhone 5就开始降价.到目前为止,仍没有任何跌停的迹象,例如16GB和32GB的苹果iPhone 4S分别降了50元和70元,16GB和32GB的苹果iPhone 5分别降了50元和80元,只有8GB苹果iPhone 4上涨了100元.下面

  • 苹果iPhone以旧换新计划将推至更多新兴市场 苹果iPhone以旧换新计划将推至更多新兴市场

    腾讯科技 林靖东 11月23日编译 网站上的一则招聘启事表明它打算将"重用及循环再造计划"(Reuse and Recycling Program)推广到亚太地区和拉美-加勒比海地区的更多新兴市场. 据那则招聘启事称,苹果的循环再造团队想招募一位"重用(回收)全球项目经理",专门负责苹果在线商店.教育.零售和转售商渠道的全球重用(回收)项目. 招聘启事还指出,该职位的职责还包括参照英美等国的项目实例开发和部署亚太地区和拉美-加勒比海地区的重用及循环再造项目,另外还将

  • 7000分的差距 魅蓝2 VS 红米2对比视频 7000分的差距 魅蓝2 VS 红米2对比视频

    五月的魅蓝note2,六月的MX5,再到本月29日即将发布的魅蓝2,这个夏天,魅族再次开启暴走模式.魅蓝note2和MX5凭借过硬的品质加上更加人性化的设计,早已是获得粉丝和用户阵阵喝彩,接下来魅蓝2的表现又将如何?网曝魅蓝2对阵红米2的视频或将给与我们答案,后者几乎全程被魅蓝2压着打. 图:百度手机吧截图 日前,在百度手机贴吧中有网友放出了魅蓝2与红米2的对比视频,从视频中可以看到,魅蓝2在程序开启,滑动等方面都非常流畅,基本操作上两者差别不大.但是到游戏加载以及一些大型程序的加载对比上,魅蓝

  • 澳大利亚的旅游景点有哪些 澳大利亚的旅游景点有哪些

    澳洲是澳大利亚联邦的简称,更是国际著名的旅游国度,悉尼歌剧院.珀斯企鹅岛.黄金海岸冲浪者天堂等景点更是家喻户晓.下面的澳洲旅游攻略,为大家介绍澳洲的十大景点,让我们来认识下这个充满色彩的澳洲吧. 1.悉尼歌剧院 悉尼歌剧院位于澳洲悉尼,是20世纪最具特色的建筑之一,也是世界著名的表演艺术中心,已成为悉尼市的标志性建筑.该歌剧院1973年正式落成,2007年6月28日被联合国教科文组织评为世界文化遗产,该剧院设计者为丹麦设计师约恩·乌松.悉尼歌剧院坐落在悉尼港的便利朗角(Bennelong Poi

  • 中秋节贺卡-我要你快乐

    一轮明月照亮事业,一盒月饼甜蜜生活,一杯美酒健康长久,一串葡萄欢乐逍遥,一个西瓜合家团圆,一份祝福送给大家.祝你中秋快乐哦! 不求最深,只求最浓:不求最好,只求最真:不求最早,只求最实.中秋节到,送你最真.最实.最浓的祝福,愿你有钱花有房住,四面八方皆真情,十心十意爱心抱,五湖四海财气到,祝你中秋有好事.撞大运!

热门推荐
  • 美人鱼可能真实存在 美人鱼可能真实存在 美人鱼一直以来都被看做是个美丽的传说,电影中它们经常可以成就经典的画面.现实中也常有遇到美人鱼的传言,但它们大多被认定为海牛等海洋生物. 不过近日有科学家研究表示,一些目击者见到的可能是真正的"美人鱼",并不是此前认为的海牛等动物,而是海猿. 根据每日电讯报道,科学家最近研究表示,灵长类动物在进化时出现了分支,出了向人类方向进化以外,还有一些为了适应海洋生活,逐渐成海猿,而由于与类人相似,所以人们常误认它们是"美人鱼". 动物星球的工作人员查理-福利(Charlie
  • wps文字标尺怎么显示 wps文字标尺怎么显示 1.其实方法很简单,首先我们打开WPS,默认我们是不显示标尺的 2.点击"视图"菜单===标尺 这样我们标尺就出来啦
  • 陈道明,成熟男人的生活哲学 陈道明,成熟男人的生活哲学 1.君子必须有"伪",否则他就不是君子,君子全是后天臆造的,每个君子都有一个讽刺性,只不过讽刺的高低不一样. 2.人与人之间总是一种疏远,你变了他,他变了你,彼此走得越近,你自己就越扭曲. 3.其实我真正享受爱情时,是在痛苦了之后,苦涩了之后.甜蜜的爱情是不真实的,不长久的,对爱情的享受,实际上就是在感情被蹂躏了之后的享受. 4.人在对事物.对于自己没有把握的时候就会烦躁.这是很痛苦的,但这只是现象.很多人生活缺少目的性,不知道做什么,所以就会烦躁. 5.朋友,我就有骂他的责任,他也有
  • win7临时文件夹路径修改方法 win7临时文件夹路径修改方法 大家都知道,我们在使用电脑时,一些缓存的垃圾文件一般都保存在临时文件夹中,而临时文件夹都是保存在系统盘中的,如果我们不及时清理垃圾文件,系统盘中的东西太多,就会造成网速运行速度慢的问题,所以临时文件夹必须及时的进行清理.其实除了清理临时文件夹之外,还有一种办法就是改变临时文件夹路径,这样就可以避免保存在系统盘之中,就不会造成网速慢的问题了.那么如何修改win7系统的临时文件夹路径呢?下面来看看. 具体的操作方法如下: 1.我们用自己的鼠标点击电脑桌面的计算机图标,右键选择看到属性选项然后点击打开
  • 如何浏览我喜欢的腾讯播客的更多视频 如何浏览我喜欢的腾讯播客的更多视频 您可以去看这个播客的个人主页,上面有他(她)所发布的全部视频.当您关注这个播客后,就不会错过他(她)所发布的每一个新作品啦.