2013-12-12 2 views
1

У меня есть служба push-уведомлений в моем приложении, и у меня есть 600 число токенов в моей базе данных, к сожалению, push-уведомления получены только 30 жетонами. Я получил свой токен iPad, и я положил его в первую строку в базе данных, я получил push-уведомление, я пытался проверить, были ли получены все токены, поэтому я поставил его (тот же знак) в 35-й записи, я отправьте push-уведомление, мой iPad не получил его. Я работаю с уведомлениями о производстве push (без песочницы), а не разработки.push-уведомления, полученные ограниченным числом устройств 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; 

эхо $ я возвращает 600, который является количество маркеров в базе данных, но не все устройства получать уведомления толчка.

Пожалуйста, помогите.

+0

Это разрешено сейчас, это проблема с php-скриптом – Fatima

ответ

1

Возможно, некоторые из токенов устройства в вашей БД недействительны (или, по крайней мере, недействительны в производственной среде, что будет иметь место, если в БД есть маркеры устройства для песочницы).

Чтобы найти недействительные токены, вы должны использовать расширенный двоичный формат (который включает в себя идентификатор сообщения и время истечения срока действия), и Apple отправит вам ответы об ошибках для недействительных токенов. В простом формате, который вы используете в настоящее время, Apple просто закрывает соединение, когда сталкивается с недействительным токеном. Вот почему сообщения, следующие за недействительным токеном, не доставляются.

+0

да, возможно, в БД могут быть недопустимые токены, пожалуйста, можете ли вы выслать мне, как я могу распознать недействительные токены? как я могу использовать службу обратной связи? – Fatima

+0

@Fatima Попробуйте образец кода [здесь] (http://learn-php-by-example.blogspot.com.es/2013/01/working-with-apple-push-notification.html). – Eran

+0

Я попробовал это, он дал мне недействительные токены, которые являются маркерами разработки, но все еще не получены всеми устройствами. Скажите, пожалуйста, если у нас есть другие недопустимые токены, кроме разработки, например, если некоторые пользователи удалили приложение, это не значит, что это устройство будет недействительным? пожалуйста, объясни – Fatima

0

Убедитесь, что вы закрываете и повторно открываете соединение сокета с APNS, если $ result является ложным. Число сообщений $ i может быть ошибочным, если вы этого не сделаете.

Напоминание: Apple закрывает соединение сокета, если вы пытаетесь отправить нажатие на недействительный или истекший токен.

Смежные вопросы