0

我已经用easyAPNS设置了APNS服务器,一切正常,证书,权限,设备注册正确,消息在消息表中创建。但问题是,当我尝试获取队列消息时,class_APNS.php 中的函数:

private function _flushMessages(){
        // only send one message per user... oldest message first
        $sql = "SELECT
                `apns_messages`.`pid`,
                `apns_messages`.`message`,
                `apns_devices`.`devicetoken`,
                `apns_devices`.`development`
            FROM `apns_messages`
            LEFT JOIN `apns_devices` ON (`apns_devices`.`pid` = `apns_messages`.`fk_device` AND `apns_devices`.`clientid` = `apns_messages`.`clientid`)
            WHERE `apns_messages`.`status`='queued'
                AND `apns_messages`.`delivery` <= NOW()
                AND `apns_devices`.`status`='active'
            ORDER BY `apns_messages`.`created` ASC
            LIMIT 100;";

        $this->_iterateMessages($sql);
    }

不迭代任何消息,因为 devices 和 messages 的 clientid 列值为空,所以从句 ( apns_devices. pid= apns_messages. fk_deviceAND apns_devices. clientid= apns_messages. clientid) 永远不会完成。

这是我用来创建消息的 samples.php 代码段:

$apns->newMessage(4);
$apns->addMessageAlert('Si us plau!!!');
$apns->addMessageCustom('acme2', array('bang', 'whiz'));
$apns->queueMessage();

我真的很感谢你的帮助。

非常感谢。

4

1 回答 1

1

我也有同样的问题。我以这种方式修改了查询:

$sql = "SELECT apns_messages.pid, apns_messages.message, apns_devices.devicetoken, apns_devices.development FROM apns_messages LEFT JOIN apns_devices ON (apns_devices.clientid = apns_messages.clientid) WHERE apns_messages.status='queued' AND apns_messages.delivery <= NOW() AND apns_devices.status='active' ORDER BY apns_messages.created ASC LIMIT 1000;";

并发送超过 100 条消息

$tv_sec = 0;

$tv_usec = 200000;

它似乎工作正常。

于 2012-11-12T15:57:43.043 回答