24  /  103

Токены

Просмотров: 3725 (Статистика ведётся с 06.02.2017)

Токен - это идентификатор устройства, который регистрируется в сервисах Apple и Google для отправки уведомлений.


Получение токена и отправка на сервер

Для того, чтобы пользователь получал уведомления на свой смартфон, нужно узнать токен его устройства.

Получить токен, а затем отправить методом GET или POST на php-скрипт можно через javascript-код, который нужно разместить на стартовой странице своего приложения:

app.exec("getToken", {
	callback:function(token)
	{
	var platform = (window.platform == "ios"? "APPLE": "GOOGLE");
	
	var config =
	{
		url: "myurl.php" ,
		method: "POST",
		data: {
			device_name: (typeof device.name == "undefined" ? device.model : device.name),
			uuid: device.uuid,
			device_token: token,
			app_id: “MyAPPid”,
			device_type: platform,
			sessid: BX.bitrix_sessid()
		}
	};

	BX.ajax(config);
}

});

Обратите внимание, в JS-скрипте используется объект device, существующий только в рамках мобильной платформы BitrixMobile. Данный объект используется для получения информации об устройстве.


Сохранение токена

В примере выше мы получили токен устройства и отправили его на php-скрипт myurl.php. Теперь его нужно сохранить для дальнейшего использования:

<?php

use Bitrix\Main\Web\Json;

require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

$result = Array("status" => "failed");

if (!\Bitrix\Main\Loader::includeModule("pull"))
{
	$result["error"] = "Module 'pull' is not installed";
}
else
{
	/**
	 * @var $DB CAllDatabase
	 * @var $USER CALLUser
	 */
	$data = null;
	$userId = $USER->GetID();
	if (!$userId)
	{
		$userId = 0;
	}

	if ($_REQUEST["device_token"])
	{
		$res = array("status" => "failed", "error" => "some unknown error");
		$data = array(
			"DEVICE_TOKEN" => $_REQUEST["device_token"],
			"DEVICE_ID" => $_REQUEST["uuid"],
			"DEVICE_TYPE" => $_REQUEST["device_type"],
			"APP_ID" => $_REQUEST["app_id"],
			"DATE_AUTH" => ConvertTimeStamp(getmicrotime(), "FULL"),
			"USER_ID" => $userId
		);

		$dbres = CPullPush::GetList(Array(), Array("DEVICE_ID" => $data["DEVICE_ID"]));
		$arToken = $dbres->Fetch();
		$status = "failed";

		if ($arToken["ID"])
		{
			CPullPush::Update($arToken["ID"], $data);
			$status = "updated";
		}
		else
		{
			if ($res = CPullPush::Add($data))
			{
				$status = "registered";
			}
		}


		$result = array(
			"token_status" => $status
		);
	}
}
$result["data"] = $data != null ? $data : array();

header("Content-Type: application/x-javascript");
echo Json::encode($result);
die();

Обратите внимание, что токен сохраняется с идентификатором приложения. При отправке уведомлений на устройство с этим токеном нужно использовать именно этот идентификатор приложения. Как видно из примера, каждый токен обязательно привязывается к пользователю сайта. Если стоит задача отправлять уведомления анонимным пользователям, то можно использовать «фиктивный» идентификатор, либо использовать идентификатор специально созданного пользователя или идентификаторы нескольких специально созданных пользователей для группировки токенов.


Обновление токена

Токены устройств со временем могут меняться или истекать.

Например, при обновлении операционной системы на устройстве токен может поменяться. Поэтому рекомендуется периодически удалять неактивные токены и обновлять существующие. Иными словами, при каждом запуске приложения следует повторять операцию обновления.



1
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии