关于IOS php推送不成功问题

Mr.Z 2016-03-16 11:21:24
php页面代码

<?php

$deviceToken = '70449ecf02f227e29b777baa15a74756e03986493e9b5d20b765df4627bd7afb';
$passphrase = '955999';

$message = 'My first push test!';

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns-dev.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
echo "<br/>----------1----------<br/>";

$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
echo "<br/>----------2----------<br/>";

if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo "<br/>----------3----------<br/>";
echo 'Connected to APNS <br/>' . PHP_EOL .'<br/>';

$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 '<br/>----------4----------Message not delivered-------------------' . PHP_EOL;
else
echo '<br/>----------5----------Message successfully delivered-------------------' . PHP_EOL;

// Close the connection to the server
fclose($fp);
?>



请各位大神帮我看看

...全文
1136 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈哈噶 2017-03-09
  • 打赏
  • 举报
回复
楼主解决了么 我现在也是这个情况呢
Mr.Z 2016-03-20
  • 打赏
  • 举报
回复
引用 6 楼 jam00 的回复:
那就表示写入成功了,token也要是测试生成的token
如何判断eviceToken值的是开发环境下值的还是正式环境下的值?
果酱很好吃 2016-03-17
  • 打赏
  • 举报
回复
什么错都没有?... 加大超时时间试试 检查下你的pem文件和对应的密码,还有 token 是否是对应应用生成的
Mr.Z 2016-03-17
  • 打赏
  • 举报
回复
引用 2 楼 jam00 的回复:

$deviceToken = 'xxx';//推送令牌
$data['aps']=array(
	'alert'=>'test message',
	'sound'=>'default'
);
push($data,$deviceToken);
function push($data,$deviceToken){
	$passphrase='123456';//密码
	$ckfile="ck.pem";//ck 文件存放路径

	$ctx = stream_context_create();
	stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);
	stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

	//测试服务器
	$fp = stream_socket_client('tls://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
	//正式
	//$fp = stream_socket_client('tls://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
	if(!$fp){
		echo $err.' - '.$errstr;
	}

	$payload=json_encode($data);

	$pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
	$result = fwrite($fp, $pushdata, strlen($pushdata));
	if(!$result){
		echo $result;
	}

	fclose($fp);
}
我测试了你的代码,显示不成功,输出内容为【 0 - 】 也就是$err输出的是0,而$errstr输出的是空 请问这个是什么问题啊 下面是我修改后的页面

<?php
    $deviceToken = '70449ecf02f227e29b777baa15a74756e03986493e9b5d20b765df4627bd7afb';//推送令牌
    $data['aps']=array(
        'alert'=>'test message',
        'sound'=>'default'
    );
    push($data,$deviceToken);
    function push($data,$deviceToken){
        $passphrase='123456';//密码
        $ckfile="apns-dev.pem";//ck 文件存放路径
     
        $ctx = stream_context_create();
        stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);
        stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
     
        //测试服务器
        $fp = stream_socket_client('tls://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
        //正式
        //$fp = stream_socket_client('tls://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
        if(!$fp){
            echo $err.' - '.$errstr;
        }
     
        $payload=json_encode($data);
     
        $pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
        $result = fwrite($fp, $pushdata, strlen($pushdata));
        if(!$result){
            echo $result;
        }
     
        fclose($fp);
    }
?>
果酱很好吃 2016-03-17
  • 打赏
  • 举报
回复
那就表示写入成功了,token也要是测试生成的token
Mr.Z 2016-03-17
  • 打赏
  • 举报
回复
引用 4 楼 jam00 的回复:
什么错都没有?... 加大超时时间试试 检查下你的pem文件和对应的密码,还有 token 是否是对应应用生成的
修改了一下代码如下:

<?php
echo "----------";
echo(time());
echo "----------<br/>";
    $deviceToken = '70449ecf02f227e29b777baa15a74756e03986493e9b5d20b765df4627bd7afb';//也是正确的
    $data['aps']=array(
        'alert'=>'test message',
        'sound'=>'default'
    );
    push($data,$deviceToken);
    echo "<br/>----------1-----------<br/>";
    function push($data,$deviceToken){
        $passphrase='955999';//密码是正确的
        $ckfile="apns-dev.pem";//ck 文件存放路径
     
        $ctx = stream_context_create();
        stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);
        stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
     
        //测试服务器
        $fp = stream_socket_client('tls://gateway.sandbox.push.apple.com:2195',$err,$errstr, 600, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

        //60改成600还是一样,没有任何反应
        //正式
        //$fp = stream_socket_client('tls://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
        if(!$fp){
            echo $err.' - '.$errstr;
            echo "<br/>----------2-----------<br/>";
        }
        echo "<br/>----------3-----------<br/>";
        $payload=json_encode($data);
     
        $pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
        $result = fwrite($fp, $pushdata, strlen($pushdata));
        if(!$result){
            echo $result;
        }
     
        fclose($fp);
        echo "<br/>----------4-----------<br/>";
    }
?>
输出结果是: ----------1458204387---------- ----------3----------- ----------4----------- ----------1----------- 这是表示都成功了吗?可是手机没有反应啊
果酱很好吃 2016-03-16
  • 打赏
  • 举报
回复

$deviceToken = 'xxx';//推送令牌
$data['aps']=array(
	'alert'=>'test message',
	'sound'=>'default'
);
push($data,$deviceToken);
function push($data,$deviceToken){
	$passphrase='123456';//密码
	$ckfile="ck.pem";//ck 文件存放路径

	$ctx = stream_context_create();
	stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);
	stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

	//测试服务器
	$fp = stream_socket_client('tls://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
	//正式
	//$fp = stream_socket_client('tls://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
	if(!$fp){
		echo $err.' - '.$errstr;
	}

	$payload=json_encode($data);

	$pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
	$result = fwrite($fp, $pushdata, strlen($pushdata));
	if(!$result){
		echo $result;
	}

	fclose($fp);
}
Mr.Z 2016-03-16
  • 打赏
  • 举报
回复
来人帮忙看看啊

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