APN反馈服务不发送令牌

时间:2013-05-03 09:10:12

标签: node.js apple-push-notifications

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

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

    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是真的。 我做错了什么?

1 个答案:

答案 0 :(得分:0)

您是否可以使用生产证书联系沙盒环境?

从你的代码:

  

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

     

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

并且:

  

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

如果是这种情况,那就是它不起作用的原因。