PHP Safari PushNotifications "Error al extraer el paquete de notificaciones push"

Nov 26 2020

Estoy tratando de implementar notificaciones de safari y ya he resuelto la mayoría de las cosas. Estoy siguiendo el tutorial oficialhttps://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/PushNotifications/PushNotifications.html#//apple_ref/doc/uid/TP40013225-CH3-SW1 pero actualmente estoy recibiendo el error:

Error al extraer el paquete de notificaciones push

He visto los APN de este tema "Error al extraer el paquete de notificaciones push", pero parece que la persona no recibió ningún comentario / solución.

Antes de este error, recibía "Error en la verificación de firma del paquete push". pero termino resolviendo el problema con esta ayuda en el sitio web de Apple: la verificación de la firma del paquete push falló, pero los certificados de Apple están bien y al descargar / convertir a PEM el último certificado de Applehttps://www.apple.com/certificateauthority/AppleWWDRCAG3.cer

Website.json tiene los siguientes datos:

{
    "websiteName": "hello",
    "websitePushID": "web.com.hello",
    "allowedDomains": ["https://hello.com"],
    "urlFormatString": "https://hello.com/%@",
    "authenticationToken": "01sSggkfAAAqq1seeF0gglzzg",
    "webServiceURL": "https://hello.com"
}

manifest.json tiene los siguientes datos:

{
   "icon.iconset\/icon_16x16.png":{
      "hashType":"sha512",
      "hashValue":"d7366c75a9ad9a95ee2e6c6a4642ab6150d01986a870d8726e988c180e373cce7cbda1496150def585fb05e5b82d9753fabbe03e1e5bf56fce1c94a472bee50b"
   },
   "icon.iconset\/[email protected]":{
      "hashType":"sha512",
      "hashValue":"63287459ef021a8d3fe6a7ee40292446dddea305382713f25e8ff3f40b17d706012c809ebe6238a3652992ba55007f8dd22707b31f4730efc4b9d33baaca593d"
   },
   "icon.iconset\/icon_32x32.png":{
      "hashType":"sha512",
      "hashValue":"407027a704b967e57999d45ea68f2ccd156b49c698a4237ac8e60101f4c79388cbebf7242ac93c911f0176da49a49d12c5eec0f303943ea8f0d99f5d27898d21"
   },
   "icon.iconset\/[email protected]":{
      "hashType":"sha512",
      "hashValue":"a799fc64879d0d0304eb20b1bb96fe1c1b837e1cbc2d905ad3024b3230337d9f2a6ea41a73b02e91168b97fce13dd918f380d95ccd77ef1360e0bb818de8be99"
   },
   "icon.iconset\/icon_128x128.png":{
      "hashType":"sha512",
      "hashValue":"e709cbce5e4b4f355a4007a5665ad3b1b020ba81640fbed09db252910c20b956eab6167ae6a3e399b4b1f9ff1cf8eb4d68de844dd01a39d23fff15b3418ab6c5"
   },
   "icon.iconset\/[email protected]":{
      "hashType":"sha512",
      "hashValue":"1d210614b556267b6d41e1b7ad5d09db90ba77cab2196b85b7bc211873f03ebe3a89a0cf083b61181af0fa6900ba6eb8394f86e4921432a9779fb419c1def7ce"
   },
   "website.json":{
      "hashType":"sha512",
      "hashValue":"2c050ffb570fab3c4224ad2f08144f4ca9bf09d570f22bf3dc3cabf7c5146e436755bf171befcfa410d8f56ac4135b1e03b235197feed6306c5692b793b41668"
   }
}

Mi carpeta llamada "pushpackage" contiene:

  • website.json
  • manifest.json
  • firma
  • carpeta icon.iconset> 6 imágenes

Aunque la documentación dice:

La versión de la API. Actualmente, 'v2'

las solicitudes de Safari se realizan en el punto final https://hello.com/v1/pushPackages/web.com.hello, lo cual es un poco extraño, pero ...

Por último, el punto final POST mencionado anteriormente, desencadena:

header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="pushpackage.zip"');

echo file_get_contents($file);

El zip parece estar bien, al menos cuando abro todos los archivos están estructurados correctamente, pero no tengo ideas sobre qué podría estar mal con el archivo zip. ¿Algunas ideas?

Respuestas

Linesofcode Nov 27 2020 at 17:43

Resuelto .

Tenía varias cosas mal en mi código.

  1. El error:

Error al extraer el paquete de notificaciones push

Fue causado por un echo ...en el medio del código al crear el archivo zip.

  1. El error:

Error de verificación de firma del paquete push

Fue causado por varios factores:

  • Mi certificado .p12 era incorrecto, el .p12 Website Push IDno coincidía con mi website.jsoncódigo ni con el código javascript. Para depurar / ver los datos del certificado utilicé el comandoopenssl -nokeys -info -in certificate.p12 -passin pass:
  • El certificado AppleWWDRCAG3.cer (que caduca en 2030) del enlace oficial https://developer.apple.com/support/expiration/no funciona. Tuve que descargar el archivo AppleWWDRCA.cer (que vence en 2023) dehttps://developer.apple.com/certificationauthority/AppleWWDRCA.cer
  • Mis iconos no se crearon con una resolución de 72 ppp
  • La versión utilizada por Safari para solicitar permisos es la versión 1 "v1 / pushPackages .." y estaba creando el archivo zip con manifest.jsonen la versión 2