Не приходят push-уведомления на IOS

106
02 сентября 2021, 04:10

Написан функционал для отправки 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');
Answer 1

Проблему решил, оказывается я сам неправильную кодировку указал в функции replace_unicode_escape_sequence и поэтому сообщения на кириллице не доходили. Для устранения проблемы удалил третий аргумент из функции mb_convert_encoding.

READ ALSO
Не получается сортировать по дате используя distinct

Не получается сортировать по дате используя distinct

У меня таблица из ссылокМногие повторяются

242
Преобразование class в массив byte []

Преобразование class в массив byte []

При работе через Bluetooth получаю ответ от оборудования по сокету в формате массива byte[] buffer

207
Проверка файла на наличие определенных строк во время сборки

Проверка файла на наличие определенных строк во время сборки

Требуется проверять файл xml на наличие определенных значений свойстваДумал сделать через antrun plugin и shell скрипт

227
Как корректно сохранить цветной текст в файл?

Как корректно сохранить цветной текст в файл?

Есть методы изменения цвета выделенного текста

203