Не получает 410 от apns даже через несколько дней после удаления приложения - PullRequest
0 голосов
/ 13 февраля 2020

Я не получаю 410 статус от apns за последние несколько дней, но пока не получилось, где я могу получить 400 за неправильный токен.

Я знаю, что этот вопрос задавался много раз, и уже есть много ответов решение1 , решение2 для того же вопроса. Но ни один из них не работает для меня.

Кроме того, я попробовал как разработку, так и производственную среду (через TestFlight ). Я использую Aws лямбда-функцию в качестве моего бэкэнда и iOS 13. Вот код.

const apn = require('apn');
exports.handler = async (event) => {

let optionsAPNS = {
    token: {
    key: "./AuthKey_T********5.p8",
    keyId: "T********5",
    teamId: "N*********A"
   },
    production: true
 };

let apnProvider = new apn.Provider(optionsAPNS);

let body = event['body'] ? JSON.parse(event['body']) : 
{deviceToken:"94b2f7a2f0c1b158edb2835ccd316592d5d8945892d2b13de143cb4198269d11"};  
let deviceToken = body.deviceToken;

var note = new apn.Notification();
note.topic = "my-bundle-id";
note.contentAvailable = 1;
note.sound = "";
note.pushType = 'background';

const resdultData =  await apnProvider.send(note, deviceToken);

let response = {
        "statusCode": 200,
        "headers": {},
        "body": JSON.stringify(resdultData),
        //"body": r,
        "isBase64Encoded": false
    };

    return response;
};

Также после попытки использовать другой возможный способ т.е. вместо использования пакета Я напрямую пытался связаться с apns сервером, но ничего не получалось 410 .

Вот код

const jwt = require('jsonwebtoken');
const fs = require('fs');

const http2 = require("http2");


let start = async () => {

    let iatTime = Math.floor(Date.now() / 1000)

    let headerData = {
        'algorithm': 'ES256',
        'keyid': 'T********5'
    };
    let payloadData = {
        "iss": "N*********A",
        "iat": iatTime
    };

    let filename = "AuthKey_T********5.p8"

    let secretContent = fs.readFileSync(process.cwd() + "/" + filename).toString()

    // console.log(secretContent)
    var tokenString = ''
    await jwt.sign(payloadData, secretContent, headerData, function (err, token) {
        // console.log('error: ',err);

        // console.log('token: ',token);
        tokenString = token;
    });

    let res = "";
    let postbody =  JSON.stringify({
        'aps': { "content-available": 1, "sound": "" }
    });
    let baseurl = 'https://api.sandbox.push.apple.com'
    let path = '/3/device/<device_token>'
    const client = http2.connect(baseurl);
    try {

        const req = client.request({
            ":method": "POST",
            ":path": path,
            "apns-push-type":"background",
            "apns-topic":"My-Bundle-Id",
            "Authorization": `Bearer ${tokenString}`
        });


        req.write(postbody);
        req.on("response", (headers, flags) => {
            console.log('len ', typeof(flags));
            for (const name in headers) {
                console.log(`${name}: ${headers[name]}`);
            }

        });
        req.on("data", chunk => {
            console.log('chunk type ', typeof(chunk));
            console.log('chunk', chunk);
            res = res + chunk;
            console.log('res', res);
        });
        req.on("end", () => {
            client.close();
        });
        req.on('error', function(err) {
            console.log('error', error);
        });
        req.end(postbody);
        // console.log('my Req',req);
    } catch (error) {
        console.log(error);
    }
};

start();

Я пробовал и это решение как для разработки, так и для производственной среды (через TestFlight).

Все еще получаю 200 с сервера APNS даже через несколько дней после удаления приложения. Но ничего не получилось .

Пожалуйста подскажите что я делаю не так или как я могу получить 410

...