я должен оставаться подключенным к серверу Apple Push Notification для отправки уведомления - PullRequest
0 голосов
/ 07 октября 2018

Это может быть дубликат вопроса.Однако я не видел правильного ответа во время поиска в Google.Вот вопрос.

У меня есть приложение чата.И хотите использовать push-уведомление для уведомления пользователя при получении нового сообщения.

Я где-то читал, что не должен открывать и закрывать соединение для каждого полученного сообщения и отправлять push-уведомление пользователю.Я должен открыть соединение и оставаться на связи с сервером Apple все время.когда есть сообщение, отправьте уведомление пользователю.

Если это так, есть ли какой-либо пример для того, чтобы оставаться на связи все время, и когда полученное сообщение отправляется на уведомление пользователя.

Я нашел в каком-то блоге.

function send_mobile_notification_request($user_mobile_info, $payload_info)
{
    //Default result
    $result = -1;
    //Change depending on where to send notifications
    $pem_preference = "production";
    $user_device_type = $user_mobile_info['user_device_type'];
    $user_device_key = $user_mobile_info['user_mobile_token'];
    if ($user_device_type == "iOS") {
        $apns_url = NULL;
        $apns_cert = NULL;
        //Apple server listening port
        $apns_port = 2195;
        if ($pem_preference == "production") {
            $apns_url = 'gateway.push.apple.com';
            $apns_cert = __DIR__.'/cert-prod.pem';
        }
        //develop .pem
        else {
            $apns_url = 'gateway.sandbox.push.apple.com';
            $apns_cert = __DIR__.'/cert-dev.pem';
        }
        $stream_context = stream_context_create();
        stream_context_set_option($stream_context, 'ssl', 'local_cert', $apns_cert);
        $apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port, $error, $error_string, 2, STREAM_CLIENT_CONNECT,                                   $stream_context);
        $apns_message = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $user_device_key)) . chr(0) . chr(strlen($payload_info)) .                               $payload_info;
        if ($apns) {
            $result = fwrite($apns, $apns_message);
        }
        @socket_close($apns);
        @fclose($apns);
    }
    return $result > 0;
}

function create_payload_json($message) {
    //Badge icon to show at users ios app icon after receiving notification
    $badge = "0";
    $sound = 'default';
    $payload = array();
    $payload['aps'] = array('alert' => $message, 'badge' => intval($badge),'sound' => $sound);
    return json_encode($payload);
}

Код источника: http://www.assafelovic.com Этот код открывает соединение и отправляет уведомление, а затем закрывает соединение.Когда я получаю 1000 сообщений в день, слишком много запросов на открытие / закрытие соединения.Есть ли мнение по этой теме?

Спасибо и извините, если дублировал вопрос ...

...