推送限制数量的ios设备收到的通知

时间:2013-12-12 12:55:31

标签: ios push-notification apple-push-notifications payload

我的应用程序中有推送通知服务,我的数据库中有600个令牌,不幸的是,只有30个令牌才能收到推送通知。 我得到了我的iPad令牌,我把它放在数据库的第一行,我收到了推送通知,我试图测试是否收到了所有令牌,所以我把它(同一个令牌)放在第35条记录中,我发送推送通知,我的iPad没有收到它。 我正在使用生产推送通知(没有沙箱)而不是开发。

    $sql="Select apns_devices.pid, apns_devices.appname, apns_devices.appversion, apns_devices.devicetoken, apns_devices.devicemodel, apns_devices.deviceversion, apns_devices.pushbadge, apns_devices.pushalert, apns_devices.pushsound, apns_devices.development, apns_devices.`status`, apns_devices.created, apns_devices.modified, apns_devices.`type`
From apns_devices
Where apns_devices.`status` = 'active'  AND apns_devices.pushalert = 'enabled' AND apns_devices.development = 'production' ";
$result=mysql_query($sql);


$payload = '{"aps":{"alert":"'.$message.'","sound":"default","badge":"+1"}}';

$i=0;    
 while ($deviceToken = mysql_fetch_array($result1)) { 
// Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', ''.$deviceToken[3].'') . pack('n', strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
$i++;
        }

echo $i;

echo $ i返回600,这是数据库中的令牌数,但并非所有设备都接收推送通知。

请帮忙。

2 个答案:

答案 0 :(得分:1)

您的数据库中的某些设备令牌是否可能无效(或者至少在生产环境中无效,如果您在数据库中有一些沙箱设备令牌,则会出现这种情况)。

为了找到无效的令牌,您必须使用增强的二进制格式(包括消息ID和到期时间),Apple将向您发送无效令牌的错误响应。在您当前使用的简单格式中,Apple只会在遇到无效令牌时关闭连接。这就是无法传递无效令牌之后的消息的原因。

答案 1 :(得分:0)

如果$ result为false,请确保关闭并重新打开与APNS的套接字连接。 如果你不这样做,我们报告的数字可能有缺陷。

提醒:如果您尝试将推送发送到无效或过期的令牌,Apple会关闭套接字连接。