# Capacitor SDK: Руководство по базовой интеграции

В этом разделе содержится информация о том, как интегрировать Pushwoosh Capacitor SDK в ваше приложение.

## Предварительные требования

Для интеграции Pushwoosh Capacitor SDK в ваше приложение вам понадобится следующее:

<Aside type="note" title="Требования">
 - [Аккаунт Pushwoosh](https://sso.pushwoosh.com/login).
 - [Проект Pushwoosh](/ru/product/first-steps/start-with-your-project/create-your-project), настроенный в вашем аккаунте.
 - **Для интеграции с iOS:**
    - Платформа iOS, настроенная для отправки push-уведомлений. Мы рекомендуем использовать [конфигурацию на основе токенов аутентификации](/ru/developer/first-steps/connect-messaging-services/ios-configuration/ios-token-based-configuration/) как самый простой подход.
    - Установите Gateway на `Sandbox` для отправки пушей в симулятор.
 - **Для интеграции с Android:**
    - [Настроенная платформа Android](/ru/developer/first-steps/connect-messaging-services/android-configuration/android-firebase-configuration)
    - Файл `google-services.json` и `package name` из вашего проекта Firebase.
    - Проект Firebase, подключенный к вашему Android-приложению. При необходимости следуйте [руководству по настройке Firebase](https://firebase.google.com/docs/android/setup#manually_add_firebase).
 - Ваш `Pushwoosh Application Code` и [Pushwoosh Device API Token](/ru/developer/api-reference/api-access-token/#device-api-token) из Панели управления Pushwoosh для вашего приложения.
</Aside>

## Шаги интеграции

### 1. Добавьте зависимость Pushwoosh Capacitor SDK

Добавьте зависимость Pushwoosh Capacitor SDK в ваш проект:

```bash
npm install pushwoosh-capacitor-plugin
```

Синхронизируйте конфигурацию Capacitor:
```bash
npx cap sync
```

### 2. Инициализация Capacitor SDK

В вашем основном `JavaScript` файле импортируйте и инициализируйте Pushwoosh SDK:

```javascript title="index.js"
import { Pushwoosh } from 'pushwoosh-capacitor-plugin';

// Инициализация SDK
Pushwoosh.onDeviceReady({
    appid: "__YOUR_APP_CODE__"
});

// Регистрация для получения push-уведомлений
Pushwoosh.registerDevice()
    .then(result => {
        console.log("Push token:", result.pushToken);
        // Обработка успешной регистрации
    })
    .catch(error => {
        console.error("Failed to register device:", error);
        // Обработка ошибки регистрации
    });
```

Где:
- `__YOUR_APP_CODE__` — это код приложения из Панели управления Pushwoosh.


### 3. Нативная настройка для iOS

#### 3.1 Capabilities

Чтобы включить Push-уведомления в вашем проекте, необходимо добавить определенные capabilities (возможности).

В разделе Signing & Capabilities добавьте следующие capabilities:
- `Push Notifications`
- `Background Modes`. После добавления этой capability, отметьте флажок `Remote notifications`.

Если вы планируете использовать Time Sensitive Notifications (iOS 15+), также добавьте capability `Time Sensitive Notifications`.

#### 3.2 Info.plist

В вашем файле `Runner/Info.plist` установите для ключа `__PUSHWOOSH_DEVICE_API_TOKEN__` значение [Pushwoosh Device API Token](/ru/developer/api-reference/api-access-token/#device-api-token):
```xml title="info.plist"
<key>Pushwoosh_API_TOKEN</key>
<string>__PUSHWOOSH_DEVICE_API_TOKEN__</string>
```

#### 3.3 Отслеживание доставки сообщений

Вы должны добавить таргет Notification Service Extension в ваш проект. Это необходимо для точного отслеживания доставки и использования таких функций, как Rich Media на iOS.

Следуйте [шагам из руководства по нативной интеграции](/ru/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#4-message-delivery-tracking), чтобы добавить таргет расширения и необходимый код Pushwoosh в него.

### 4. Нативная настройка для Android

#### 4.1 Установка зависимостей

Убедитесь, что необходимые зависимости и плагины добавлены в ваши скрипты Gradle:

Добавьте плагин Google Services Gradle в зависимости вашего `build.gradle` на уровне проекта:

```groovy title="android/build.gradle"
buildscript {
  dependencies {
    classpath 'com.google.gms:google-services:4.3.15'
  }
}
```

Примените плагин в файле `build.gradle` на уровне приложения:

```groovy title="app/build.gradle"
apply plugin: 'com.google.gms.google-services'
```

#### 4.2 Добавьте конфигурационный файл Firebase

Поместите файл `google-services.json` в папку `android/app` в директории вашего проекта.

#### 4.3 Добавьте метаданные Pushwoosh

В вашем `main/AndroidManifest.xml` добавьте [Pushwoosh Device API Token](/ru/developer/api-reference/api-access-token/#device-api-token) внутрь тега `<application>`:

```xml title="AndroidManifest.xml"
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />
```

> **Важно:** Убедитесь, что токену предоставлен доступ к нужному приложению в вашей Панели управления Pushwoosh. [Узнать больше](/ru/developer/api-reference/api-access-token/#edit-token)

### 5. Запустите проект

1. Соберите и запустите проект.
2. Перейдите в Панель управления Pushwoosh и [отправьте push-уведомление](/ru/product/messaging-channels/push-notifications/send-push-notifications/one-time-push).
3. Вы должны увидеть уведомление в приложении.

## Расширенная интеграция

На этом этапе вы уже интегрировали SDK и можете отправлять и получать push-уведомления. Теперь давайте рассмотрим основную функциональность.

### Слушатели событий push-уведомлений

В Pushwoosh Capacitor SDK есть два callback-метода для обработки push-уведомлений:

- `pushReceivedCallback` срабатывает при получении push-уведомления
- `pushOpenedCallback` срабатывает, когда пользователь открывает уведомление

Вам следует настроить эти колбэки сразу после инициализации SDK:

```javascript title="index.js"
import { Pushwoosh } from 'pushwoosh-capacitor-plugin';

// Настройка колбэка получения пуша
await Pushwoosh.pushReceivedCallback((notification, err) => {
    if (err) {
        console.error("Failed to process received notification:", err);
    } else {
        console.log("Push received:", JSON.stringify(notification));
        // Обработка полученного уведомления
    }
});

// Настройка колбэка открытия пуша
await Pushwoosh.pushOpenedCallback((notification, err) => {
    if (err) {
        console.error("Failed to process opened notification:", err);
    } else {
        console.log("Push opened:", JSON.stringify(notification));
        // Обработка открытого уведомления
    }
});
```

### Конфигурация пользователя

Фокусируясь на поведении и предпочтениях отдельных пользователей, вы можете доставлять персонализированный контент, что приводит к повышению удовлетворенности и лояльности пользователей.

```javascript
import { Pushwoosh } from 'pushwoosh-capacitor-plugin';

class Registration {
  async afterUserLogin(user) {

    // Установка User ID
    Pushwoosh.setUserId(user.getId);
    
    // Установка дополнительной информации о пользователе в качестве тегов для Pushwoosh
    await Pushwoosh.setTags({
      "age": user.getAge(),
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }
}
```

### Теги

Теги — это пары «ключ-значение», присваиваемые пользователям или устройствам, которые позволяют сегментировать аудиторию на основе таких атрибутов, как предпочтения или поведение, для целевых рассылок.

```javascript
import { Pushwoosh } from 'pushwoosh-capacitor-plugin';

class UpdateUser {
 async afterUserUpdateProfile(user) {

    // Установка списка избранных категорий
    await Pushwoosh.setTags({
      "favorite_categories": user.getFavoriteCategoriesList()
    });
    
    // Установка платежной информации
    await Pushwoosh.setTags({
      "is_subscribed": user.isSubscribed(),
      "payment_status": user.getPaymentStatus(),
      "billing_address": user.getBillingAddress()
    });
  }
}
```

### События

События — это определенные действия или происшествия пользователя в приложении, которые можно отслеживать для анализа поведения и запуска соответствующих сообщений или действий.

```javascript
import { Pushwoosh } from 'pushwoosh-capacitor-plugin';

class Registration {

  // Отслеживание события входа
  afterUserLogin(user) {
    Pushwoosh.postEvent("login", {
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }

  // Отслеживание события покупки
  afterUserPurchase(product) {
    Pushwoosh.postEvent("purchase", {
      "product_id": product.getId(),
      "product_name": product.getName(),
      "price": product.getPrice(),
      "quantity": product.getQuantity()
    });
  }
}
```

## Устранение неполадок

Если у вас возникнут какие-либо проблемы в процессе интеграции, обратитесь к разделу [поддержки и сообщества](/ru/developer/pushwoosh-sdk/support-and-community).