[英]warning about pack() while sending push notification from PHP
我正在从PHP向iPhone发送推送通知。
连接已成功建立,但它会给我以下错误:
Connection Established
Warning: pack() [function.pack]: Type i: too few arguments in C:\xampp\htdocs\BiiMe\checkAvailableProduct.php on line 68
M{"aps":{"alert":"BiiMe finds product for you","badge":"3","sound":"default"}} M{"aps":{"alert":"BiiMe finds product for you","badge":"3","sound":"default"}}
Warning: socket_close(): supplied resource is not a valid Socket resource in C:\xampp\htdocs\BiiMe\checkAvailableProduct.php on line 79
我的代码是:
function pushToIphone($deviceToken, $badge){
ini_set('display_errors','on');
error_reporting(E_ALL);
// $apnsHost = 'gateway.sandbox.push.apple.com';
$apnsHost = 'gateway.push.apple.com';
$apnsPort = 2195;
$pem_path = dirname(__FILE__);
$pem_path = $pem_path .'\cert';
$apnsCert = $pem_path.'\apns_cer.pem';
echo $apnsCert."<br/>";
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
if($apns) {
echo "Connection Established<br/>";
$payload = array();
$payload['aps'] = array('alert' => 'BiiMe finds product for you', 'badge' => $badge, 'sound' => 'default');
//$payload['server'] = array('serverId' => $serverId, 'name' => $serverName);
$payload = json_encode($payload);
apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
//$apnsMessage = chr(0) . chr(0) . chr(32) . pack('nic*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
echo $apnsMessage;
print_r($apnsMessage);
fwrite($apns, $apnsMessage);
} else {
echo "Connection fail<br/>";
}
//socket_close($apns);
socket_close($apns);
fclose($apns);
}
看起来在代码中已注释掉产生给定错误消息的行。
Warning: pack() [function.pack]: Type i: too few arguments
意味着它在格式字符串中达到了“ i”,但是没有更多的格式参数。 nic*
格式字符串至少需要3个参数,但您只提供了一个。
只要$ deviceToken是十六进制字符串,您无需注释的代码就可以正常工作。
只是因为我发送错误的设备令牌而已,它只需要数字,字符和空格。 禁止使用特殊字符。
socket_close();
不要使用。
Use fclose(apns);
而不是socket_close(apns);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.