{"reason":"BadDeviceToken"} HTTP2-уведомления IOS от Nodejs
Я пытаюсь отправлять push-уведомления с помощью http2 API из моего бэкэнда node.
У меня есть с собой следующее от команды IOS.
- .p8 ключ авторизации
- Идентификатор команды
- Идентификатор ключа
Мы сгенерировали сборку из производственной среды. Ключ генерируется с помощью выбора AppStore.
Я не вижу несоответствия среды в ключе, токене устройства и сборке.
Но все же я получаю
:status: 400 apns-id: 91XXXX-XXXX-XXXX-XXXX-3E8XXXXXX7EC
{"причина":"BadDeviceToken"}
Код из бэкэнда Node:
const jwt = require('jsonwebtoken');
const http2 = require('http2');
const fs = require('fs');
const key = fs.readFileSync(__dirname + "/AuthKey_XXXXXXXXXX.p8", 'utf8')
const unix_epoch = Math.round(new Date().getTime() / 1000);
const token = jwt.sign(
{
iss: "XXXXXXXXXX", //"team ID" of developer account
iat: unix_epoch
},
key,
{
header: {
alg: "ES256",
kid: "XXXXXXXXXX", //issuer key "key ID" of p8 file
}
}
)
const host = 'https://api.push.apple.com'
const path = '/3/device/<device_token>'
const client = http2.connect(host);
client.on('error', (err) => console.error(err));
const body = {
"aps": {
"alert": "hello",
"content-available": 1
}
}
const headers = {
':method': 'POST',
'apns-topic': 'com.xxxxxx.xxxxxx', //your application bundle ID
':scheme': 'https',
':path': path,
'authorization': `bearer ${token}`
}
const request = client.request(headers);
// request.on('response', response => {
// console.log("apnresponse",JSON.stringify(response));
// });
request.on('response', (headers, flags) => {
for (const name in headers) {
console.log(`${name}: ${headers[name]}`);
}
});
request.setEncoding('utf8');
let data = ''
request.on('data', (chunk) => { data += chunk; });
request.write(JSON.stringify(body))
request.on('end', () => {
console.log(`\n${data}`);
client.close();
});
request.end();
Команда IOS может успешно отправлять уведомления на устройство с помощью консоли Firebase.PUsh-уведомления терпят неудачу только тогда, когда я пытаюсь из серверной части узла.
Согласно документации Apple, ни токен устройства не является недействительным, ни я использую производственный сертификат для сервера разработки или наоборот; ни то, ни другое здесь не так.
Как я могу заставить это работать?