[英]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.