Você está fazendo uma consulta e armazenando um recurso de resultado em $result1, em seguida, buscando todas as linhas em um loop que você ecoa e imediatamente tentando buscá-lo novamente. Depois de buscar todos os resultados, você não pode buscá-los novamente. Bem, você pode, usando mysql_data_seek, mas é realmente ineficiente e um desperdício fazê-lo na maioria dos casos. Armazene os resultados pela primeira vez em uma matriz.
$rows = array();
while ($row = mysql_fetch_assoc($result1)) {
$rows[] = $row;
}
Então você pode foreach através desta matriz.
foreach ($rows as $row) {
// Build the binary notification
$msg = chr(0).pack('n', 32).pack('H*', $row['devicetoken']) . pack('n', strlen($payload)) . $payload;
//... etc
}