iOS Push服务端PHP代码

博主原来是一名PHPer,当转向iOS后看到PHP感到格外的兴奋。

目前有一个项目需要自己构建iOS推送的服务端代码。于是搜索了一下网上的代码,带式在执行的时候总是会报错,错误为:

Warning: stream_socket_client(): SSL operation failed with code 1.

本以为是openssl没有开启或者生成的秘钥ck.pem有问题。后来发现不是这些个问题。现在贴出正确的代码,以备不时之需:

<?php
set_time_limit(0);
sleep(5);
// 这里是我们上面得到的deviceToken,直接复制过来(记得去掉空格)
$deviceToken = ‘f2f66dbc7e3477df31cb32e1d56903efeec73d904b603bab9ba5a72948e1023b‘;

// Put your private key‘s passphrase here:
$passphrase = ‘123456‘;

// Put your alert message here:
$message = ‘My first push test!‘;

////////////////////////////////////////////////////////////////////////////////

$ctx = stream_context_create();
stream_context_set_option($ctx, ‘ssl‘, ‘allow_self_signed‘, true);
stream_context_set_option($ctx, ‘ssl‘, ‘verify_peer‘, false);
stream_context_set_option($ctx, ‘ssl‘, ‘local_cert‘, ‘ck.pem‘);
stream_context_set_option($ctx, ‘ssl‘, ‘passphrase‘, $passphrase);

// Open a connection to the APNS server
//这个为正是的发布地址
 //$fp = stream_socket_client(“ssl://gateway.push.apple.com:2195“, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);
//这个是沙盒测试地址,发布到appstore后记得修改哦
 $fp = stream_socket_client(‘ssl://gateway.sandbox.push.apple.com:2195‘, $err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
//$fp=stream_socket_client("udp://127.0.0.1:1113", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);

echo ‘Connected to APNS‘ . PHP_EOL;

// Create the payload body
$body[‘aps‘] = array(
‘alert‘ => $message,
‘sound‘ => ‘default‘
);

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack(‘n‘, 32) . pack(‘H*‘, $deviceToken) . pack(‘n‘, strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
echo ‘Message not delivered‘ . PHP_EOL;
else
echo ‘Message successfully delivered‘ . PHP_EOL;

// Close the connection to the server
fclose($fp);
?>
时间: 2024-10-13 01:15:22

iOS Push服务端PHP代码的相关文章

python的select服务端的代码和客户端的代码

服务端的代码 import socket import queue import select ip_bind = ("127.0.0.1",9000) message_queue = {} #保存客户端发送过来的信息,将消息放入到队列中 input_list = [] output_list = [] if __name__ == '__main__': server = socket.socket() server.bind(ip_bind) server.listen(10) s

C# WebSocket 服务端示例代码 + HTML5客户端示例代码

WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; using System.Threading; using System.Text.RegularExpressions; using System.Security.Cryptography; na

c++ 网络编程(二)TCP/IP linux 下多进程socket通信 多个客户端与单个服务端交互代码实现回声服务器

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9612820.html LINUX下: 一.服务端代码 下面用了多个close来关闭文件描述符,可能有的小伙伴会有疑惑....我就说一句,创建进程的时候会把父进程的资源都复制 一份,而你这个子进程只需要保留自己需要处理的资源,其他的自然要关闭掉, 不然父亲一个儿子一个 待会打起来怎么办  嘿嘿 注意了:就像进程间的通信需要属于操作系统的资源管道来进行,套接字也属于操作系统,所以创建新进程也还是

TCP客户端 服务端详细代码

本文章转自http://www.myexception.cn/program/1912019.html TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数 对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux 内核,让 Li

ABB Server(服务端)代码解析

PROC Server() !声明变量 VAR socketdev temp_socket; VAR socketdev client_socket; VAR string received_string; !清屏 TPErase; !关闭之前的连接 SocketClose temp_socket; SocketClose client_socket; !创建新的连接 SocketCreate temp_socket; !与新的指定服务器IP地址和端口号绑定 SocketBind temp_so

IOS 推送消息 php做推送服务端

IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器. 上图可以分为三个阶段: 第一阶段:应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有

java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&amp;服务端代码

java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12:54 8004人阅读 评论(6) 收藏 举报 socket服务器bufferstring网络java 第 1个异常是java.net.BindException:Address already in use: JVM_Bind.该异常发生在服务器端进行new ServerSocket(port)(p

c++ 网络编程(四)TCP/IP LINUX/windows下 socket 基于I/O复用的服务器端代码 解决多进程服务端创建进程资源浪费问题

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613861.html 好了,继上一篇说到多进程服务端也是有缺点的,每创建一个进程就代表大量的运算与内存空间占用,相互进程数据交换也很麻烦. 本章的I/O模型就是可以解决这个问题的其中一种模型...废话不多说进入主题-- I/O复用技术主要就是select函数的使用. 一.I/O复用预备知识--select()函数用法与作用 select()用来确定一个或多个套接字的状态(更为本质一点来讲是文

[转]ios push

转:http://blog.csdn.net/showhilllee/article/details/8631734 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器. 上图可以分为三个阶段: 第一阶段:应用程序的服务器端把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Pus