# Android 에서의 VoIP 통화

Pushwoosh 는 `pushwoosh-calls` 모듈을 사용하여 Android 용 VoIP 스타일 통화 알림을 지원합니다. 이를 통해 Android 의 텔레콤 스택을 사용하여 네이티브 통화 UI 및 수명 주기 관리가 가능합니다.

## 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();
```

> 이는 적절한 통화 처리에 필요한 `READ_PHONE_NUMBERS` 와 같은 권한 요청을 처리합니다.

## 3. `CallEventListener` 구현 및 Manifest 에 등록

수신 통화 및 이벤트를 처리하려면 앱에서 `CallEventListener` 인터페이스를 구현합니다.

#### Java 예시

```java
public class DemoCallEventListener implements CallEventListener {

    @Override
    public void onAnswer(@NonNull PushwooshVoIPMessage voIPMessage, int videoState) {
        // 이 메서드를 구현하여 통화 중 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
    public void onDisconnect(@NonNull PushwooshVoIPMessage voIPMessage) {
        // 이 메서드를 재정의하여 연결이 끊긴 통화를 처리합니다
    }

    @Override
    public void onCreateIncomingConnection(@Nullable Bundle payload) {
        // 이는 통화 알림 페이로드가 앱에서 액세스할 수 있는 가장 빠른 시점입니다.
        // 이를 사용하여 통화 알림과의 사용자 상호 작용을 위해 앱 UI 를 준비합니다.
    }

    @Override
    public void onCallAdded(@NonNull PushwooshVoIPMessage voIPMessage) {
        // InCallService 의 확장 메서드로, 페어링된 웨어러블 기기에 대한 사용자 지정 옵션을 제공합니다
    }

    @Override
    public void onCallRemoved(@NonNull PushwooshVoIPMessage voIPMessage) {
        // InCallService 의 확장 메서드로, 페어링된 웨어러블 기기에 대한 사용자 지정 옵션을 제공합니다
    }
}
```

#### 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 개요](/ko/developer/pushwoosh-sdk/android-sdk/)
- [Pushwoosh Call Plugin Source](https://github.com/Pushwoosh/pushwoosh-android-sdk)
- [TelecomManager (Android Docs)](https://developer.android.com/reference/android/telecom/TelecomManager)