位置:首页 » 技术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). 最简单

最新文章
  • 大家来围观下看看是不是个钓鱼站?

    网址: http://www.bogaki.com/ --cut-- leavic在2016-05-09 07:38:04回答到: 4.7 亿广告费做这样一个垃圾网站,我说不是骗子网站你能信吗? xfspace在2016-05-09 07:38:04回答到: <title>PHP 在线订单系统 2014WAP 版官方正式版 - 样式 01</title> aalska在2016-05-09 07:38:04回答到: 垃圾营销 出去快递费的 10 块左右. 你唯一感受到的就是一只 1

  • php 接收客户端传来的值,如何防止被转化为科学计数法

    使用函数$nnn=number_format($clientID,'','',''); 将科学计数法转化回来,但是转化的结果却和发送的数据不相同了,请问下当数字非常大时,如何才能防止转换为科学计数法. --cut-- somnus在2016-05-09 02:35:15回答到: 用字符串 lyp111332在2016-05-09 02:35:15回答到: @somnus 如何使用呢, 请指教 我是这样 $c = file_get_contents("php://input"); $de

  • Google Instant Pages 不错

    预加载第一个搜索结果页面 在地址栏输入字符时,预加载页面或者搜索结果 感觉速度快了一些 升级到 Chrome 13 后在 Options 里勾上「Enable Instant for faster searching and browsing」即可启用 --cut-- subpo在2011-08-03 16:24:1回答到: 很早就有了吧?很好用

  • GAE上的博客系统

    GAE上除了Micolog之外,还有其他比较好用的博客系统么?感觉Micolog功能简单了些. --cut-- chone在2010-10-14 15:10:5回答到: 都来到v2ex了自然还有 project picky http://v2ex.appspot.com/go/picky darktiny在2010-10-14 15:19:4回答到: @chone 3Q lihui在2010-11-13 11:52:2回答到: iHere: http://code.google.com/p/ih

  • 华为荣耀畅玩5X联系人头像怎么设置 华为荣耀畅玩5X联系人头像怎么设置

    华为荣耀畅玩5X联系人头像设置方法.每当朋友打电话来时,我们总是看到一个灰色的头像显示出来,这多不好看呀,那么我们应该怎样设置联系人头像呢,下面就让小编来教你们华为荣耀畅玩5X联系人头像怎么设吧! 1)首先我们先打开[联系人],然后找到你要设置的联系人,打开后点击[头像].(如下图) 2)接着我们再选择一种添加照片的方式(小编在这里以图库中选取照片为例),然后挑选对方的照片.(如下图) 3)最后我们在点击[修剪照片],修剪完后最后点击[√]就可以了.(如下图)

  • 如何恢复qq聊天记录

    一.直接保存文件夹 找到你的QQ安装目录,然后可以看到在目录里有一个以你的QQ号命名的文件夹.在你想重装系统或重安装别的版本QQ前,把这个文件夹复制到一个安全的地方.然后在你弄好系统装好QQ后,把这个文件夹放到新装的QQ目录里. 二.只保存聊天记录 进入QQ文件夹 → 进入以你的QQ号为名称的文件夹 → 复制一个名为"MsgEx.db",然后将这个文件保存在安全的地方,当你准备把聊天记录放回去的时候,只需要登陆一下QQ,然后关掉.将 "MsgEx.db"放在QQ目录

  • 古代男人眼中的美女三围标准 古代男人眼中的美女三围标准

    胸围:古代中国人对女性的胸围要求不高,对拥有一双丰满隆起的乳房的女性也颇不以为然.其实,古代男子欣赏的女性乳房是恰堪一握的丁香乳. 腰围:公元前6世纪的楚灵王偏爱细腰女子;与楚襄王同时的楚人宋玉,在其<登徒子好色赋>中,对那位漂亮的"东家之子"也有"腰如束素"的描写有所偏爱.不过,纤细腰身,似乎只是荆楚一带的风尚.而对大多数中国人来说,只要腰身和整个身材配合得宜,宽与窄都无所谓,粗腰美其名曰"小蛮腰";细腰美其曰"杨柳腰&q

  • 一次谷歌搜索的能耗:100瓦灯泡工作1小时

    进行一次网络搜索需要付出怎样的代价?这个问题很多人大概从未思考过.据英国<新科学家>杂志报道,网络搜索其实需要付出代价,而且这个代价不能只用金钱去衡量. "搜索引擎"这个词太妙了.引擎就是发动机,你要将它发动起来,显然离不开能源或电力,事实也正是如此,网络搜索需要数百万台计算机协同 作战才能完成.通过联网,这些被放置在仓库内的计算机形成一个单独的系统.与任何系统一样,这个系统也无法违背热力学定律,因此也会消耗能源. 热力学第一定律指出,工作需要消耗能量,像推动硅片上的电子这

  • ROS和海蜘蛛软路由恢复密码的方法

    不论是什么用户 删除后都是admin 密码清除为空 教你如何破解ROS密码 弄个光盘的PE或者U盘的PE.然后进入PE后.用工具 将装Routeros的那个硬盘的 /nova/store/user.dat文件删除 即可以默认admin无密码进入 没有密码也要找回海蜘蛛密码! 刚接手一个网吧.以前的主管把密码全带走了.路由的密码也带走了.我看一下.乐坏了.居然是海蜘蛛.不需要给我密码都成啊.看我无敌恢复密码大法!哈哈... 恢复如下: 重新启动路由,启动时按上下方向键选择第二项菜单,进入"救援模式

  • 人工智能的免费时代或已到来 人工智能的免费时代或已到来

    2015年10月 Gartner主办的全球最大的IT业界会议中,以"智能机器大爆炸时代"为主题的论坛上,来自中国的小i机器人与Next IT.IBM Watson等放在同一位置,是"全球少有的通用智能机器人平台和架构提供者". 智能机器人是未来大方向,应用场景非常广泛,而随着小i机器人云平台为代表的免费开放使用,人工智能的免费时代或已到来. 个人与企业将如何使用智能机器人平台呢?这就要从小i机器人"从产品到核心技术平台转移"说起. 小i机器人云平

