PHP Apple iOS Push Notifications: Command2 : Binary Interface and Notification Format

前端 未结 2 1868
醉话见心
醉话见心 2021-01-06 08:57

Nowadays, PHP and Apple/iOS Push Notifications with Command 2 has been becoming popular. However not sure, how to prepare the format for same, as per Apple guideline here, H

相关标签:
2条回答
  • 2021-01-06 09:24

    I believe that in building $msg you need

    . pack('N', strlen($msgInner))
    

    since Apple's documentation says the frame length should be 4 bytes

    "Frame length - 4 bytes - The size of the frame data"

    and for pack() 'n' generates 16 bits, while 'N' generates 32 bits

    n - unsigned short (always 16 bit, big endian byte order)

    N - unsigned long (always 32 bit, big endian byte order)

    0 讨论(0)
  • 2021-01-06 09:40
    //command 2
    $msgInner =
      chr(1)
    . pack('n', 32)
    . pack('H*', $deviceToken)
    
    . chr(2)
    . pack('n', strlen($payload))
    . $payload
    
    . chr(3)
    . pack('n', 4)
    . chr(1).chr(1).chr(1).chr(1)
    
    . chr(4)
    . pack('n', 4)
    . pack('N', time() + 86400)
    
    . chr(5)
    . pack('n', 1)
    . chr(10);
    
    $msg=
    chr(2)
    . pack('N', strlen($msgInner))
    . $msgInner;
    

    and for command 8 use this function: (by Yudmt) at About the apple Enhanced notification format

    function error_response($fp)
    {
        $read = array($fp);
        $null = null;
        $changedStreams = stream_select($read, $null, $null, 0, 1000000);
    
        if ($changedStreams === false)
        {
            echo ("Error: Unabled to wait for a stream availability");
        }
        elseif ($changedStreams > 0)
        {
            $responseBinary = fread($fp, 6);
            if ($responseBinary !== false || strlen($responseBinary) == 6)
            {
                $response = unpack('Ccommand/Cstatus_code/Nidentifier', $responseBinary);
                var_dump($response);
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题