Konfigurera ett-till-en-samtal och push-meddelanden i användargränssnittsbiblioteket
Användargränssnittsbiblioteket tillhandahåller out-of-the-box-stöd för att göra en-till-en-anrop med hjälp av Azure Communication Services-deltagaridentifierare. För att stödja ett-till-en-samtal tillhandahåller användargränssnittsbiblioteket inkommande samtalsaviseringar. Du kan också använda Azure Communication Services som en Azure Event Grid-händelsekälla för anrop.
I den här artikeln får du lära dig hur du gör en-till-en-anrop på rätt sätt med hjälp av användargränssnittsbiblioteket i ditt program.
Viktigt!
Den här funktionen i Azure Communication Services är för närvarande i förhandsversion.
Förhandsversions-API:er och SDK:er tillhandahålls utan ett serviceavtal. Vi rekommenderar att du inte använder dem för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds, eller så kan de ha begränsade funktioner.
Mer information finns i Kompletterande användningsvillkor för Förhandsversioner av Microsoft Azure.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- En distribuerad Communication Services-resurs. Skapa en Communication Services-resurs.
- En användaråtkomsttoken för att aktivera anropsklienten. Hämta en användaråtkomsttoken.
- Valfritt: Slutförande av snabbstarten för att komma igång med kompositerna för gränssnittsbiblioteket.
Konfigurera funktionerna
Mer information finns i Android UI-biblioteket med öppen källkod och exempelprogramkoden.
Konfigurera behörigheter för push-meddelanden
För att konfigurera push-meddelanden behöver du ett Firebase-konto med Firebase Cloud Messaging (FCM) aktiverat. Din FCM-tjänst måste vara ansluten till en Azure Notification Hubs-instans. Mer information finns i Meddelanden om Kommunikationstjänster. Du måste också använda Android Studio version 3.6 eller senare för att skapa ditt program.
För att Android-programmet ska kunna ta emot meddelanden från FCM behöver det en uppsättning behörigheter. AndroidManifest.xml
Lägg till följande uppsättning behörigheter efter taggen <manifest ...>
eller </application>
i filen.
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
Registrera dig för push-meddelanden
För att registrera sig för push-meddelanden måste programmet anropa registerPushNotification()
en CallComposite
instans med en enhetsregistreringstoken.
Om du vill hämta enhetsregistreringstoken lägger du till Firebase SDK i programmodulens build.gradle
instans. Om du vill ta emot meddelanden från Firebase integrerar du Azure Notification Hubs genom att följa anvisningarna i Communication Services-meddelanden.
För att undvika aktuella begränsningar kan du hoppa över registerPushNotification
genom att använda Azure Event Grid för push-meddelanden. Mer information finns i Anslut anropa interna push-meddelanden med Azure Event Grid.
val deviceRegistrationToken = "" // From Firebase
callComposite.registerPushNotification(
applicationContext,
CallCompositePushNotificationOptions(
CommunicationTokenCredential...,
deviceRegistrationToken,
displayName
)
)
Hantera push-meddelanden
Om du vill ta emot push-meddelanden för inkommande samtal anropar du handlePushNotification
en CallComposite
instans med en nyttolast.
Om du vill hämta nyttolasten från FCM börjar du med att skapa en ny tjänst (File>New>Service>Service) som utökar FirebaseMessagingService
Firebase SDK-klassen och åsidosätter onMessageReceived
metoden. Den här metoden är den händelsehanterare som anropas när FCM levererar push-meddelandet till programmet.
// On Firebase onMessageReceived
val pushNotificationInfo = CallCompositePushNotificationInfo(remoteMessage.data)
// If pushNotificationInfo.eventType is an incoming call
val remoteOptions = CallCompositeRemoteOptions(
pushNotificationInfo,
communicationTokenCredential,
displayName
)
callComposite.handlePushNotification(
applicationContext,
remoteOptions
)
Registrera dig för inkommande samtalsaviseringar
Om du vill ta emot inkommande samtalsaviseringar efter handlePushNotification
prenumererar du på IncomingCallEvent
och IncomingCallEndEvent
.
private var incomingCallEvent: IncomingCallEvent? = null
private var incomingCallEndEvent: IncomingCallEndEvent? = null
class IncomingCallEndEvent : CallCompositeEventHandler<CallCompositeIncomingCallEndEvent> {
override fun handle(eventArgs: CallCompositeIncomingCallEndEvent?) {
// Display incoming call UI to accept/decline a call
}
}
class IncomingCallEndEvent : CallCompositeEventHandler<CallCompositeIncomingCallEndEvent> {
override fun handle(eventArgs: CallCompositeIncomingCallEndEvent?) {
// Call-ended event when a call is declined or not accepted
}
}
// Event subscription
incomingCallEvent = IncomingCallEvent()
callComposite.addOnIncomingCallEventHandler(incomingCallEvent)
incomingCallEndEvent = IncomingCallEndEvent()
callComposite.addOnIncomingCallEndEventHandler(incomingCallEndEvent)
// Event unsubscribe
callComposite.removeOnIncomingCallEventHandler(incomingCallEvent)
callComposite.removeOnIncomingCallEndEventHandler(incomingCallEndEvent)
Hantera anrop
Om du vill acceptera anrop ringer du ett anrop till acceptIncomingCall
. Om du vill avvisa anrop ringer du ett anrop till declineIncomingCall
.
// Accept call
callComposite.acceptIncomingCall(applicationContext, localOptions)
// Decline call
callComposite.declineIncomingCall()
Ring upp andra deltagare
Om du vill starta samtal med andra deltagare skapar CallCompositeStartCallOptions
du med deltagarnas rå-ID från CommunicationIdentity
och launch
.
val participant = [] // Participant raw IDs
val startCallOption = CallCompositeStartCallOptions(participant)
val remoteOptions = CallCompositeRemoteOptions(startCallOption, communicationTokenCredential, displayName)
callComposite.launch(context, remoteOptions, localOptions)
Integrera TelecomManager-exempel
Om du vill integrera TelecomManager använder du exemplen i biblioteket med öppen källkod. Använd CallComposite
API:er för hold
, resume
, mute
och unmute
. Skapa CallComposite
med CallCompositeTelecomIntegration.APPLICATION_IMPLEMENTED_TELECOM_MANAGER
som ska användas TelecomManager
i ett program.
Mer information finns i iOS-användargränssnittsbiblioteket med öppen källkod och exempelprogramkoden.
Konfigurera push-meddelanden
Ett mobilt push-meddelande är popup-meddelandet som du får i den mobila enheten. För samtal fokuserar den här artikeln på voIP-push-meddelanden (Voice over Internet Protocol).
I följande avsnitt beskrivs hur du registrerar dig för, hanterar och avregistrerar push-meddelanden. Innan du påbörjar dessa uppgifter måste du slutföra följande krav:
- I Xcode går du till Signering och funktioner. Lägg till en funktion genom att välja + Kapacitet och välj sedan Push-meddelanden.
- Lägg till ytterligare en funktion genom att välja + Kapacitet och välj sedan Bakgrundslägen.
- Under Bakgrundslägen markerar du kryssrutorna Röst över IP och Fjärrmeddelanden .
Registrera dig för push-meddelanden
För att registrera sig för push-meddelanden måste programmet anropa registerPushNotification()
en CallComposite
instans med en enhetsregistreringstoken.
För att undvika aktuella begränsningar kan du hoppa över registerPushNotification
genom att använda Azure Event Grid för push-meddelanden. Mer information finns i Anslut anropa interna push-meddelanden med Azure Event Grid.
let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
let displayName = "DISPLAY_NAME"
let notificationOptions = CallCompositePushNotificationOptions(
deviceToken: deviceToken,
credential: credential,
displayName: displayName,
callKitOptions: callKitOptions) // CallKit options
try await callComposite.registerPushNotification(notificationOptions: notificationOptions)
Hantera push-meddelanden
Om du vill ta emot push-meddelanden för inkommande samtal anropar handlePushNotification()
du en CallComposite
instans med en ordlistenyttolast.
När du använder handlePushNotification()
får du ett CallKit-meddelande för att acceptera eller avvisa samtal.
// App is in the background
let pushNotificationInfo = CallCompositePushNotificationInfo(pushNotificationInfo: dictionaryPayload)
let cxHandle = CXHandle(type: .generic, value: "\(pushNotificationInfo.callId)")
let cxProvider = CallCompositeCallKitOption.getDefaultCXProviderConfiguration()
let remoteInfo = CallCompositeCallKitRemoteInfo(displayName: pushNotificationInfo.fromDisplayName,
cxHandle: cxHandle)
let callKitOptions = CallCompositeCallKitOption(cxProvideConfig: cxProvider,
isCallHoldSupported: true,
remoteInfo: remoteInfo)
CallComposite.reportIncomingCall(callKitOptions: callKitOptions,
callNotification: pushNotificationInfo) { result in
if case .success() = result {
DispatchQueue.global().async {
// Handle push notification
// You don't need to wait for a Communication Services token to handle the push because
// Communication Services commonly receives a callback function to get the token
}
}
}
// App is in the foreground
let pushNotificationInfo = CallCompositePushNotificationInfo(pushNotificationInfo: dictionaryPayload)
let displayName = "display name"
let remoteOptions = RemoteOptions(for: pushNotificationInfo,
credential: credential,
displayName: displayName,
callKitOptions: callKitOptions)
try await callComposite.handlePushNotification(remoteOptions: remoteOptions)
Registrera dig för inkommande samtalsaviseringar
Om du vill ta emot inkommande samtalsaviseringar efter handlePushNotification
prenumererar du på IncomingCallEvent
och IncomingCallEndEvent
.
let onIncomingCall: (CallCompositeIncomingCallInfo) -> Void = { [] _ in
// Incoming call
}
let onIncomingCallEnded: (CallCompositeIncomingCallEndedInfo) -> Void = { [] _ in
// Incoming call ended
}
callComposite.events.onIncomingCall = onIncomingCall
callComposite.events.onIncomingCallEnded = onIncomingCallEnded
Ring upp andra deltagare
Om du vill starta samtal med andra deltagare skapar CallCompositeStartCallOptions
du med deltagarnas rå-ID från CommunicationIdentity
och launch
.
let startCallOptions = CallCompositeStartCallOptions(participants: <list of participant IDs>)
let remoteOptions = RemoteOptions(for: startCallOptions,
credential: credential,
displayName: "DISPLAY_NAME",
callKitOptions: callKitOptions)
callComposite.launch(remoteOptions: remoteOptions,
localOptions: localOptions)