apple push notification - PHP [closed]

2019-05-10 06:14发布

问题:

I have a problem when i use push Notification, It works when i use develop, but when i want to use it for real, it won't work.

The ck is made for production.

When i use it, the result is: Message successfully delivered But my phone do not receive the message

<?php

pushNotification('wow2','DeviceToken');

function pushNotification($theMessage, $theDeviceToken)
{

        // Put your device token here (without spaces):
    $deviceToken = $theDeviceToken;     

    // Put your private key's passphrase here:
    $passphrase = 'Code';

    // Put your alert message here:
    $message = $theMessage;

    ////////////////////////////////////////////////////////////////////////////////

    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

    // Open a connection to the APNS server
    $fp = stream_socket_client(
        'ssl://gateway.push.apple.com:2195', $err,
        $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

    if (!$fp)
        //exit("Failed to connect: $err $errstr" . PHP_EOL);
    exit("" . PHP_EOL);
    //echo 'Connected to APNS\n' . PHP_EOL;

    // Create the payload body
    $body['aps'] = array(
        'alert' => $message,
        'sound' => 'default'
        );

    // Encode the payload as JSON
    $payload = json_encode($body);

    // Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

    // Send it to the server
    $result = fwrite($fp, $msg, strlen($msg));

    if (!$result)
        echo 'Message not delivered' . PHP_EOL;
    else
        echo 'Message successfully delivered' . PHP_EOL;

    fclose($fp);


}
?>      

Can anyone see what's wrong? :)

回答1:

there are 3 types of problem faced at here on APNS

  1. your Device token does not match
  2. your .pem does not a valid one, the reason is .p12 and .cer files are corrupted some times , so delete the .p12 file and .cer and create again once.
  3. is not a worth able answer but by chance it will be occur -- check your device notification is ON/OFF


回答2:

I think it's a problem with your Device Token. If you have an invalid device token in your server, it will not receive the notification. Once you have deleted the invalid device token from your server, then it will work.

The same thing happened to me, and it took a long time to find the solution.



回答3:

Try with Hardcoded device token of your device mobile token.

After that try with variable or echo device token before using.

// Put your device token here (without spaces):

$deviceToken = '0f744707bebcf74f9b7c25d48e3358945f6aa01da5dd43487462c7eaf61bbad78';