簡體   English   中英

從PHP發送推送通知時有關pack()的警告

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM