Lompat ke konten

Mulai

  1. Instal paket

    Jendela terminal
    bun add @capgo/capacitor-incoming-call-kit
  2. Sinkron proyek native

    Jendela terminal
    bunx cap sync
  3. Pilih sumber ringan Anda Putuskan apakah event panggilan masuk datang dari backend Anda, sebuah SDK seperti Twilio atau Stream, atau jalur push asli seperti FCM atau PushKit.

Plugin ini hanya memiliki presentasi panggilan masuk asli. Aplikasi Anda masih memiliki transportasi, autentikasi, dan sesi media yang sebenarnya.

Polanya produksi umum adalah:

  1. Backend atau SDK Anda mengeluarkan event ringan.
  2. Aplikasi Anda memanggil showIncomingCall().
  3. Plugin menampilkan UI panggilan masuk asli.
  4. callAccepted menginformasikan aplikasi Anda untuk bergabung dengan ruang atau sesi VoIP yang sebenarnya.
  5. callDeclined, callEndedatau callTimedOut menginstruksikan aplikasi Anda untuk membersihkan status remote.
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: identifikasi stabil digunakan kembali nanti endCall()
  • timeoutMsWaktu tunggu yang berusaha optimal
  • extra: data JSON acak ditampilkan kembali di payload pendengar
  • android.channelId dan android.channelNamePengaturan saluran notifikasi Android
  • android.showFullScreen: meminta aktivitas panggilan masuk layar penuh Android
  • ios.handleTypePilih generic, phoneNumberatau emailAddress untuk CallKit
const { calls } = await IncomingCallKit.getActiveCalls();
await IncomingCallKit.endCall({
callId: 'call-42',
reason: 'remote-ended',
});
await IncomingCallKit.endAllCalls({
reason: 'session-reset',
});
  • incomingCallDisplayed: tampilan native ditampilkan dengan sukses
  • callAccepted: pengguna menerima dari tampilan native
  • callDeclined: pengguna menolak sebelum bergabung
  • callEnded: aplikasi Anda atau platform mengakhiri panggilan yang dilacak
  • callTimedOut: panggilan tetap tidak dijawab sampai timeoutMs

Setiap event membawa nilai yang telah dinormalisasi call payload dan aslinya extra objek.

Catatan Platform

Catatan Platform
  • Baca Petunjuk iOS Sebelum menghubungkan CallKit ke dalam aliran PushKit atau APNs.
  • Baca Petunjuk Pengguna Android sebelumnya mengandalkan niat layar penuh pada Android 14 dan seterusnya.
  • Web tidak didukung.