Saltare al contenuto

Inizia

  1. Installa il pacchetto

    Finestra del terminale
    bun add @capgo/capacitor-incoming-call-kit
  2. Sincronizza progetti nativi

    Finestra del terminale
    bunx cap sync
  3. Scegli la fonte del tuo anello Decidi se l'evento di chiamata in arrivo proviene dal tuo backend, un SDK come Twilio o Stream, o da un percorso di push nativo come FCM o PushKit.

Questo plugin gestisce solo la presentazione delle chiamate in arrivo native. La tua app gestisce ancora il trasporto, l'autenticazione e la sessione media effettiva.

Il modello di produzione comune è:

  1. Il tuo backend o il chiamante SDK emette un evento di squillo.
  2. La tua app chiama showIncomingCall().
  3. Il plugin presenta l'interfaccia utente di chiamata in arrivo nativa.
  4. callAccepted insegna alla tua app di unirsi alla stanza o alla sessione VoIP effettiva.
  5. callDeclined, callEndedo callTimedOut insegna alla tua app di pulire lo stato remoto.
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: identificatore stabile riutilizzato in seguito con endCall()
  • timeoutMs: timeout di risposta non garantito
  • extra: JSON arbitrario riprodotto indietro nel payload del listener
  • android.channelId e android.channelName: regolazione del canale di notifica Android
  • android.showFullScreen: richiede l'attività di chiamata in arrivo a schermo intero Android
  • ios.handleTypescegli generic, phoneNumber, emailAddress o
const { calls } = await IncomingCallKit.getActiveCalls();
await IncomingCallKit.endCall({
callId: 'call-42',
reason: 'remote-ended',
});
await IncomingCallKit.endAllCalls({
reason: 'session-reset',
});
  • incomingCallDisplayed: è stata visualizzata con successo l'interfaccia utente nativa
  • callAccepted: l'utente ha accettato dalla UI nativa
  • callDeclined: l'utente ha rifiutato prima di unirsi
  • callEnded: è stata interrotta la chiamata tracciata dall'applicazione o dalla piattaforma
  • callTimedOut: la chiamata è rimasta senza risposta fino a timeoutMs

Ogni evento contiene il payload normalizzato e il vostro originale call __CAPGO_KEEP_0__ extra oggetto.