Я не получаю 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