我的应用程序中有推送通知服务,我的数据库中有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,这是数据库中的令牌数,但并非所有设备都接收推送通知。
请帮忙。
答案 0 :(得分:1)
您的数据库中的某些设备令牌是否可能无效(或者至少在生产环境中无效,如果您在数据库中有一些沙箱设备令牌,则会出现这种情况)。
为了找到无效的令牌,您必须使用增强的二进制格式(包括消息ID和到期时间),Apple将向您发送无效令牌的错误响应。在您当前使用的简单格式中,Apple只会在遇到无效令牌时关闭连接。这就是无法传递无效令牌之后的消息的原因。
答案 1 :(得分:0)
如果$ result为false,请确保关闭并重新打开与APNS的套接字连接。 如果你不这样做,我们报告的数字可能有缺陷。
提醒:如果您尝试将推送发送到无效或过期的令牌,Apple会关闭套接字连接。