Пуш уведомления что же это и с чем его едят?
Пользователь, заходя на сайт, вытягивает (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