找到ios和android

时间:2017-05-11 07:15:46

标签: android ios node.js express push-notification

我正在开发一个具有推送通知功能的移动应用程序[Android和iOS]。我正在使用node-gcmnode-apn来发送推送。

有没有办法找到令牌无效或无效(iOS / Android注册令牌),以便我可以从我的数据库中删除它们?

1 个答案:

答案 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}`);
        }
    }
});