# Понимание идентификаторов устройств в Pushwoosh

Существует два способа идентификации конкретного устройства, зарегистрированного в Pushwoosh, — аппаратный ID (HWID) и push-токен.

## HWID

HWID (или Hardware ID) — это ключевой идентификатор, присваиваемый устройству Pushwoosh SDK.

#### Android HWID

Для устройств Android HWID — это случайный набор букв и цифр, генерируемый первым приложением с установленным Pushwoosh SDK на устройстве. Позже он передается другим приложениям, содержащим Pushwoosh SDK, так что в результате все такие приложения будут иметь один и тот же HWID.

Однако, если пользователь удалит все приложения с Pushwoosh SDK, а затем переустановит некоторые из них, новый HWID будет сгенерирован заново.

Пример Android HWID: `5dcaed99-e1e0-44dc-bde2-b96188b99e9e`

#### iOS HWID

Для устройств iOS в качестве HWID устройства используется IDFV ([Identifier for Vendor](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor)). Он не изменится, пока на устройстве установлено хотя бы одно приложение от того же поставщика.

Пример iOS HWID (только в верхнем регистре!): `CBAF8ED1-17FB-49A3-73BD-DC79B63AEF93`

## Push-токен

Push-токен (токен устройства) — это уникальный ключ для комбинации приложения и устройства, выдаваемый шлюзами push-уведомлений Apple или Google. Он позволяет шлюзам и поставщикам push-уведомлений маршрутизировать сообщения и обеспечивать доставку уведомления уникальной комбинации приложения и устройства, для которой оно предназначено.

#### Push-токен iOS

Push-токены устройств iOS представляют собой строки из 64 шестнадцатеричных символов. Пример push-токена iOS: `03df25c845d460bcdad7802d2vf6fc1dfde97283bf75cc993eb6dca835ea2e2f`

<Aside type="caution">
Убедитесь, что push-токены iOS, которые вы используете при таргетинге на конкретные устройства в ваших API-запросах, указаны в **нижнем регистре**.
</Aside>

#### Push-токен Android

Push-токены устройств Android могут отличаться по длине (обычно менее 255 символов) и, как правило, начинаются с APA91b…; однако они также могут иметь префикс, разделенный двоеточием. Пример push-токена Android: `APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq`

<Aside type="caution">
Использование «сырых» токенов устройств для таргетинга на конкретные устройства — не самый надежный способ, поскольку push-токены FCM имеют тенденцию время от времени меняться, и трудно сказать, как часто это происходит.
</Aside>

## Сбор логов, HWID и push-токена с устройства

### iOS

Во-первых, если у вас есть доступ к исходному коду вашего приложения, убедитесь, что `Pushwoosh_LOG_LEVEL` в вашем приложении установлен на `VERBOSE`. Для этого проверьте строковый ключ `Pushwoosh_LOG_LEVEL` в вашем файле `Info.plist`. Если его нет, перейдите к следующему шагу. Вот возможные значения для этого ключа:

*   `NONE` - Нет логов от SDK
*   `ERROR` - Отображать только ошибки в консоли
*   `WARNING` - Также отображать предупреждения
*   `INFO` - Добавлять информационные сообщения
*   `DEBUG` - Добавлять отладочную информацию
*   `VERBOSE` - Все логи от SDK

Значение ключа `VERBOSE` позволяет Pushwoosh SDK отображать важную информацию о действиях по регистрации.

2. Далее подключите устройство к вашему Mac и запустите Xcode. Перейдите в Window->Device and Simulators.

<img src="/pushwoosh-knowledge-hub-device-identifiers-1.webp" alt="Окно Xcode Devices and Simulators, показывающее подключенное iOS-устройство"/>

3. В открывшемся окне выберите подключенное устройство и нажмите на треугольник в левом нижнем углу, чтобы увидеть консоль устройства:

<img src="/pushwoosh-knowledge-hub-device-identifiers-2.webp" alt="Вид консоли устройства Xcode, показывающий логи устройства с выделенной кнопкой-треугольником"/>

Начиная с версии Xcode 9.3, процесс получения лога консоли устройства немного изменился. Все, что вам нужно сделать, это перейти в Launchpad и запустить приложение "Console". Выберите ваше устройство в левой боковой панели. Вот и все!

