freefei

iphone 消息推送 实现

2017-05-09 15:04  freefei  阅读(312)  评论(0编辑  收藏  举报

IPhone 消息推送实现

参考 资料 http://blog.csdn.net/victormokai/article/details/39501277

对生成pem 的补充

拿到mac 上生成导出的两个文件 cert.p12 , key.p12 放到一个文件夹下
终端切换到这个文件夹下

openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12
生成cert.pem;输入访问密码123456,设置pem文件的密码123456(服务器访问pem的密码)
 
openssl pkcs12 -nocerts -out key.pem -in key.p12
生成key.pem;操作同上

(可选)
openssl rsa -in key.pem -out key.unencrypted.pem如果需要对key不进行加密。

cat cert.pem key.unencrypted.pem > ck.pem
合并两个.pem文件, 这个ck.pem就是服务端需要的证书了。





PHP 案例

<?php
/**
 * PHP iospush
 *
 * Copyright (c) 2006 - 2014 iospush
 *
 *
 * @category   PHP iospush
 * @copyright  Copyright (c) iospush (http://www.leipi.org)
 * @license    http://www.apple.com    LGPL
 * @version    1.8.0, 2014-03-02
 */
class iospush
{
	public $path=\'cert.pem\';//证书
	public $pass=\'linksame\'; //密码
	public $sound = \'tap.aif\'; //ͨ声音
	public $badge=0;
	
	public function __construct($path=\'\',$pass=\'\') {
		if($path)
			$this->path = $path;
		if($pass)
			$this->pass = $pass;

	}
	function push($token, $data)
	{
		
		$ctx = stream_context_create();
		stream_context_set_option($ctx, \'ssl\', \'local_cert\', $this->path);
		stream_context_set_option($ctx, \'ssl\', \'passphrase\', $this->pass);
		
		// Open a connection to the APNS server
		//这个为正是的发布地址
		//$fp = stream_socket_client(\'tls://gateway.push.apple.com:2195\',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
		//这个是沙盒测试地址,发布到appstore后记得修改哦
		$fp = stream_socket_client(\'tls://gateway.sandbox.push.apple.com:2195\', $err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
		

		
		if (!$fp){
			return false;
		}
			
		
		
		// Create the payload body
		$body[\'aps\'] = array(
				\'alert\' => $message,
				\'sound\' => \'default\'
		);
		
		$body[\'aps\'][\'alert\'] = $data[\'description\'];
		$body[\'aps\'][\'sound\'] = \'default\';
		foreach($data as $k => $v) {
			if ($k != "description") {
				$body[$k] = $v;
			}
		}
		
		// Encode the payload as JSON
		$payload = json_encode($body);
		
		// Build the binary notification
		$msg = chr(0) . pack(\'n\', 32) . pack(\'H*\', str_replace(\' \', \'\', $token)) . pack(\'n\', strlen($payload)) . $payload;
		
		// Send it to the server
		$result = fwrite($fp, $msg, strlen($msg));
		
		if (!$result)
			return  false;
			//echo \'Message not delivered\' . PHP_EOL;
		else
			//echo \'Message successfully delivered\' . PHP_EOL;
			return  true;
		// Close the connection to the server
		fclose($fp);
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		// Construct the notification payload
// 		$body = array();
// 		if ($this->badge) {
// 			$body[\'aps\'][\'badge\'] = $this->badge;
// 		} 
// 		$body[\'aps\'][\'alert\'] = $data[\'description\'];
// 		$body[\'aps\'][\'sound\'] = $this->sound; 
// 		// ��װ���
// 		foreach($data as $k => $v) {
// 			if ($k != "description") {
// 				$body[$k] = $v;
// 			} 
// 		} 
		
// 		// $body[\'append_1\']="appendent_1";
// 		// $body[\'append_2\']="appendent_2";
// 		$ctx = stream_context_create();
// 		stream_context_set_option($ctx, \'ssl\', \'local_cert\', $path); //pem�ļ���ַ
// 		stream_context_set_option($ctx, \'ssl\', \'passphrase\', $this->pass); //֤������
		 
// 		// $fp=stream_socket_client(\'ssl://gateway.push.apple.com:2195\', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);//��ʽ
// 		$fp = @stream_socket_client("ssl://gateway.sandbox.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); //����ɳ��
		
// 		if (!$fp) {
// 			return false;
// 		} 

// 		$payload = json_encode($body);
// 		$msg = chr(0) . pack("n", 32) . pack(\'H*\', str_replace(\' \', \'\', $token)) . pack("n", strlen($payload)) . $payload;

// 		fwrite($fp, $msg);
// 		fclose($fp);
		return true;
	} 
}


$deviceToken=\'93f852218f8c911b40432999ab1d02280a491e8ed0d64a0178e2d7f82e827452\';  

$pp= new iospush(\'ck.pem\',\'linksame\');
$data[\'description\']="回个哈哈哈";
$statusss=$pp->push($deviceToken, $data);
var_dump($statusss);
?>

分类:

技术点:

相关文章:

  • 2021-04-05
  • 2021-12-16
  • 2021-10-31
  • 2021-09-11
  • 2021-11-27
  • 2021-06-10
  • 2021-09-27
猜你喜欢
  • 2022-01-01
  • 2021-06-15
  • 2021-10-21
  • 2021-06-05
  • 2021-11-27
  • 2021-11-27
相关资源
相似解决方案