# Интеграция с Push-уведомлениями

После запуска приложения, UserID из OneSignal будет автоматически передаваться на страницы сайта при загрузке через COOKIE. Вы можете перехватить этот UserID на стороне сайта и связать его с текущим пользователем.

Используя этот UserID, вы можете отправлять персональные push-уведомления вашим клиентам.

**Пример получения UserID на PHP:**

```bash
if(!isset($_COOKIE['ONESIGNAL_USER_ID'])) {
    $userID = $_COOKIE['ONESIGNAL_USER_ID'];
}

```

<p class="callout info">Стоит учесть что ONESIGNAL\_USER\_ID может появиться не сразу а например через 10-30 секунд после начала использования приложения при самом первом запуске.</p>

[https://documentation.onesignal.com/reference/push-notification](https://documentation.onesignal.com/reference/push-notification)

```php
$fields = array(
        'app_id' => 'ВАШ app_id',
        'include_player_ids' => ["ONESIGNAL_USER_ID"] 
        'contents' =>  ["en" => "My Push"],
        'headings' => ["en" => "Hi!"],
        'data' => [
					'url'=>"https://site.com/my/link"
					],
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.onesignal.com/notifications");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json; charset=utf-8',
        'Authorization: Basic XXXXXXXXX',
    ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_exec($ch);
    curl_close($ch);

```


**Пример получения UserID в JS:**

```javascript
if(window.userId){
  console.log("USER ID", window.userId);
}
```

Аналогично userId может появиться не сразу, поэтому можно использовать функцию попытки получения userId, пока он не станет доступным:

```javascript
function getUserId(callback){

let tryGetUserIdInterval = setInterval(()=>{

  if(window.userId){
  callback(window.userId);
  clearInterval(tryGetUserIdInterval);
  }

},3000);
}

getUserId((userId)=>{

    console.log("userId", userId);
})
```

### Навигация через Push-уведомления

Если вы хотите, чтобы при нажатии на push-уведомление пользователь не только перешел в приложение, но и был направлен на одну из страниц сайта, передайте параметр url в параметре data запроса.

<p class="callout info">Если в приложении только 1 язык для уведомлений, например только русский, то используйте ключ en, так как он является ключом по умолчанию.</p>

**Пример на PHP:**

**⚠️ Следует учесть, что если ссылка будет не с вашего сайта, то она откроется в браузере.**

#### Отправка через теги

Вы можете отправлять push-уведомления не только по <span class="s1">UserID</span>, но и по тегу, который вы установите для пользователя. Это удобно, если вы хотите связать пользователя с его уникальным идентификатором, например <span class="s1">email</span> или <span class="s1">phone</span>.

Например, при авторизации на сайте вы можете установить тег <span class="s1">email</span> или <span class="s1">phone</span> для пользователя, а затем использовать его для отправки push-сообщений через OneSignal API.

**Пример отправки уведомления по тегу (на PHP с использованием curl):**

**[https://documentation.onesignal.com/reference/push-notification](https://documentation.onesignal.com/reference/push-notification)**

```php
$fields = [
    'app_id' => 'ВАШ_APP_ID',
    'filters' => [
        ["field" => "tag", "key" => "email", "relation" => "=", "value" => "user@example.com"]
    ],
    'contents' =>  ["en" => "My Push"],
        'headings' => ["en" => "Hi!"],
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.onesignal.com/notifications");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Basic ВАШ_REST_API_KEY'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

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

echo $response;
```