<img src="/pushwoosh-knowledge-hub-device-identifiers-3.webp" alt="Приложение Console в macOS, показывающее выбранное в левой боковой панели подключенное iOS-устройство с отображаемыми логами устройства"/>

4. Затем запустите ваше приложение на устройстве и дождитесь диалогового окна. Разрешите push-уведомления для вашего приложения.

5. После этих шагов выделите весь лог устройства из окна консоли и скопируйте его в любой текстовый редактор.

API-запрос Pushwoosh [`/registerDevice`](/ru/developer/api-reference/device-api/) — это то, что вы ищете:

<img src="/pushwoosh-knowledge-hub-device-identifiers-4.webp" alt="Лог консоли устройства, показывающий API-запрос registerDevice с видимыми параметрами hwid и push token"/>

Если устройство зарегистрировано правильно, этот запрос должен содержать следующие параметры, включая значения "hwid" и "push token":

```txt title="Пример"
x
| Pushwoosh request:
| Url: https://D868A-C13C1.api.pushwoosh.com/json/1.3/registerDevice
| Payload: {"request":{"gateway":"production","jailbroken":0,"app_version":"1.9","application":"D868A-C13C1","sounds":["bubble.wav"],"device_type":1,"userId":"1457691684303547","language":"en","hwid":"FBCA07FE-05EE-4770-B4BA-AB6737BC1A98","package":"com.pushwoosh.pushon","timezone":"25200","push_token":"ae784019d1b8c8e38a1ea06f0800c17a4fa986d6e2d346fc79373e92439ff8f7","os_version":"11.2.2","v":"5.5.1","device_model":"iPhone7,1"}}
| Status: "200 no error"
| Response: {"status_code":200,"status_message":"OK","response":{"iosCategories":[{"categoryId":0,"buttons":[{"id":"33389","label":"test","type":"0","startApplication":0},{"id":"1233","label":"ajhdkj","type":"1","startApplication":0}]}]}}
x
```

Также должно присутствовать уведомление с push-токеном вашего устройства:

```
<Notice>: [PW] [I] -[PWPushNotificationsManagerCommon] Registered for push notifications: ae784019d1b8c8e38a1ea06f0800c17a4fa986d6e2d346fc79373e92439ff8f7
```

### Android

1. Если у вас есть доступ к исходному коду приложения, убедитесь, что уровень логирования Pushwoosh установлен на `NOISE`. Для этого добавьте метаданные `com.pushwoosh.log_level` со значением `NOISE` в `AndroidManifest.xml`.

2. Затем запустите Android Studio на вашем Mac/PC и перейдите в Tools -> Android -> Android Device Monitor.

<img src="/pushwoosh-knowledge-hub-device-identifiers-5.webp" alt="Окно Android Device Monitor в Android Studio, показывающее подключенное Android-устройство"/>

3. Подключите ваше устройство к Mac/PC и запустите приложение. Подождите около 30 секунд, выделите весь лог устройства из окна консоли и скопируйте его в любой текстовый редактор.

<img src="/pushwoosh-knowledge-hub-device-identifiers-6.webp" alt="Окно консоли Android Device Monitor, показывающее логи устройства с видимым запросом registerDevice"/>

Обратите внимание, что в последних версиях Android Studio вы также можете использовать инструмент Logcat для получения лога консоли устройства. Запустите Android Studio и перейдите в View -> Tool Windows -> Logcat:

<img src="/pushwoosh-knowledge-hub-device-identifiers-7.webp" alt="Интерфейс Android Studio, показывающий окно инструмента Logcat, доступное из меню View"/>

После этого вы можете найти лог устройства в окне Logcat:

<img src="/pushwoosh-knowledge-hub-device-identifiers-8.webp" alt="Окно Logcat в Android Studio, отображающее логи устройства с видимым API-запросом registerDevice"/>

Вот пример ниже, как выглядит API-запрос Pushwoosh /registerDevice в логе консоли устройства:

<img src="/pushwoosh-knowledge-hub-device-identifiers-9.webp" alt="Лог консоли Android-устройства, показывающий API-запрос registerDevice с выделенными параметрами hwid и push token"/>

Найдите значения параметров "hwid" и "push token" в запросе:

```txt title="Пример"
[RequestManager]
x
| Pushwoosh request:
| Url: https://D868A-C13C1.api.pushwoosh.com/json/1.3/registerDevice
| Payload: {"request":{"application":"D868A-C13C1","hwid":"fc79efabee7649ec","v":"5.5.2","device_type":3,"userId":"fc79efabee7649ec","device_name":"Phone","language":"en","timezone":25200,"android_package":"com.pushwoosh.pushon","jailbroken":0,"device_model":"Sony F8332","os_version":"8.0.0","idfa":"d43ad490-4e6a-48a8-b8b9-f20b76fbf07b","app_version":"1.5","push_token":"dwMAeCRabUE:APA91bGSk8SqCSycxfltrWCV9KtXGo48-8qvNKfzHn758PW7lLXSi_Wd7y3gqw-lbexsjLwsaXStpELTJUAQVZ3ybNqAUmfw-we-62rTjpNbvBa4oPYTwaPCr3s4M05xNv8jGau-MeA_","sounds":"[]"}}
| Response: {"status_code":200,"status_message":"OK","response":null}
x
[RequestManager] registerDevice response success
```

Push-токен включен в уведомление о регистрации устройства:

```
I/Pushwoosh(12733): [DeviceRegistrar] Registered for pushes: dwMAeCRabUE:APA91bGSk8SqCSycxfltrWCV9KtXGo48-8qvNKfzHn758PW7lLXSi_Wd7y3gqw-lbexsjLwsaXStpELTJUAQVZ3ybNqAUmfw-we-62rTjpNbvBa4oPYTwaPCr3s4M05xNv8jGau-MeA_
03-30 14:45:10.539: D/PushOn(12733): Registered for push notifications
```

### Chrome (десктоп)

1. Перейдите на ваш сайт.

2. Щелкните правой кнопкой мыши в любом месте страницы и нажмите "Inspect".

<img src="/pushwoosh-knowledge-hub-device-identifiers-10.webp" alt="Инструменты разработчика браузера Chrome открыты с видимым пунктом контекстного меню Inspect Element"/>

3. В открывшемся окне перейдите на вкладку "Application".

4. Затем в левой боковой панели выберите IndexedDB -> Pushwoosh\_SDK\_Store -> keyValue. Здесь найдите параметры HWID и push token.

<img src="/pushwoosh-knowledge-hub-device-identifiers-11.webp" alt="Вкладка Application в инструментах разработчика Chrome, показывающая IndexedDB с Pushwoosh SDK Store и keyValue, содержащим HWID и push-токен"/>

### Chrome (мобильный)

1. Подключите ваше мобильное устройство к компьютеру.

2. Перейдите по адресу chrome://inspect/#devices в вашем десктопном Chrome.

3. Откройте ваш сайт в мобильном Chrome.

4. Как только сайт откроется в вашем мобильном Chrome, вы увидите соответствующую страницу на странице десктопного Chrome. Пожалуйста, посмотрите на скриншот ниже:

<img src="/pushwoosh-knowledge-hub-device-identifiers-12.webp" alt="Страница удаленной отладки Chrome, показывающая подключенное мобильное устройство с выделенной кнопкой Inspect"/>

5. Нажмите кнопку "Inspect", выделенную на скриншоте выше.

6. В вашем десктопном Chrome появится следующее окно. Там, на вкладке "Application", откройте IndexedDB -> PUSHWOOSH\_SDK\_STORE. После этого нажмите keyValue и откройте раздел API\_PARAMS:

<img src="/pushwoosh-knowledge-hub-device-identifiers-13.webp" alt="Вкладка Application в инструментах разработчика Chrome, показывающая IndexedDB PUSHWOOSH SDK STORE с разделом API_PARAMS, содержащим hwid и push-токен"/>

В разделе API\_PARAMS вы найдете параметры "hwid" и "push token" с их значениями.

### Safari

1. Перейдите на ваш сайт.
2. Щелкните правой кнопкой мыши в любом месте страницы и выберите Inspect Element.
3. Перейдите на вкладку Storage -> Indexed Databases -> PUSHWOOSH\_SDK\_STORE -> keyValue.
4. Разверните API\_PARAMS и найдите здесь значения "hwid" и "push token".

<img src="/pushwoosh-knowledge-hub-device-identifiers-14.webp" alt="Вкладка Storage в инструментах разработчика Safari, показывающая Indexed Databases с PUSHWOOSH SDK STORE keyValue, содержащим API_PARAMS с hwid и push-токеном"/>