My backend uses Node.js with Express.js, handling APN using the npm apn
package, which uses Apple's new Provider Authentication Tokens. The iOS app got permission and sent the received 32 bytes device token received to the backend, encoded as a base64 string.
But when trying to send a push notification with the device token (encoded as ascii, utf8 or base64), the APN server returns -
{"sent":[],"failed":[{"device":"....token....","status":"400","response":{"reason":"BadDeviceToken"}}]}
What should be the token format when sent to APN servers?
After hours searching the internet, camp across APNs Provider API, under APNs Notification API
it was mentioned that -
For the
device-token
parameter, specify the hexadecimal bytes of the device token for the target device.
Which worked. Device token should be encoded as hexadecimal bytes.
// Node.js snippet
let deviceToken = Buffer.from(base64Token, 'base64').toString('hex');
来源:https://stackoverflow.com/questions/40303787/sending-an-apn-returns-baddevicetoken-what-should-devicetoken-format-be