热门推荐
  • 三星未在网络上注册是什么意思? 三星未在网络上注册是什么意思? 在呼叫通话时,有些小伙伴可能会遇到这样的情况:网络信号很好,但就是不能进行呼叫通话,并且会显示"移动网络不可用"(如图1所示),有时也会在左上角出"三角形感叹号"图标.下面就和小编一起来看看移动网络不可用的解决办法吧. 此情况建议检查网络设置,如果手动设置手机网络连接错误,手机将不能注册到正常的网络服务.为了更正这一点,请在"可用的网络"设置区域内选择[请自动选择]选项,具体操作请按照以下步骤进行: (图1) 第一步 在待机页面下,点击[应用程序
  • PhotoShop制作红白蓝信封邮件描边样式实用教程 PhotoShop制作红白蓝信封邮件描边样式实用教程 这几天一直在为公司展会做几个专题页面,有一个抽奖的系统,我有一个想法与信件有关,这样就有了邮件元素,如何表现,它最大的特色就在于它 有边线有一条白一条蓝一条白一条红色斜向上的矩形条. 先看效果: 以下是我做的一个简单的信封,我们来分解一下它.
  • 欧盟惊现蜜蜂大量死亡 或可预示地球生态失衡 欧盟惊现蜜蜂大量死亡 或可预示地球生态失衡 据媒体报道,近年来,欧盟国家不断出现蜜蜂大量死亡的现象,蜜蜂数量急剧减少.随之能传授花粉的其它昆虫,如蝴蝶和大黄峰的数量也在减少,科学家一直在探索出现这种情况的原因.这种现象引起了欧盟国家的高度关注,为此欧盟专门出台了一个拯救蜜蜂的行动计划. 研究人员称,蜜蜂在传授花粉中扮演着至关重要的角色,世界上76%的粮食作物和84%的植物依靠蜜蜂传授花粉.蜜蜂数量减少,意味着粮食作物.水果.鲜花产量将因此而减产.爱因斯坦也曾预言:"如果蜜蜂从地球上消失,人类最多能活4年.",因为在人类所利用的1
  • 走得最急的都是最美的时光 走得最急的都是最美的时光 走得最急的都是最美的时光 拉开窗帘,迎接新的一天.苦和甜来自外界,体味幸福则来自内心. 其实,没有想象的坚强,只是找不到让懦弱休息的地方. 说出口的伤痛都已平复,绝口不提的才触及心底. 本站阅读配图 任时光流转,岁月变迁,不抱怨,不言苦,不忧伤,不认输,安静生活. 很多事,唯有当距离渐远的时候,才能回首看清它.花香浮华,只在记忆里最美,人莫如是. 时间,不一定能证明许多东西,但一定会看透许多东西. 做一个最单纯的人,走一段最幸福的路.其他的,交给命运. 有时候我可以看得很淡然,可是有时候又执着得