apple-push-notifications - apple - user notifications




Come inviare messaggi push APN utilizzando la chiave di autenticazione APN e gli strumenti CLI standard? (2)

È possibile inviare notifiche push da NODE JS utilizzando la chiave di autenticazione di notifica push di Apple (Sandbox e produzione). Apple ha fornito un tutorial in questo collegamento

Questo tutorial ha tutte le fasi per creare la chiave di autenticazione di notifica push di Apple e impostare un server locale per eseguire il codice Nodo JS per l'invio di notifiche push. È possibile eseguire il codice nel computer locale e testare la notifica push.

Spero che questo ti sia d'aiuto.

Apple ha recentemente aggiunto un nuovo metodo di autenticazione all'APNS ( chiave di autenticazione di notifica push di Apple (Sandbox e produzione) ).

La chiave scaricata è un file .p8 con una chiave privata:

$ cat APNSAuthKey_3HHEB343FX.p8
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBH...Already.Revoked...lHEjCX1v51W
-----END PRIVATE KEY-----

Sto usando i messaggi APN usando il vecchio metodo - aggiungendoli al portachiavi, chiedendo un certificato e usando OpenSSL per inviare messaggi a gateway.production.push.apple.com:2195 .

Come posso inviare notifiche push usando gli strumenti standard CLI Linux (OpenSSL, Python ecc.) Usando il nuovo formato?


Se hai arricciatura con supporto HTTP / 2 e openssl con supporto ECDSA installato sul tuo computer, puoi utilizzare il seguente script per testare le notifiche push utilizzando una chiave di autenticazione APN:

#!/bin/bash

deviceToken=b27371497b85611baf9052b4ccfb9641ab7fea1d01c91732149c99cc3ed9342f

authKey="./APNSAuthKey_ABC1234DEF.p8"
authKeyId=ABC1234DEF
teamId=TEAM123456
bundleId=com.example.myapp
endpoint=https://api.development.push.apple.com

read -r -d '' payload <<-'EOF'
{
   "aps": {
      "badge": 2,
      "category": "mycategory",
      "alert": {
         "title": "my title",
         "subtitle": "my subtitle",
         "body": "my body text message"
      }
   },
   "custom": {
      "mykey": "myvalue"
   }
}
EOF

# --------------------------------------------------------------------------

base64() {
   openssl base64 -e -A | tr -- '+/' '-_' | tr -d =
}

sign() {
   printf "$1"| openssl dgst -binary -sha256 -sign "$authKey" | base64
}

time=$(date +%s)
header=$(printf '{ "alg": "ES256", "kid": "%s" }' "$authKeyId" | base64)
claims=$(printf '{ "iss": "%s", "iat": %d }' "$teamId" "$time" | base64)
jwt="$header.$claims.$(sign $header.$claims)"

curl --verbose \
   --header "content-type: application/json" \
   --header "authorization: bearer $jwt" \
   --header "apns-topic: $bundleId" \
   --data "$payload" \
   $endpoint/3/device/$deviceToken

NOTA: Io uso una leggera variazione di questo script per testare su macOS con le versioni homebrew di curl e openssl: http://thrysoee.dk/apns/