# VoIP-звонки на Android

Pushwoosh поддерживает уведомления о звонках в стиле VoIP для Android с помощью модуля `pushwoosh-calls`. Это позволяет использовать нативный пользовательский интерфейс звонков и управление жизненным циклом с помощью стека Telecom Android.


## 1. Добавьте модуль `pushwoosh-calls`

Убедитесь, что вы включили зависимость `pushwoosh-calls` в ваш проект.

**Gradle:**

```groovy
dependencies {
    implementation 'com.pushwoosh:pushwoosh-calls:<latest-version>'
}
```

Замените `<latest-version>` текущей версией из [Maven Central](https://mvnrepository.com/artifact/com.pushwoosh/pushwoosh-calls).


## 2. Запросите разрешения для звонков

Запросите необходимые разрешения во время выполнения с помощью вспомогательной функции:

```java
import com.pushwoosh.calls.PushwooshCallSettings;

PushwooshCallSettings.requestCallPermissions();
```

<Aside type="note" icon="information">

Это обрабатывает запрос разрешений, таких как `READ_PHONE_NUMBERS`, необходимых для корректной обработки звонков.

</Aside>


## 3. Реализуйте `CallEventListener` и зарегистрируйте его в манифесте

Для обработки входящих звонков и событий реализуйте интерфейс `CallEventListener` в вашем приложении.

#### Пример на Java

```java
public class DemoCallEventListener implements CallEventListener {

    @Override
    public void onAnswer(@NonNull PushwooshVoIPMessage voIPMessage, int videoState) {
        // implement this method to navigate to your in-call UI 
        Intent intent = new Intent(context, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    @Override
    public void onReject(@NonNull PushwooshVoIPMessage voIPMessage) {
        // override this method to handle dismissed calls 
    }

    @Override
    public void onDisconnect(@NonNull PushwooshVoIPMessage voIPMessage) {
        // override this method to handle disconnected calls 
    }

    @Override
    public void onCreateIncomingConnection(@Nullable Bundle payload) {
        // this is the earliest point when call notification payload is accessible in your app,
        // use it to prepare your app UI for user interactions with call notifications
    }

    @Override
    public void onCallAdded(@NonNull PushwooshVoIPMessage voIPMessage) {
        // extension method of InCallService, provides customization options for paired Wearable devices
    }

    @Override
    public void onCallRemoved(@NonNull PushwooshVoIPMessage voIPMessage) {
        // extension method of InCallService, provides customization options for paired Wearable devices
    }
}
```

#### AndroidManifest.xml

Объявите класс вашего слушателя с помощью тега `<meta-data>`:

```xml
<meta-data
    android:name="com.pushwoosh.CALL_EVENT_LISTENER"
    android:value="com.pushwoosh.demoapp.DemoCallEventListener" />
```


## 4. Настройте параметры звонков (необязательно)

Используйте `PushwooshCallSettings` для тонкой настройки поведения звонков, звуков и параметров отображения.

#### Пример использования

```kotlin
import com.pushwoosh.calls.PushwooshCallSettings

PushwooshCallSettings.setPhoneAccount("com.pushwoosh.voip")
PushwooshCallSettings.setPhoneAccountHandle("PushwooshCallHandle")
PushwooshCallSettings.setIncomingCallChannelName("Incoming Calls")
PushwooshCallSettings.setOngoingCallChannelName("Ongoing Calls")
PushwooshCallSettings.setCallSound("custom_ringtone.mp3")
```


## Связанные ссылки

- [Обзор Pushwoosh Android SDK](/ru/developer/pushwoosh-sdk/android-sdk/)
- [Исходный код плагина Pushwoosh Call](https://github.com/Pushwoosh/pushwoosh-android-sdk)
- [TelecomManager (документация Android)](https://developer.android.com/reference/android/telecom/TelecomManager)