Zum Inhalt springen

Anleitung

  1. Installieren Sie das Paket

    Terminal-Fenster
    bun add @capgo/capacitor-incoming-call-kit
  2. Synchronisieren Sie native Projekte

    Terminal-Fenster
    bunx cap sync
  3. Wählen Sie Ihre Ringquelle Beschließen Sie, ob das eingehende Anrufereignis von Ihrem Backend, einem SDK wie Twilio oder Stream, oder einem nativen Push-Path wie FCM oder PushKit stammt.

Diese Erweiterung besitzt nur die native Anrufform. Ihre App besitzt noch immer den Transport, die Authentifizierung und die tatsächliche Medien-Sitzung.

Die gemeinsame Produktionsmuster ist:

  1. Ihr Backend oder Ihr Aufruf-SDK sendet ein Ringereignis.
  2. Ihre App ruft showIncomingCall().
  3. Die Erweiterung präsentiert die native Anrufform.
  4. callAccepted Ihre App wird gebeten, dem tatsächlichen Raum oder der VoIP-Sitzung beizutreten.
  5. callDeclined, callEndedoder callTimedOut Erzählt Ihrem App, dass sie sich von Remote-Zustand befreien soll.
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: stabiler Identifier, der später wieder verwendet wird endCall()
  • timeoutMs: bestmögliche Antwort, wenn keine Antwort gegeben wird
  • extra: beliebige JSON-Daten werden im Listener-Payload wiederholt
  • android.channelId und android.channelName: Einstellung für Android-Notification-Kanäle
  • android.showFullScreen: Anfrage zum Android-Full-Screen-Eingehenden-Anruf-Aktivität
  • ios.handleType: wählen generic, phoneNumber, oder emailAddress für CallKit
const { calls } = await IncomingCallKit.getActiveCalls();
await IncomingCallKit.endCall({
callId: 'call-42',
reason: 'remote-ended',
});
await IncomingCallKit.endAllCalls({
reason: 'session-reset',
});
  • incomingCallDisplayed: Die native Benutzeroberfläche wurde erfolgreich angezeigt
  • callAccepted: Der Benutzer hat aus der native Benutzeroberfläche zugestimmt
  • callDeclined: Der Benutzer hat vor dem Beitritt abgelehnt
  • callEnded: Ihr App oder die Plattform beendete den verfolgten Anruf
  • callTimedOut: Die Anrufbeantwortung blieb unbeantwortet bis timeoutMs

Jeder Ereignis trägt das normalisierte call Payload und Ihr ursprüngliches extra Objekt.

  • Lesen Sie den iOS-Leitfaden bevor Sie CallKit in einen PushKit- oder APNs-Flow einbinden.
  • Lesen Sie den Android-Leitfaden bevor Sie sich auf volle Bildschirm-Intents auf Android 14 und später verlassen.
  • Web wird nicht unterstützt.