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

最新文章
  • 胖大叔买电脑,球推贱 胖大叔买电脑,球推贱

    预算4K左右,没啥特别要求,丑点也可以,散热好就行. 高清大咪咪大图回报. --cut-- gracece在2013-11-08 23:46:3回答到: 挽尊. 在线商城筛选下就有了吧. momo5269在2013-11-08 23:47:5回答到: 用途,需求,是否带显示器,对于显卡的要求 liuhang0077在2013-11-08 23:48:3回答到: 没种子你说啥啊. 免谈 echoHUST在2013-11-08 23:49:5回答到: 哈哈,这个槽吐的好--- 10iii在2013-

  • root是什么意思 root权限获取 root是什么意思 root权限获取

    今天跟网友们分享一款安卓手机上非常实用的一键ROOT工具<z4root>,可能很多网友会问"z4root怎么用?",这个问题是完全不用担心的,z4root是一款傻瓜级的越狱软件,使用起来非常简单,安装完成后让你想装什么软件就装什么软件,想删除什么就删什么,即便你的手机被定制了许多商业程序,也都可以被一一删除. 现在先来讲解一些关于root权限的相关知识,让网友们可以更加了解自己的手机,同时也可以快速的使用root软件进行一键root. Root什么意思 在Unix系统(如A

  • 解除iOS 7日历时间限制 解除iOS 7日历时间限制

    iOS7更新以后,同时还升级了几个原生APP,其中原生的<日历>升级幅度很大,不但界面完全重新设计,而且可以直接邀请朋友来创建活动,非常方便.但是小编在使用时发现一个问题,<日历>的时间提醒功能最小的调整幅度是5分钟,不能再精确调整时间,不过经过仔细研究,小编终于发现了可以把幅度变为1分钟的方法,接下来就一起来看看吧. 打开<日历>APP后,新建一个时间,然后进入编辑界面调整时间,这时候还只能按5分钟来调整.但是只要用手指双击分钟栏的数字,大家就会看到调整的幅度变为1分

  • 世界末日倒计时30年 谁是人类的终结者 世界末日倒计时30年 谁是人类的终结者

    世界末日倒计时30年,谁是人类的终结者?科学家表示,人类距离世界末日其实已经十分逼近,最多还有30年时间,人类社会将土崩瓦解,而到底谁才是人类世界的终结者?这个问题似乎已经有了明确答案. 科学家表示,人类实际上是很脆弱的,任何一个全球性的灾难都将使人类面临灭顶之灾.近日,各地频发地震,海啸,等灾难,与地壳的活动有关,人类或许能够躲过地震,但躲不过火山喷发. 对人类而言,不管是地震还是火山喷发,总还有安全区的,不至于被灭绝.世界末日来临时,真正灭绝人类的将是大量有毒气体和太阳. 大量的火山同一时期

  • nginx自定义404错误页面设置方法

    今天突然发现一个问题,网站设置了自定义的 404 页面, 显示的是没有问题, 只是返回的状态码是 200, 而不是404!! 去看我的 nginx 配置: nginx.conf 代码如下 server { ... error_page 404 = /404.php; ... } 乍一看是没啥,网上搜了一下才知道多了个等号!!! 改为这样: nginx.conf 代码如下 server { ... error_page 404 /404.php; ... } 补充一下其它状态代码定义方法 更改ng

  • 手机QQ怎么写日志 手机QQ怎么写日志

    1.打开手机QQ,点击底栏的[动态] 2.选择[好友动态] 3.进入空间动态,点击右上角的[+] 4.找不到[写日志]选项 5.可见手机QQ是没有[写日志]功能的,不过你可以通过手机QQ空间完成 6.打开手机QQ空间,点击底栏[我的空间] 7.选择[日志] 8.点击右上角[写日志] 9.输入标题和内容 10.点击右上角[发表]即可

  • 流年,总有那么一个身影,让你甘愿为其低眉,做了那朵尘埃里的花 流年,总有那么一个身影,让你甘愿为其低眉,做了那朵尘埃里的花

    有些爱因无缘而唯美!若文字是心灵的解药,我愿把对你的执恋写进深深的文字里隐藏,不悲,不叹.从此,独枕清欢! --题记 沐浴如水的时光,一个人,走过璀璨年华,有多少寂寞,是在心底开成了花?独自明媚,又相遇倾城,再到刻骨绝恋,是暖意融融?是落落寡合? 都说年华似水,每一程画卷,真正入到心底的有几许?心若秋水无尘,却是眼含桃花,总在无意间牵扯到莫名的情愫.而心底,独倾心于灵犀一点,那种暖到骨子里的相知相惜,纵然萍水相逢瞬间,也胜过往后相守的荒芜. 一笛相思曲,频带梨花雨.总有一季徘徊的思念,似乎成了遥

  • 暗黑黎明不朽军团长BOSS打法详解 暗黑黎明不朽军团长BOSS打法详解

    在暗黑黎明这款游戏里面,不朽军团长是玩家们在游戏里面要攻略的第一个BOSS,今天小编就给各位玩家们分享一下这个BOSS的打法,下面就和小编一起来看一下吧. 给各位暗黑黎明的玩家们分享一下不朽军团长BOSS的打法. 不朽军团长,张像十分的恐怖,如同丧尸一般,尤其是他手中的那把散发出红光的到更是厉害无比,被砍一刀的话,能掉一般的血,所以玩家们一定要注意了. 背景: 他凶悍残暴,是无尽军团的大将军.曾经近卫团重兵把守的地道,是他带着不计其数的无尽军团侵入这里,占领了守备地道并残忍的杀掉. 技能: 骷髅

  • PowerPoint2003如何打包刻录PPT PowerPoint2003如何打包刻录PPT

    PowerPoint 2003 中的"打包成 CD"功能可将一个或多个演示文稿以及支持文件复制到 CD 中.在默认情况下, PowerPoint2003 把播放器 打包到 CD 上,即使在其他未安装 PowerPoint的计算机上也可以运行,符合脱离软件平台运行的要求,而不用担心到其它的计算机上不能播放或者播放效果不正常. 一.操作系统要求 直接打包演示文稿到 CD 需要 Windows XP 或更高版本.如果是其他版本的Windows,可以先使用"打包成 CD"功

  • 部落冲突皇室战争新手卡组搭配推荐 部落冲突皇室战争新手卡组搭配推荐

    部落冲突皇室战争的这一款游戏上线已经有一段时间了,大量的新玩家正在源源不断地加入CR的大家庭,那么今天小编在这里就来给各位新手玩家们分享一下卡组搭配的方法,想知道的玩家们,下面就快来跟着小编一起看看吧. 给各位部落冲突皇室战争的玩新手玩家们来详细的推荐分享一下卡组搭配. 推荐分享: 第一,确定这套牌的核心.如果想要赢就一定得拆掉对面的箭塔,那么进攻卡牌就是最重要的,只有先确定了一套牌的胜利点在哪里,才能围绕这张卡或者几张卡搭配出一套卡组.可以作为进攻性的卡牌有如下几张:王子,哥布林小屋加野蛮人小

热门推荐