Написан функционал для отправки push-уведомлений для IOS. С локального сервера уведомления приходят, а с сайта нет. Все добавленные выводы указывают на то что уведомление отправлено, но не доходит до устройства. В чем может быть причина?
function replace_unicode_escape_sequence($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
function send_ios_push($message) {
$sound = 'default';
$development = true;
$payload = array();
$payload["aps"] = array('alert' => $message["body"], 'sound' => $sound);
$payload = json_encode($payload);
$payload = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $payload);
$apns_url = NULL;
$apns_cert = NULL;
$apns_port = 2195;
if($development) {
$apns_url = 'gateway.sandbox.push.apple.com';
$apns_cert = 'apns-dev.pem';
} else {
$apns_url = 'gateway.push.apple.com';
$apns_cert = 'apns-dev-prod.pem';
}
if (file_exists($apns_cert))
echo("cert file exists\n");
else
echo("cert file not exists\n");;
$success = 0;
$stream_context = stream_context_create();
stream_context_set_option($stream_context, 'ssl', 'local_cert', $apns_cert);
stream_context_set_option($stream_context, 'ssl', 'passphrase', 'pass2');
$apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port, $error, $error_string, 2, STREAM_CLIENT_CONNECT, $stream_context);
$device_tokens =array(
"ae7c44342eceef645f3baf9f7e1eb2daf383f9341535c8dd5ef7276a29068e8d",
"8d509c28896865f8640f328f30f15721ed40e41593e40a51e77b91c5b6db17d6"
);
foreach($device_tokens as $device) {
$apns_message = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $devices)) . chr(0) . chr(strlen($payload)) . $payload;
if (fwrite($apns, $apns_message)) {
$success++;
echo("sent\n");
} else {
echo("failed \n");
}
}
echo("fetch done\n");
socket_close($apns);
fclose($apns);
return $success;
}
send_ios_push('Hello world');
Проблему решил, оказывается я сам неправильную кодировку указал в функции replace_unicode_escape_sequence и поэтому сообщения на кириллице не доходили. Для устранения проблемы удалил третий аргумент из функции mb_convert_encoding.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При работе через Bluetooth получаю ответ от оборудования по сокету в формате массива byte[] buffer
Требуется проверять файл xml на наличие определенных значений свойстваДумал сделать через antrun plugin и shell скрипт