Приветствую. Последнее время, участились вопросы по функционалу получения push-уведомлений в мобильной приложении, поэтому я решил написать данную статью.
Схема работы такова, что чтобы приложение начало получать push-уведомления, оно должно подписаться на них.
За саму подписку у нас будет отвечать отдельный скрипт:
Данный скрипт никак не зависит от устройства, которое вы используете. Собственно похожий скрипт используется и в административном приложении для магазина.Одно но!
это код приложения для разработки. При компиляции вашего приложения, код будет иным.
Пусть путь у него будет: /eshop_app/pull.php
А вот определяющим будет js скрипт, который и будет отправлять запрос подписки приложения.
Данный код вы можете вызывать при любых условиях, по которым нам необходима подписка на push-уведомления.
Собственно, это и все.
Схема работы такова, что чтобы приложение начало получать push-уведомления, оно должно подписаться на них.
За саму подписку у нас будет отвечать отдельный скрипт:
<? define('NO_KEEP_STATISTIC', true); define('NO_AGENT_STATISTIC', true); define('NOT_CHECK_PERMISSIONS', true); require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_before.php'); if(!check_bitrix_sessid()) return; $token = $_REQUEST["device_token"]; $arFields = Array( "USER_ID" => $USER->GetID(), "DEVICE_NAME" => $_REQUEST["device_name"], "DEVICE_TYPE" => $_REQUEST["device_type"], "DEVICE_ID" => $_REQUEST["uuid"], "DEVICE_TOKEN" => $token, "APP_ID" => "BitrixMobile" ); if(!$_REQUEST["device_token"]) break; if(!CModule::IncludeModule("pull")) { $arResult["ERROR"] = GetMessage("MOBILEAPP_PULL_NOT_INSTALLED"); break; } $uuid = $_REQUEST["uuid"]; $data = array( "register_token" => "fail", "token" => $token, "user_id" => $USER->GetID() ); $dbres = CPullPush::GetList(Array(), Array("=DEVICE_ID" => $uuid)); $arToken = $dbres->Fetch(); if($arToken["ID"]) { $res = CPullPush::Update($arToken["ID"], $arFields); if($res) $data["register_token"] = "updated"; } else { $res = CPullPush::Add($arFields); if($res) $data["register_token"] = "created"; } $arResult["DATA"] = $data; if(isset($arResult["ERROR"])) $arResult["RESULT"] = "ERROR"; else $arResult["RESULT"] = "OK"; $arResult = $APPLICATION->ConvertCharsetArray($arResult, SITE_CHARSET, 'utf-8'); die(json_encode($arResult)); ?> |
Данный скрипт никак не зависит от устройства, которое вы используете. Собственно похожий скрипт используется и в административном приложении для магазина.Одно но!
"APP_ID" => "BitrixMobile" |
Пусть путь у него будет: /eshop_app/pull.php
А вот определяющим будет js скрипт, который и будет отправлять запрос подписки приложения.
BX.ready(function(){ DEV.getToken(); }); DEV = { getToken : function () { var _this = this, dt = "APPLE"; if (platform != "ios") dt = "GOOGLE"; var params = { callback: function (token) { var postData = { action: "save_device_token", device_name: device.name, uuid: device.uuid, device_token: token, device_type: dt, sessid: BX.bitrix_sessid() }; BX.ajax({ timeout: 30, method: 'POST', dataType: 'json', url: '/eshop_app/pull.php', data: postData, }); } }; return app.exec("getToken", params); } }; |
Собственно, это и все.