{"reason":"BadDeviceToken"} HTTP2-уведомления IOS от Nodejs

Я пытаюсь отправлять push-уведомления с помощью http2 API из моего бэкэнда node.

У меня есть с собой следующее от команды IOS.

  1. .p8 ключ авторизации
  2. Идентификатор команды
  3. Идентификатор ключа

Мы сгенерировали сборку из производственной среды. Ключ генерируется с помощью выбора 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, ни токен устройства не является недействительным, ни я использую производственный сертификат для сервера разработки или наоборот; ни то, ни другое здесь не так.

Как я могу заставить это работать?

0 ответов

Другие вопросы по тегам