繁体   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