0

我实现了一个 node.js 脚本,它查询 APN 反馈服务以检索无效令牌列表。不幸的是,我没有设法获得任何无效的令牌。我按照以下步骤操作:

  1. 在沙盒模式下安装带有推送通知的 ios 应用程序。
  2. 向应用程序发送一些通知(成功完成)。
  3. 卸载应用程序(我读到如果我卸载的应用程序是唯一具有推送通知的应用程序,则会导致与 APN 服务断开连接,并且无法通知它应用程序已卸载;但这不是我的情况, iPad 安装了许多推送通知应用程序!!)。
  4. 使用相同的令牌发送许多其他通知,大约十个或二十个,只是为了证明应用程序令牌不再有效(显然通知没有传递,因为该应用程序刚刚被卸载)。
  5. 查询反馈服务最终获得无效令牌。反馈服务不发送任何内容,它只是关闭连接而没有任何类型的数据。

这是我用来查询反馈服务的脚本:

function pollAPNFeedback() {
    var certPem = fs.readFileSync('apns-prod-cert.pem', encoding='ascii');
    var keyPem = fs.readFileSync('apns-prod-key-noenc.pem', encoding='ascii');
    var options = { key: keyPem, cert: certPem };

    console.log("Connecting APN feedback service");

    var stream = tls.connect(2196, 'feedback.sandbox.push.apple.com', options, function() {
        if (stream.authorized == false) {
            return console.log('not connected')
        } else {
            console.log('connected');
        };


        var bufferlist = [];
        stream.on('data', function(data) {
            // APN feedback starts sending data immediately on successful connect
            console.log('-->Data: ', data);
            //bufferlist.push(data);
        });

        stream.on('readable', function(){
            console.log('we have incoming data');
        });

        stream.on('error', function(err){
            console.log('error: ', err);
        });

        stream.on('close', function(){
            console.log('closed');
            console.log('stream.data = ', stream.data);
        });
    });
}

如您所见,我在流变量上放置了一些侦听器。'data' 监听器上的回调函数永远不会被调用,只有 'close' 事件触发它的回调。我确信连接已经建立,因为 stream.authorized 是真的。我究竟做错了什么?

4

1 回答 1

0

Is it possible that you are using a production certificate to contact the sandbox environment?

From your code :

var certPem = fs.readFileSync('apns-prod-cert.pem', encoding='ascii');

var keyPem = fs.readFileSync('apns-prod-key-noenc.pem', encoding='ascii');

And :

var stream = tls.connect(2196, 'feedback.sandbox.push.apple.com', options, function()

If that's the case, that's why it doesn't work.

于 2013-05-03T16:14:20.310 回答