시작하기
설치 명령어와 이 플러그인의 전체 마크다운 가이드를 복사합니다.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-incoming-call-kit`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/docs/plugins/incoming-call-kit/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
-
패키지를 설치하세요
터미널 창 bun add @capgo/capacitor-incoming-call-kit -
자연스럽게 프로젝트를 Sync
터미널 창 bunx cap sync -
링 소스 선택 SDK에서 오는 incoming-call 이벤트가 백엔드, Twilio 또는 Stream과 같은 SDK 또는 native push path인 FCM 또는 PushKit과 같은 native push path인지 결정합니다.
인터그레이션의 구조
인터그레이션의 구조이 플러그인은 native incoming-call UI만 관리합니다. 앱은 여전히 전송, 인증 및 실제 미디어 세션을 관리합니다.
일반적인 프로덕션 패턴은 다음과 같습니다.
- 백엔드 또는 SDK가 ring 이벤트를.emit합니다.
- 앱은
showIncomingCall(). - 플러그인이 native incoming-call UI를 표시합니다.
callAccepted실제 회의 또는 VoIP 세션에 앱을 참여하도록 앱에게 알려줍니다.callDeclined,callEnded또는callTimedOut앱이 원격 상태를 정리하도록 지시합니다.
최소한의 통합
최소한의 통합import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
await IncomingCallKit.requestPermissions();await IncomingCallKit.requestFullScreenIntentPermission();
await IncomingCallKit.addListener('callAccepted', async ({ call }) => { console.log('Accepted', call.callId, call.extra); // Start or join your real call session here.});
await IncomingCallKit.addListener('callDeclined', ({ call }) => { console.log('Declined', call.callId); // Tell your backend or SDK that the user declined.});
await IncomingCallKit.addListener('callTimedOut', ({ call }) => { console.log('Timed out', call.callId); // Clear ringing state in your backend or SDK.});
await IncomingCallKit.showIncomingCall({ callId: 'call-42', callerName: 'Ada Lovelace', handle: '+39 555 010 020', appName: 'Capgo Phone', hasVideo: true, timeoutMs: 45_000, extra: { roomId: 'room-42', callerUserId: 'user_ada', }, android: { channelId: 'calls', channelName: 'Incoming Calls', showFullScreen: true, }, ios: { handleType: 'phoneNumber', },});중요한 옵션
중요한 옵션callId: stable identifier 재사용endCall()timeoutMs: best-effort unanswered timeoutextra: listener 패킷에 JSON이 반영됩니다.android.channelId그리고android.channelName: Android 알림 채널 조정android.showFullScreen: Android incoming-call 전체 화면 액티비티 요청ios.handleType: 선택generic,phoneNumber, 또는emailAddressCallKit을 위한
활성화된 전화 관리
활성화된 전화 관리const { calls } = await IncomingCallKit.getActiveCalls();
await IncomingCallKit.endCall({ callId: 'call-42', reason: 'remote-ended',});
await IncomingCallKit.endAllCalls({ reason: 'session-reset',});이벤트 모델
이벤트 모델incomingCallDisplayed: 네이티브 UI가 성공적으로 표시되었습니다callAccepted: 사용자가 네이티브 UI에서 수락했습니다callDeclined: 사용자가 참여하기 전에 거절했습니다callEnded: 앱 또는 플랫폼이 추적된 전화 통화를 종료했습니다callTimedOut전화는 답변을 받지 못했습니다.timeoutMs
각 이벤트에는 정규화 된 call 데이터와 원본 extra 객체가 포함되어 있습니다.