iOS 13 APNS с PHP - PullRequest
       50

iOS 13 APNS с PHP

1 голос
/ 22 сентября 2019

iOS 13 теперь требует, чтобы вы добавили заголовок apns-push-type для оповещения или фона.Как добавить это в мой текущий код, который я использую для отправки уведомлений?

Я отправляю push-уведомления с помощью этого решения в течение многих лет, но я не знаю, как добавить требуемые заголовки.

function sendPushNotification($uid,$title,$message,$action,$type,$id){

$deviceToken = "*************";
$passphrase = '***********';

$ctx = stream_context_create();

stream_context_set_option($ctx, 'ssl', 'local_cert', 'pem/Certificates.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

// Open a connection to the APNS server

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

//echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
    'alert' => array(
        'title' => $title,
        'body' => $message,
        'action-loc-key' => 'Bango App',
    ),
    'mutable-content'=> 1,
    'badge' => 1,
    'content-available'=>1,
    'sound' => 'oven.caf',
    'action' => $action,
    'type' => $type,
    'id' => $id,

    );



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


fclose($fp);

// Close the connection to the server

}

?>```

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете передать заголовок по $ msg, в моем коде у меня есть:

$msg = pack("C", 1) . pack("N",$row['id_device_token']) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $row['device_token'])) . pack("n", strlen($payload1)) . $payload1;

, где $ row ['id_device_token'] это "apns-id", а $ apple_expiry это "apns-expiration",Согласно Apple ([https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns][1]) заголовок «apns-push-type» должен быть помещен перед «apns-id», поэтому:

$msg = pack("C", 1) . pack("N","alert") . pack("N",$row['id_device_token']) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $row['device_token'])) . pack("n", strlen($payload1)) . $payload1;
...