Enviar notificación de inserción de iOS en php con el file .p8

Apple ha actualizado su service de notifications push y el file de certificate recibido ahora es un file .p8. Hay muchos ejemplos en línea de cómo enviar una notificación push con el file .pem pero no puedo encontrar nada para un file .p8. ¿Alguien tiene algún código que funcione con el file .p8?

He estado tratando de enviar notifications push con un nuevo service de notifications push basado en JWT usando PHP. Definitivamente no fue una tarea fácil.

He cargado el proyecto en GitHub . Puede download desde allí y asegúrese de replace su file .p8 con el file .p8 existente.

Luego, en el file push.php , debe replace su kid , iss(Team ID) , token y app_bundle_id .

Vaya al directory y desde la terminal ejecute el command php push.php . Si todo va bien, deberías recibir notifications push.

Esta solución funciona bien para mí. Solo asegúrate de que no recibas ningún error en la terminal.

Espero que esto ayude.

Con el script a continuación, puedo enviar notifications push basadas en tokens con el file .p8.

La versión mínima de curl que soporta esto es 7.38.0, y debe comstackrse con la bandera –with-nghttp2 y openssl> = 1.0.2

 <?php $keyfile = 'AuthKey_AABBCC1234.p8'; # <- Your AuthKey file $keyid = 'AABBCC1234'; # <- Your Key ID $teamid = 'AB12CD34EF'; # <- Your Team ID (see Developer Portal) $bundleid = 'com.company.YourApp'; # <- Your Bundle ID $url = 'https://api.development.push.apple.com'; # <- development url, or use http://api.push.apple.com for production environment $token = 'e2c48ed32ef9b018........'; # <- Device Token $message = '{"aps":{"alert":"Hi there!","sound":"default"}}'; $key = openssl_pkey_get_private('file://'.$keyfile); $header = ['alg'=>'ES256','kid'=>$keyid]; $claims = ['iss'=>$teamid,'iat'=>time()]; $header_encoded = base64($header); $claims_encoded = base64($claims); $signature = ''; openssl_sign($header_encoded . '.' . $claims_encoded, $signature, $key, 'sha256'); $jwt = $header_encoded . '.' . $claims_encoded . '.' . base64_encode($signature); // only needed for PHP prior to 5.5.24 if (!defined('CURL_HTTP_VERSION_2_0')) { define('CURL_HTTP_VERSION_2_0', 3); } $http2ch = curl_init(); curl_setopt_array($http2ch, array( CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0, CURLOPT_URL => "$url/3/device/$token", CURLOPT_PORT => 443, CURLOPT_HTTPHEADER => array( "apns-topic: {$bundleid}", "authorization: bearer $jwt" ), CURLOPT_POST => TRUE, CURLOPT_POSTFIELDS => $message, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 30, CURLOPT_HEADER => 1 )); $result = curl_exec($http2ch); if ($result === FALSE) { throw new Exception("Curl failed: ".curl_error($http2ch)); } $status = curl_getinfo($http2ch, CURLINFO_HTTP_CODE); echo $status; function base64($data) { return rtrim(strtr(base64_encode(json_encode($data)), '+/', '-_'), '='); } ?>