2014-07-01 85 views
1

我有一個表像這樣增加證件號碼

|------------|-----------| 
|device_token|badge_count| 
|------------|-----------| 
|123456789 |3   | 
|------------|-----------| 
|987654321 |2   | 
|------------|-----------| 

我有PHP創建兩個數組:

$query = mysql_query("SELECT * FROM push"); 
$deviceToken = array(); 
while($row = mysql_fetch_assoc($query)){ 
    $deviceToken[] = $row['device_token']; 
    $badgeCount[] = $row['badge_count']; 
} 

我然後將其插入這樣的:

foreach($deviceToken as $key=>$value){ 
     echo $badgeCount[$key]; 

     $body['aps'] = array(
      'alert' => $message, 
      'sound' => 'default', 
      'badge' => $badgeCount[$key], 
     ); 

     $payload = json_encode($body); 

     $msg = chr(0) . pack('n', 32) . pack('H*', $value) . pack('n', strlen($payload)) . $payload; 
     $result = fwrite($fp, $msg, strlen($msg)); 

     if (!$result){ 
      die('Message not delivered' . PHP_EOL); 
     } 
} 

這將返回迴音32。但$payload未成功給出正確的「徽章號碼」

並且在推送通知中沒有顯示徽章號碼。如果我用'badge' => 2替換'badge' => $badgeCount[$key],徽章號碼顯示2?

任何想法我做錯了什麼?

+0

我迷路了。預期的和當前的輸出是不正確的? – dan08

+0

我不認爲'$ payload'正在編碼'$ badgeCount [$ key]' – maxisme

+0

你想在每次迭代時追加到'$ body ['aps']'嗎?要做到這一點,你的任務應該是'$ body ['aps'] [] = array(...' – dan08

回答

2

返回關聯數組:

$query = mysql_query("SELECT device_token, badge_count FROM push"); 
$devices = array(); 
while($row = mysql_fetch_assoc($query)){ 
    $devices[] = $row; 
} 

循環遍歷設備:

foreach($devices as $device){ 

     $body['aps'] = array(
      'alert' => $message, 
      'sound' => 'default', 
      'badge' => (int)$device['badge_count'],//very important cast !!! 
     ); 

     $payload = json_encode($body); 

     $msg = chr(0) . pack('n', 32) . pack('H*', $device['device_token']) 
         . pack('n', strlen($payload)) . $payload; 

     $result = fwrite($fp, $msg, strlen($msg)); 

     if (!$result){ 
      die('Message not delivered' . PHP_EOL); 
     } 
} 
+0

公頃可以讓你當我知道完成編輯;) – maxisme

+0

@Maximilian大聲笑IM完成,我只是想包括,以確保它被鑄造爲一個INT – meda

+0

你怎麼看待這個標誌?此外,這似乎並沒有工作不知道爲什麼。沒有得到任何錯誤 – maxisme