Erste Schritte
Kopiere einen Setup-Prompt mit den Installationsschritten und dem vollständigen Markdown-Guide für dieses Plugin.
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.
Installation
Abschnitt mit dem Titel „Installation“Du kannst unser KI-gestütztes Setup nutzen, um das Plugin zu installieren. Füge die Capgo Skills mit dem folgenden Befehl deinem KI-Tool hinzu:
bunx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsNutze dann diesen Prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-incoming-call-kit` plugin in my project.Wenn du ein manuelles Setup bevorzugst, installiere das Plugin mit den folgenden Befehlen und befolge die plattformspezifischen Anweisungen unten:
-
Paket installieren
Terminalfenster bun add @capgo/capacitor-incoming-call-kit -
Native Projekte synchronisieren
Terminalfenster bunx cap sync -
Wähle deine Klingelquelle Entscheide, ob das incoming-call Event von deinem Backend, einem SDK wie Twilio oder Stream oder einem nativen Push-Pfad wie FCM oder PushKit kommt.
Quickstart
Abschnitt „Quick start“import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
const result = await IncomingCallKit.showIncomingCall({ callId: 'call-id-123', callerName: 'caller',});console.log(result);Beispiel: endCall
Abschnitt mit dem Titel „Beispiel: endCall“import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
const result = await IncomingCallKit.endCall({ callId: 'call-id-123' });console.log(result);Beispiel: endAllCalls
Abschnitt mit dem Titel „Beispiel: endAllCalls“import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
const result = await IncomingCallKit.endAllCalls();console.log(result);Häufige Stolperfallen
Abschnitt „Häufige Fallstricke“- Berechtigungen: aufrufen
checkPermissions()dannrequestPermissions()bei Bedarf. - Listener: Handles beim Unmounten von Screens entfernen.
- Single Source of Truth: Vertrauen
src/definitions.tsim GitHub Repo.
So funktioniert die Integration
Abschnitt mit dem Titel „So funktioniert die Integration“Dieses Plugin ist nur für die native Anzeige eingehender Anrufe zuständig. Dein App verwaltet weiterhin den Transport, die Authentifizierung und die eigentliche Media-Session.
Das gängige Produktionsmuster ist:
- Dein Backend oder der Aufruf von SDK sendet ein Ring-Event.
- Deine App ruft
showIncomingCall(). - Das Plugin zeigt das native Incoming-Call-UI.
callAcceptedweist deine App an, dem eigentlichen Raum oder der VoIP-Session beizutreten.callDeclined,callEnded, odercallTimedOutweist deine App an, den Remote-State aufzuräumen.
Minimale Integration
Abschnitt mit dem Titel „Minimale Integration“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', },});Wichtige Optionen
Abschnitt mit dem Titel „Wichtige Optionen“callId: stable identifier reused later withendCall()timeoutMs: Best-Effort-Timeout für unbeantwortete Anrufeextra: Beliebiger JSON-Inhalt wird in Listener-Payloads zurückgegebenandroid.channelIdundandroid.channelName: Optimierung der Android Notification Channelsandroid.showFullScreen: fordert die Android Full-Screen Incoming-Call Activity anios.handleType: Wählegeneric,phoneNumber, oderemailAddressfür CallKit
Verwaltung aktiver Anrufe
Abschnitt mit dem Titel „Verwaltung aktiver Anrufe“const { calls } = await IncomingCallKit.getActiveCalls();
await IncomingCallKit.endCall({ callId: 'call-42', reason: 'remote-ended',});
await IncomingCallKit.endAllCalls({ reason: 'session-reset',});Event-Modell
Abschnitt: „Event-Modell“incomingCallDisplayed: Native UI wurde erfolgreich angezeigtcallAccepted: Benutzer hat über die native UI zugestimmtcallDeclined: Benutzer hat vor dem Beitritt abgelehntcallEnded: Deine App oder die Plattform hat den getrackten Call beendetcallTimedOut: Der Call blieb unbeantwortet bistimeoutMs
Jedes Event enthält das normalisierte call Payload sowie dein ursprüngliches extra Objekt.
Plattform-Hinweise
Abschnitt mit dem Titel „Plattform-Hinweise“- Lies die iOS-Guide bevor CallKit in einen PushKit- oder APNs-Flow eingebunden wird.
- Lies die Android-Guide bevor man auf Android 14 und neuer auf Full-Screen-Intents setzt.
- Web wird nicht unterstützt.
Weiter geht's nach Getting Started
Abschnitt: „Weiter geht’s mit Getting Started“Wenn du es nutzt Erste Schritte um Dashboard- und API-Operationen zu planen, verbinde es mit @capgo/capacitor-incoming-call-kit verwenden für die native Funktion bei der Nutzung von @capgo/capacitor-incoming-call-kit, API Übersicht für Details zur Implementierung im API Overview, Einführung für die Implementierungsdetails in der Einleitung, API Schlüssel für das Implementierungsdetail in API Keys und Geräte für das Implementierungsdetail in Devices.