Проблема с push-уведомлениями iOS. Иногда работает, а иногда не работает. - PullRequest
1 голос
/ 08 апреля 2019

Я проверил свой код, запустив URL-адрес, он работает нормально, пока я пытаюсь запустить браузер.но он не работает с кодом curl, и я не могу найти решение.curl_error ничего не дает.Я читал, что «устройства не всегда будут подключаться к одному и тому же общему IP-адресу для уведомлений», но как это можно решить?

Вот код скручивания

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, BASE_URL .'api-v2/admin_notification_cron.php');
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
$result = curl_exec($ch );
curl_close( $ch );

И admin_notification_cron.php файл извлекает данные из базы данных и вызывает функцию sendNotification после извлечения 20 данных из базы данных каждые 1 минуту

Ниже приведен код функции sendNotification:

    function sendToIphone($deviceToken, $data)
    {

    $data['push_image'] = (($data['push_image']!='')?PHOTO_URL.'push/'.$data['push_image']:'');   

    $passphrase = '';
    $ctx = stream_context_create();

    stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns-dev-cert.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', '');
    $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

    $type = ($data['type']!='')?$data['type']:'0';

    if ($data['message']=='add_job' || $data['message']=='process') {
        //$sound = 'newrequest.mp3';
        $sound = 'default';
    } else {
        $sound = 'default';
    }


    $body['aps'] = array(
        'alert' => stripslashes($final_message),
        'title' => APP_TITLE,
        'job_id' => $data['job_id'],
        'user_id' => $data['user_id'],
        'created'=> $data['created'],
        'type'=> $type,
        'sound' => $sound,
        "mutable-content"=> 1,
        "category"=> "rich-apns",
        "image-url"=> $data['push_image'],
        'badge' => intval($badge)

    );
    $body['att'] = array('id' => $data['push_image']);

    $payload = json_encode($body);

    $msg = chr(0) . pack('n', 32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack('n', strlen($payload)) . $payload;
    $result = fwrite($fp, $msg, strlen($msg));
    if (!$result) {
        return 0;
    } else {
        return 1;
    }
}

Заранее спасибо

1 Ответ

1 голос
/ 08 апреля 2019

Для реализации APNS.

  • необходимо выполнить несколько правил большого пальца. После доставки соединение должно быть закрыто notification.

  • Выпридется ждать, пока ваш предыдущий notification не будет доставлен.

Если вы выполняете весь код в цикле, то некоторое уведомление доставлено, а остальные уведомления будут отброшены.

Чтобы исправить вашу проблему, вы поставили некоторую задержку между двумя notification срабатыванием или срабатыванием notification после предыдущей notification доставки.

ИЛИ

Вы можете использовать сторонние инструменты уведомлений

FCM

OneSignal

Он будет управляться автоматически.

...