我正在开发一个具有推送通知功能的移动应用程序[Android和iOS]。我正在使用node-gcm和node-apn来发送推送。
有没有办法找到令牌无效或无效(iOS / Android注册令牌),以便我可以从我的数据库中删除它们?
答案 0 :(得分:1)
这就是我在项目中解决的问题:
<强> [Android]产品强>
如果您将令牌数组传递给 node-gcm 作为响应,您将获得一个长度等于令牌数的数组。该数组包含每个令牌的响应 - 成功或错误。根据错误,您可以决定是否删除令牌:
// This is response from Google
response.results.map((item,index) => {
if (item.error) {
// If Google doesn't recognize token I don't need to keep it anymore
if (item.error === 'NotRegistered') {
failedTokens.push(androidTokens[index]);
} else {
logger.error(`Push notification was not sent because: ${item.error}`);
}
}
});
failedTokens.map(token => {
this.deleteDeviceToken('android', appName, token);
});
<强> [iOS的] 强>
我对iOS有类似的东西。但值得注意的是我们使用HTTP2 APN。因此,只有当您使用HTTP2进行APN时,解决方案才适用于您:
// Response from Apple
response.failed.map(failure => {
if (failure.error) {
logger.error(`Error during sending notification: ${JSON.stringify(failure.error)}`);
} else {
// If APN returned HTTP 400 with status BadDeviceToken or HTTP 410 with status Unregistered
// then delete invalid tokens.
if (failure.response.reason === 'BadDeviceToken' || failure.response.reason === 'Unregistered') {
this.deleteDeviceToken('ios', appName, failure.device);
} else {
logger.error(`Push notification was not sent because: ${failure.response.reason}`);
}
}
});