Приветствую. Последнее время, участились вопросы по функционалу получения 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);
}
};
|
Собственно, это и все.