2012-01-31 24 views
0

我正在向PHP發送推送通知。在發送來自PHP的推送通知時關於pack()的警告

成功建立連接,但它會給錯誤我想:

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); 
} 

回答

0

這只是未來,因爲我錯送設備令牌它只是把數字,字符和空格。禁止特殊字符。

socket_close();請勿使用。

Use fclose(apns);而不是socket_close(apns);

1

它看起來像是一個生產給定的錯誤消息,該行中註釋掉你碼。

Warning: pack() [function.pack]: Type i: too few arguments 

意味着它達到了格式字符串「我」,但沒有更多的參數格式。格式字符串nic*將需要至少3個參數,但您只提供一個參數。

只要$ deviceToken是一個十六進制字符串,您已取消註釋的代碼看起來應該可以正常工作。

+0

那我該怎麼辦?那麼套接字警告呢? – Siten 2012-01-31 04:56:44

+0

+1爲您的答案 – Siten 2012-02-06 05:57:43