Пуш уведомления для сайта на Codeigniter

Пуш уведомления что же это и с чем его едят?

Пользователь, заходя на сайт, вытягивает (pull) с него данные. Это удобно и безопасно, но с развитием интернет ресурсов, появилась необходимость оперативно доставлять информацию пользователям не дожидаясь пока те сами сделают запрос. Так и появилась технология принудительной доставки (push) данных с сервера клиенту.

А если короче — то: Пуш уведомления для сайта позволяют быть на связи с вашими посетителями.

На некоторых блогах внедрение пуш уведомлений увеличило повторные посещения в несколько раз. Да и просто, это хорошая альтернатива email рассылке.

Получение пуш уведомлений происходит в фоновом режиме. Не нужно открывать браузер, заходить на сайт. Сообщение появится в области трея в правом углу экрана.

Итак мы используем Codeigniter и сервис OneSignal.

1- Создайте новую учетную запись Onesignal, создайте новое приложение, а затем активируйте платформы, на которые вы хотите применить push-уведомление для этого.

2- У вас есть два способа интеграции (HTTPS, HTTP), я буду следовать настройке Web Push SDK (HTTP), потому что это общий вариант для многих веб-сайтов, но рекомендуется использовать HTTPS. , В нашем примере мы будем использовать субдомен Onesignal HTTPS бесплатно.

3- Выберите способ, который вы предпочитаете для запуска и настройки сообщений, в моем примере я выбрал способ Slidedown

3- Создайте контроллер Quotes.php двумя методами: Subscribe (), чтобы обрабатывать подписки на ваш сайт и send_message (), чтобы обрабатывать отправку уведомлений через Onesignal API подписчикам.

<?php

class Quotes extends CI_Controller
{

    function __construct()
    {
        parent::__construct();

    }


    // this function will redirect to book service page
    function index()
    {
        $this->subscribe();
    }

    // this function to load service book page
    function subscribe()
    {
        $this->load->view('content/site_subscribe');
    }

    /**
     * Create New Notification
     *
     * Creates adjacency list based on item (id or slug) and shows leafs related only to current item
     *
     * @param int $user_id Current user id
     * @param string $title Current title
     *
     * @return string $response
     */
    function send_message(){
        $message = $this->input->post("message");
        $user_id = $this->input->post("user_id");
        $content = array(
            "en" => "$message"
        );

        $fields = array(
            'app_id' => "ccb2c4c9-8621-4208-b57a-e82dccc316ef",
            'filters' => array(array("field" => "tag", "key" => "user_id", "relation" => "=", "value" => "$user_id")),
            'contents' => $content
        );

        $fields = json_encode($fields);
        print("\nJSON sent:\n");
        print($fields);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8',
            'Authorization: Basic NGM0Mzk5YjMtNTQzMi00OTkwLTkyY2EtMTI1MzNhODBmZjgz'));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        $response = curl_exec($ch);
        curl_close($ch);
       return $response;
    }

}

 

4- Создайте файл site_subscribe.php в каталоге представлений, мы можем обрабатывать операции подписки и отмены подписки с помощью API-интерфейсов Onesignal, когда вы нажимаете ссылку на подписку, данные вашего браузера будут отправлять в Onesignal API

<div class="starter-template">
   <h1>OneSignal  Subscription</h1>
   <p class="lead">User Subscribe Page</p>
</div>
<div class="contact-form">
   <p class="notice error"><?= $this->session->flashdata('error_msg') ?></p><br/>
     <form id="ServiceRequest" action="<?= base_url() ?>quotes/send_message" method='post'>
        <div class="form-group">
           <label class="control-label">Message Body:</label>
           <input type="text" name="message" class="form-control" placeholder="Add Your Message" value="" >
        </div>
        <div class="form-group">
           <label class="control-label">Message Body:</label>
           <input type="text" name="user_id" class="form-control" readonly value="4444" >
        </div>
        <div id='submit_button'>
            <input class="btn btn-success" type="submit" name="submit" value="Send data"/>
        </div>
    </form>
</div>

        <script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script>
        <script>
            var OneSignal = window.OneSignal || [];
            OneSignal.push(["init", {
                appId: "ccb2c4c9-8621-4208-b57a-e82dccc316ef",
                subdomainName: 'ourtutorial',
                autoRegister: true,
                promptOptions: {
                    /* These prompt options values configure both the HTTP prompt and the HTTP popup. */
                    /* actionMessage limited to 90 characters */
                    actionMessage: "We'd like to show you notifications for the latest news.",
                    /* acceptButtonText limited to 15 characters */
                    acceptButtonText: "ALLOW",
                    /* cancelButtonText limited to 15 characters */
                    cancelButtonText: "NO THANKS"
                }
            }]);
        </script>
        <script>
            function subscribe() {
                // OneSignal.push(["registerForPushNotifications"]);
                OneSignal.push(["registerForPushNotifications"]);
                event.preventDefault();
            }
            function unsubscribe(){
                OneSignal.setSubscription(true);
            }

            var OneSignal = OneSignal || [];
            OneSignal.push(function() {
                /* These examples are all valid */
                // Occurs when the user's subscription changes to a new value.
                OneSignal.on('subscriptionChange', function (isSubscribed) {
                    console.log("The user's subscription state is now:", isSubscribed);
                    OneSignal.sendTag("user_id","4444", function(tagsSent)
                    {
                        // Callback called when tags have finished sending
                        console.log("Tags have finished sending!");
                    });
                });

                var isPushSupported = OneSignal.isPushNotificationsSupported();
                if (isPushSupported)
                {
                    // Push notifications are supported
                    OneSignal.isPushNotificationsEnabled().then(function(isEnabled)
                    {
                        if (isEnabled)
                        {
                            console.log("Push notifications are enabled!");

                        } else {
                            OneSignal.showHttpPrompt();
                            console.log("Push notifications are not enabled yet.");
                        }
                    });

                } else {
                    console.log("Push notifications are not supported.");
                }
            });

        </script>

5- Получите ваши app_id и RESTful_id из настроек приложения и замените их в файле site_subscribe.php в send_message ()
Также измените параметр subdomainName на то, что вы выбрали на платформе Onesignal.

Ну и финиш. Demo + фалы на github

 

 

 

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
× iOs app

To install this Web App in your iPhone/iPad press iOs sourse and then Add to Home Screen.