2013-12-12 225 views
1

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

$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

它现在已经得到解决,这是一个PHP脚本问题 – Fatima

回答

1

是它可能是一些在你的数据库设备令牌是无效的(或在生产环境中,如果你在DB的沙盘设备令牌这将是情况下,至少无效)。

为了找到你必须使用增强的二进制格式(包括消息ID和过期时间)无效令牌,而苹果会寄给你的错误响应的无效令牌。在当前使用的简单格式中,Apple在遇到无效令牌时会简单地关闭连接。这就是为什么在该无效令牌之后的消息未被传送。

+0

是正确的,可能有在DB无效令牌,请你能送我,我怎么能认识到错误的记号?我如何使用反馈服务? – Fatima

+0

@Fatima尝试代码示例[这里](http://learn-php-by-example.blogspot.com.es/2013/01/working-with-apple-push-notification.html)。 – Eran

+0

我试过了,它给了我这些开发令牌的无效令牌,但仍然没有被所有设备接收到,请告诉我,如果我们有另一个无效的令牌,而不是像开发人员一样卸载应用程序,并不意味着此设备将无效?请解释 – Fatima

0

如果$ result为false,请确保关闭并重新打开与APNS的套接字连接。 如果您没有,我所报告的电话号码可能有缺陷。

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