Hızlı başlangıç: uygulamanıza sesli çağrı ekleme
Uygulamanıza ses ve video çağrısı eklemek için SDK 'Yı çağıran Iletişim hizmetlerini kullanarak Azure Iletişim Hizmetleri ile çalışmaya başlayın.
Önemli
31 Temmuz 2021 ' e kadar JavaScript için SDK 1.1.0 (veya daha yeni) çağıran Azure Iletişim hizmetlerine yükseltin.
Plan B oturum açıklaması Protokolü (SDP) API 'SI kullanım dışıdır. Bu kullanım dışı bırakılmasının Kullanıcı tarafından etkilenmeden kaçınmak için SDK hizmetleri 'ni (veya daha yeni) 31 Temmuz 2021 ' e çağıran Iletişim hizmetlerinizi güncelleştirin. Daha fazla bilgi için bkz. arama Kitaplığı sürüm notları .
Önemli
Azure Iletişim Hizmetleri acil durum çağrılmasını desteklemez
Azure Iletişim Hizmetleri ' giden sesli arama hizmetleri, acil durum hizmetlerine iletişim kurmak için kullanılamaz. Acil durum çağrılarını yerleştirmek için geleneksel telefon hizmetini korumanız gerekir.
Bu hızlı başlangıçta, Windows için SDK 'Yı çağıran Azure Iletişim Hizmetleri 'ni kullanarak bir çağrı başlatmayı öğreneceksiniz.
Örnek Kod
Örnek uygulamayı GitHub'dan indirebilirsiniz.
Önkoşullar
Bu öğreticiyi tamamlayabilmeniz için aşağıdaki önkoşullara sahip olmanız gerekir:
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Evrensel Windows Platformu geliştirme iş yüküyle Visual Studio 2019 ' ü yükler.
- Dağıtılan bir Iletişim Hizmetleri kaynağı. Iletişim Hizmetleri kaynağı oluşturun.
- Azure Iletişim hizmetiniz için bir Kullanıcı erişim belirteci .
Ayarlanıyor
Projeyi oluşturma
Visual Studio, tek sayfalı Evrensel Windows Platformu (UWP) uygulamasını ayarlamak için boş uygulama (evrensel Windows) şablonuyla yeni bir proje oluşturun.
Paketi yükler
Projenize sağ tıklayın ve Manage Nuget Packages yüklemek için öğesine gidin Azure.Communication.Calling .
Erişim izni isteme
Adresine gidin Package.appxmanifest ve öğesine tıklayın Capabilities .
Internet (Client & Server)Internet 'e gelen ve giden erişim kazanmak için işaretleyin. MicrophoneMikrofonun ses akışına erişmek için işaretleyin.
Uygulama çerçevesini ayarlama
Mantığımızı eklemek için temel bir düzen yapılandırmamız gerekir. Bir giden çağrı yerleştirmek için, TextBox Aranan Kullanıcı kimliğini sağlamak üzere bir ile ihtiyacımız var. Ayrıca bir Start Call düğmeye ve bir düğmeye de ihtiyacımız var Hang Up . Projenizi açın MainPage.xaml ve StackPanel düğüme ekleyin Page :
<Page
x:Class="CallingQuickstart.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CallingQuickstart"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<TextBox Text="Who would you like to call?" TextWrapping="Wrap" x:Name="CalleeTextBox" Margin="10,10,10,10"></TextBox>
<Button Content="Start Call" Click="CallButton_ClickAsync" x:Name="CallButton" Margin="10,10,10,10"></Button>
<Button Content="Hang Up" Click="HangupButton_Click" x:Name="HangupButton" Margin="10,10,10,10"></Button>
</StackPanel>
</Page>
Öğesini açın MainPage.xaml.cs ve içeriği aşağıdaki uygulamayla değiştirin:
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Azure.Communication;
using Azure.Communication.Calling;
namespace CallingQuickstart
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.InitCallAgent();
}
private async void InitCallAgent()
{
// Create Call Client and initialize Call Agent
}
private async void CallButton_ClickAsync(object sender, RoutedEventArgs e)
{
// Start call
}
private async void HangupButton_Click(object sender, RoutedEventArgs e)
{
// End the current call
}
CallClient call_client_;
CallAgent call_agent_;
Call call_;
}
}
Nesne modeli
Aşağıdaki sınıflar ve arabirimler, Azure Communication Service 'ın SDK 'yi çağıran bazı önemli özelliklerinden bazılarını işler:
| Ad | Açıklama |
|---|---|
| CallClient | CallClient, çağıran SDK 'ya ana giriş noktasıdır. |
| CallAgent | CallAgent, çağrıları başlatmak ve yönetmek için kullanılır. |
| CommunicationTokenCredential | CommunicationTokenCredential, CallAgent örneğini oluşturmak için belirteç kimlik bilgileri olarak kullanılır. |
| Communicationuserıdentifier | Communicationuserıdentifier, aşağıdakilerin biri olabilecek Kullanıcı kimliğini temsil etmek için kullanılır: Communicationuserıdentifier/Phonenumberıdentifier/CallingApplication. |
İstemcinin kimliğini doğrulama
Bir CallAgent Kullanıcı erişim belirtecine sahip bir örnek başlatın, bu da çağrı yapıp almamızı sağlar.
Aşağıdaki kodda, <USER_ACCESS_TOKEN> bir Kullanıcı erişim belirteci ile değiştirin. Kullanılabilir bir belirteciniz yoksa, Kullanıcı erişim belirteci belgelerine başvurun.
İşlevine aşağıdaki kodu ekleyin InitCallAgent .
CommunicationTokenCredential token_credential = new CommunicationTokenCredential("<USER_ACCESS_TOKEN>");
call_client_ = new CallClient();
CallAgentOptions callAgentOptions = new CallAgentOptions()
{
DisplayName = "<YOUR_DISPLAY_NAME>"
};
call_agent_ = await call_client_.CreateCallAgent(token_credential, callAgentOptions);
Bir çağrı başlatın
CallButton_ClickAsyncOluşturduğumuz ile bir çağrı başlatmak için uygulamasını öğesine ekleyin call_agent .
StartCallOptions startCallOptions = new StartCallOptions();
ICommunicationIdentifier[] callees = new ICommunicationIdentifier[1]
{
new CommunicationUserIdentifier(CalleeTextBox.Text)
};
call_ = await call_agent_.StartCallAsync(callees, startCallOptions);
Çağrıyı Sonlandır
Düğmeye tıklandığında geçerli çağrıyı sonlandırın Hang Up .
await call_.HangUpAsync(new HangUpOptions());
Kodu çalıştırma
Kodu Visual Studio oluşturup çalıştırabilirsiniz. Lütfen desteklediğimiz çözüm platformları için ARM64 x64 ve x86 .
Metin alanına bir kullanıcı KIMLIĞI sağlayarak ve düğmesine tıklayarak giden bir çağrı yapabilirsiniz Start Call . Çağırmak 8:echo123 sizi bir Echo bot ile bağlar, bu, başlamak ve ses cihazlarınızın çalıştığını doğrulamak için harika bir yoldur.
Bu hızlı başlangıçta, JavaScript için SDK 'Yı çağıran Azure Iletişim hizmetlerini kullanarak nasıl çağrı başlayacağınızı öğreneceksiniz.
Örnek kod
Örnek uygulamayı GitHub'dan indirebilirsiniz.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Node.js Etkin LTS ve bakım LTS sürümleri (8.11.1 ve 10.14.1 önerilir).
- Etkin bir Iletişim Hizmetleri kaynağı. Iletişim Hizmetleri kaynağı oluşturun.
- Arama istemcisini başlatmak için bir Kullanıcı erişim belirteci. Kullanıcı erişim belirteçleri oluşturmayı ve yönetmeyiöğrenin.
Ayarlanıyor
Yeni bir Node.js uygulaması oluşturma
Terminal veya komut pencerenizi açın, uygulamanız için yeni bir dizin oluşturun ve bu dizine gidin.
mkdir calling-quickstart && cd calling-quickstart
npm init -yDosya üzerinde varsayılan ayarlarla birpackage.jsoluşturmak için öğesini çalıştırın.
npm init -y
Paketi yükler
npm installJavaScript için SDK 'Yı çağıran Azure Iletişim hizmetlerini yüklemek için komutunu kullanın.
npm install @azure/communication-common --save
npm install @azure/communication-calling@1.1.0 --save
Bu hızlı başlangıç için aşağıdaki WebPack sürümleri önerilir:
"webpack": "^4.42.0",
"webpack-cli": "^3.3.11",
"webpack-dev-server": "^3.10.3"
--saveSeçeneği, kitaplığı dosyadaki package.js bir bağımlılık olarak listeler.
Uygulama çerçevesini ayarlama
Bu hızlı başlangıç, uygulama varlıklarını paketleyip Web Pack kullanır. WebPack, WebPack-CLI ve WebPack-dev-Server NPM paketlerini yüklemek için aşağıdaki komutu çalıştırın ve bunları üzerindepackage.js geliştirme bağımlılıkları olarak listeleyin:
npm install webpack@4.42.0 webpack-cli@3.3.11 webpack-dev-server@3.10.3 --save-dev
Projenizin kök dizininde bir index.html dosyası oluşturun. Bu dosyayı, kullanıcının çağrı yerleştirmesini sağlayacak temel bir düzen yapılandırmak için kullanacağız.
Kod şu şekildedir:
<!DOCTYPE html>
<html>
<head>
<title>Communication Client - Calling Sample</title>
</head>
<body>
<h4>Azure Communication Services</h4>
<h1>Calling Quickstart</h1>
<input
id="token-input"
type="text"
placeholder="User access token"
style="margin-bottom:1em; width: 200px;"
/>
</div>
<button id="token-submit" type="button">
Submit
</button>
<input
id="callee-id-input"
type="text"
placeholder="Who would you like to call?"
style="margin-bottom:1em; width: 200px; display: block;"
/>
<div>
<button id="call-button" type="button" disabled="true">
Start Call
</button>
<button id="hang-up-button" type="button" disabled="true">
Hang Up
</button>
</div>
<script src="./bundle.js"></script>
</body>
</html>
Bu hızlı başlangıç için uygulama mantığını içeren client.js adlı projenizin kök dizininde bir dosya oluşturun. Çağıran istemciyi içeri aktarmak ve iş mantığımızı ekleyebilmemiz için DOM öğelerine başvurular almak için aşağıdaki kodu ekleyin.
import { CallClient, CallAgent } from "@azure/communication-calling";
import { AzureCommunicationTokenCredential } from '@azure/communication-common';
let call;
let callAgent;
let tokenCredential = "";
const userToken = document.getElementById("token-input");
const calleeInput = document.getElementById("callee-id-input");
const submitToken = document.getElementById("token-submit");
const callButton = document.getElementById("call-button");
const hangUpButton = document.getElementById("hang-up-button");
Nesne modeli
Aşağıdaki sınıflar ve arabirimler, Azure Communication Service 'ın SDK 'yi çağıran bazı önemli özelliklerinden bazılarını işler:
| Ad | Açıklama |
|---|---|
| CallClient | CallClient, çağıran SDK 'ya ana giriş noktasıdır. |
| CallAgent | CallAgent, çağrıları başlatmak ve yönetmek için kullanılır. |
| AzureCommunicationTokenCredential | AzureCommunicationTokenCredential sınıfı, CallAgent örneğini oluşturmak için kullanılan CommunicationTokenCredential arabirimini uygular. |
İstemcinin kimliğini doğrulama
Metin alanına kaynağınız için geçerli bir Kullanıcı erişim belirteci giriniz ve ' Gönder ' seçeneğine tıklamanız gerekir. Kullanılabilir bir belirteciniz yoksa, Kullanıcı erişim belirteci belgelerine başvurun. Kullanarak CallClient , CallAgent bir örneği başlatın, bu, CommunicationTokenCredential çağrısı yapıp almamızı sağlar.
Aşağıdaki kodu client.js ekleyin:
submitToken.addEventListener("click", async () => {
const callClient = new CallClient();
const userTokenCredential = userToken.value;
try {
tokenCredential = new AzureCommunicationTokenCredential(userTokenCredential);
callAgent = await callClient.createCallAgent(tokenCredential);
callButton.disabled = false;
submitToken.disabled = true;
} catch(error) {
window.alert("Please submit a valid token!");
}
})
Bir çağrı başlatın
Tıklandığında bir çağrı başlatmak için bir olay işleyicisi ekleyin callButton :
callButton.addEventListener("click", () => {
// start a call
const userToCall = calleeInput.value;
// To call an ACS communication user, use {communicationUserId: 'ACS_USER_ID'}.
// To call echobot, use {id: '8:echo123'}.
call = callAgent.startCall(
[{ communicationUserId: userToCall }],
{}
);
// toggle button states
hangUpButton.disabled = false;
callButton.disabled = true;
});
Çağrıyı Sonlandır
Tıklandığında geçerli çağrıyı sonlandırmak için bir olay dinleyicisi ekleyin hangUpButton :
hangUpButton.addEventListener("click", () => {
// end the current call
call.hangUp({ forEveryone: true });
// toggle button states
hangUpButton.disabled = true;
callButton.disabled = false;
submitToken.disabled = false;
});
forEveryoneÖzelliği tüm çağrı katılımcıları için çağrıyı sonlandırır.
Kodu çalıştırma
webpack-dev-serverUygulamanızı derlemek ve çalıştırmak için kullanın. ' Deki uygulama konağını yerel bir Web sunucusuna paketetmek için aşağıdaki komutu çalıştırın:
npx webpack-dev-server --entry ./client.js --output bundle.js --debug --devtool inline-source-map
Tarayıcınızı açın ve adresine gidin http://localhost:8080/ . Şunları görmeniz gerekir:
İlgili metin alanlarında geçerli bir Kullanıcı erişim belirteci ve Kullanıcı KIMLIĞI sağlayıp çağrıya başla düğmesine tıklayarak gıden bir VoIP çağrısı yapabilirsiniz.
Çağırmak 8:echo123 sizi bir Echo bot ile bağlar, bu, başlamak ve ses cihazlarınızın çalıştığını doğrulamak için harika bir yoldur. {id: '8:echo123'}Yankı bot 'ı çağırmak Için CallAgent. startCall () API 'sine geçiş yapın.
ACS iletişim kullanıcısını çağırmak için {communicationUserId: 'ACS_USER_ID'} API 'ye geçirin CallAgent.startCall() .
Bu hızlı başlangıçta, Android için SDK 'Yı çağıran Azure Iletişim Hizmetleri 'ni kullanarak bir çağrı başlatmayı öğreneceksiniz.
Örnek Kod
Örnek uygulamayı GitHub'dan indirebilirsiniz.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Android uygulamanızı oluşturmak için Android Studio.
- Dağıtılan bir Iletişim Hizmetleri kaynağı. Iletişim Hizmetleri kaynağı oluşturun.
- Azure Iletişim hizmetiniz için bir Kullanıcı erişim belirteci .
Ayarlanıyor
Boş bir etkinliğe sahip bir Android uygulaması oluşturma
Android Studio yeni bir Android Studio projesi Başlat ' ı seçin.
"Telefon ve Tablet" altında "boş etkinlik" proje şablonu ' nu seçin.
En düşük SDK "API 26: Android 8,0 (Oreo)" veya üzerini seçin.
Paketi yükler
Proje seviyesi Build. Gradle ' i bulun ve mavenCentral() altındaki depolar listesine eklediğinizden emin olun. buildscript``allprojects
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Ardından, modül düzeyi derlemeniz. Gradle, bağımlılıklar ve Android bölümlerine aşağıdaki satırları ekleyin
android {
...
packagingOptions {
pickFirst 'META-INF/*'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0-beta.8'
...
}
Uygulama bildirimine izinler ekleme
Çağrı yapmak için gerekli izinleri istemek amacıyla, önce uygulama bildiriminde ( app/src/main/AndroidManifest.xml ) bildirilmelidir. Dosyanın içeriğini aşağıdaki kodla değiştirin:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.contoso.acsquickstart">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--Our Calling SDK depends on the Apache HTTP SDK.
When targeting Android SDK 28+, this library needs to be explicitly referenced.
See https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p-->
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Uygulamanın yerleşimini ayarlama
İki giriş gereklidir: aranan KIMLIĞI için bir metin girişi ve çağrıyı yerleştirmek için bir düğme. Bunlar tasarımcı aracılığıyla veya Düzen XML 'sini düzenleyerek eklenebilir. KIMLIĞI ve metin girişi olan bir düğme oluşturun call_button callee_id . () Öğesine gidin app/src/main/res/layout/activity_main.xml ve dosyanın içeriğini aşağıdakiler ile değiştirin:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/call_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="Call"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<EditText
android:id="@+id/callee_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Callee Id"
android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/call_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Ana Etkinlik yapı iskelesi ve bağlamaları oluşturma
Düzen oluşturulduktan sonra bağlamalar, etkinliğin temel yapı iskelesi ile eklenebilir. Etkinlik, istenen çalışma zamanı izinlerini, çağrı aracısını oluşturmayı ve düğmeye basıldığında çağrıyı yerleştirmeyi işleymeyecektir. Her biri kendi bölümünde ele alınacaktır. onCreateYöntemi çağırmak için geçersiz kılınır getAllPermissions ve createAgent Ayrıca çağrı düğmesi için bağlamaları ekler. Bu, etkinlik oluşturulduğunda yalnızca bir kez gerçekleşir. Hakkında daha fazla bilgi için onCreate , etkinlik yaşam döngüsünü anlamakılavuzuna bakın.
MainActivity. Java ' ya gidin ve içeriği şu kodla değiştirin:
package com.contoso.acsquickstart;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.media.AudioManager;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.azure.android.communication.common.CommunicationUserIdentifier;
import com.azure.android.communication.common.CommunicationTokenCredential;
import com.azure.android.communication.calling.CallAgent;
import com.azure.android.communication.calling.CallClient;
import com.azure.android.communication.calling.StartCallOptions;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private CallAgent callAgent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getAllPermissions();
createAgent();
// Bind call button to call `startCall`
Button callButton = findViewById(R.id.call_button);
callButton.setOnClickListener(l -> startCall());
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
}
/**
* Request each required permission if the app doesn't already have it.
*/
private void getAllPermissions() {
// See section on requesting permissions
}
/**
* Create the call agent for placing calls
*/
private void createAgent() {
// See section on creating the call agent
}
/**
* Place a call to the callee id provided in `callee_id` text input.
*/
private void startCall() {
// See section on starting the call
}
}
Çalışma zamanında izin iste
Android 6,0 ve üzeri (API düzeyi 23) ve targetSdkVersion 23 veya üzeri için, uygulama yüklendiği zaman yerine çalışma zamanında izin verilir. Bunu desteklemek için, getAllPermissions ActivityCompat.checkSelfPermission ActivityCompat.requestPermissions gerekli her izin için ve çağırmak üzere uygulanabilir.
/**
* Request each required permission if the app doesn't already have it.
*/
private void getAllPermissions() {
String[] requiredPermissions = new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE};
ArrayList<String> permissionsToAskFor = new ArrayList<>();
for (String permission : requiredPermissions) {
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionsToAskFor.add(permission);
}
}
if (!permissionsToAskFor.isEmpty()) {
ActivityCompat.requestPermissions(this, permissionsToAskFor.toArray(new String[0]), 1);
}
}
Not
Uygulamanızı tasarlarken, bu izinlerin ne zaman istendiğine göz önünde bulundurun. İzinler, gerekli oldukları sırada değil, istenerek istenir. Daha fazla bilgi için bkz . Android Izinleri Kılavuzu.
Nesne modeli
Aşağıdaki sınıflar ve arabirimler, Azure Communication Service 'ın SDK 'yi çağıran bazı önemli özelliklerinden bazılarını işler:
| Ad | Açıklama |
|---|---|
| CallClient | CallClient, çağıran SDK 'ya ana giriş noktasıdır. |
| CallAgent | CallAgent, çağrıları başlatmak ve yönetmek için kullanılır. |
| CommunicationTokenCredential | CommunicationTokenCredential, CallAgent örneğini oluşturmak için belirteç kimlik bilgileri olarak kullanılır. |
| Communicationıdentifier | Communicationıdentifier, bir çağrının parçası olabilecek farklı katılımcı türü olarak kullanılır. |
Kullanıcı erişim belirtecinden bir aracı oluşturma
Kullanıcı belirteciyle, kimliği doğrulanmış bir çağrı Aracısı oluşturulabilir. Genellikle bu belirteç uygulamaya özgü kimlik doğrulaması olan bir hizmetten oluşturulacaktır. Kullanıcı erişim belirteçleri hakkında daha fazla bilgi için Kullanıcı erişim belirteçleri Kılavuzu ' na bakın.
Hızlı başlangıç için, <User_Access_Token> Azure Iletişim hizmeti kaynağınız için oluşturulmuş bir Kullanıcı erişim belirteci ile değiştirin.
/**
* Create the call agent for placing calls
*/
private void createAgent() {
String userToken = "<User_Access_Token>";
try {
CommunicationTokenCredential credential = new CommunicationTokenCredential(userToken);
callAgent = new CallClient().createCallAgent(getApplicationContext(), credential).get();
} catch (Exception ex) {
Toast.makeText(getApplicationContext(), "Failed to create call agent.", Toast.LENGTH_SHORT).show();
}
}
Çağrı Aracısı 'nı kullanarak çağrı başlatma
Çağrının yerleştirilmesi çağrı Aracısı aracılığıyla yapılabilir ve yalnızca aranan kimliklerin ve çağrı seçeneklerinin bir listesini sağlamayı gerektirir. Hızlı başlangıç için, video olmadan varsayılan çağrı seçenekleri ve metin girişinden tek bir aranan KIMLIĞI kullanılacaktır.
/**
* Place a call to the callee id provided in `callee_id` text input.
*/
private void startCall() {
EditText calleeIdView = findViewById(R.id.callee_id);
String calleeId = calleeIdView.getText().toString();
StartCallOptions options = new StartCallOptions();
callAgent.startCall(
getApplicationContext(),
new CommunicationUserIdentifier[] {new CommunicationUserIdentifier(calleeId)},
options);
}
Uygulamayı başlatın ve yankı bot 'ı çağırın
Uygulama artık araç çubuğunda "uygulama Çalıştır" düğmesi kullanılarak başlatılabilir (SHIFT + F10). Çağırarak çağrı yerleştirebildiğinizi doğrulayın 8:echo123 . Önceden kaydedilmiş bir ileti oynatılır ve sonra iletinizi size geri tekrarlayacak.
Bu hızlı başlangıçta, iOS için SDK 'Yı çağıran Azure Iletişim Hizmetleri 'ni kullanarak bir çağrı başlatmayı öğreneceksiniz.
Örnek Kod
Örnek uygulamayı GitHub'dan indirebilirsiniz.
Önkoşullar
Bu öğreticiyi tamamlayabilmeniz için aşağıdaki önkoşullara sahip olmanız gerekir:
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Anahtarınıza yüklenmiş geçerli bir geliştirici sertifikasıyla birlikte Xcodeçalıştıran bir Mac.
- Dağıtılan bir Iletişim Hizmetleri kaynağı. Iletişim Hizmetleri kaynağı oluşturun.
- Azure Iletişim hizmetiniz için bir Kullanıcı erişim belirteci .
Ayarlanıyor
Xcode projesi oluşturma
Xcode 'da yeni bir iOS projesi oluşturun ve tek görünüm uygulama şablonunu seçin. Bu öğretici swiftuı çerçevesinikullanır, bu nedenle dili Swift ve Kullanıcı arabirimine swiftuı olarak ayarlamanız gerekir. Bu hızlı başlangıç sırasında test oluşturuyoruz. Testleri dahil etme seçeneğinin işaretini kaldırın.
CocoaPods ile paketi ve bağımlılıkları yükler
Uygulamanız için bir pod dosyası oluşturmak için terminali açın ve proje klasörüne gidin ve şunu çalıştırın:
pod initAşağıdaki kodu Pod dosyasına ekleyin ve kaydedin ("target" öğesinin projenizin adıyla eşleştiğinden emin olun):
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' endpod installöğesini çalıştırın.Öğesini
.xcworkspaceXcode ile açın.
Mikrofona erişim isteyin
Cihazın mikrofonuna erişmek için uygulamanızın bilgi Özellik listesini bir ile güncelleştirmeniz gerekir NSMicrophoneUsageDescription . İlişkili değeri, string sistemin kullanıcıdan erişim istemek için kullandığı iletişim kutusuna dahil edilecek bir öğesine ayarlarsınız.
Info.plistProje ağacının girişine sağ tıklayın ve kaynak kodu olarak aç' ı seçin > . Aşağıdaki satırları en üst düzey bölümüne ekleyin <dict> ve dosyayı kaydedin.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Uygulama çerçevesini ayarlama
Projenizin ContentView. Swift dosyasını açın ve import dosyanın en üstüne içeri aktarmak için bir bildirim ekleyin AzureCommunicationCalling library . Bunlara ek olarak, AVFoundation Bu kodda ses izni isteği için de ihtiyacımız olacak.
import AzureCommunicationCalling
import AVFoundation
Yapının uygulamasını, bir ContentView kullanıcının bir çağrıyı başlatmasını ve bitibilmesini sağlayan bazı basıt UI denetimleriyle değiştirin. Bu hızlı başlangıçta bu denetimlere iş mantığı ekleyeceğiz.
struct ContentView: View {
@State var callee: String = ""
@State var callClient: CallClient?
@State var callAgent: CallAgent?
@State var call: Call?
var body: some View {
NavigationView {
Form {
Section {
TextField("Who would you like to call?", text: $callee)
Button(action: startCall) {
Text("Start Call")
}.disabled(callAgent == nil)
Button(action: endCall) {
Text("End Call")
}.disabled(call == nil)
}
}
.navigationBarTitle("Calling Quickstart")
}.onAppear {
// Initialize call agent
}
}
func startCall() {
// Ask permissions
AVAudioSession.sharedInstance().requestRecordPermission { (granted) in
if granted {
// Add start call logic
}
}
}
func endCall() {
// Add end call logic
}
}
Nesne modeli
Aşağıdaki sınıflar ve arabirimler, Azure Communication Service 'ın SDK 'yi çağıran bazı önemli özelliklerinden bazılarını işler:
| Ad | Açıklama |
|---|---|
| CallClient | CallClient, çağıran SDK 'ya ana giriş noktasıdır. |
| CallAgent | CallAgent, çağrıları başlatmak ve yönetmek için kullanılır. |
| CommunicationTokenCredential | CommunicationTokenCredential, CallAgent örneğini oluşturmak için belirteç kimlik bilgileri olarak kullanılır. |
| Communicationuserıdentifier | Communicationuserıdentifier, aşağıdakilerin biri olabilecek Kullanıcı kimliğini temsil etmek için kullanılır: Communicationuserıdentifier/Phonenumberıdentifier/CallingApplication. |
İstemcinin kimliğini doğrulama
Bir CallAgent Kullanıcı erişim belirtecine sahip bir örnek başlatın, bu da çağrı yapıp almamızı sağlar.
Aşağıdaki kodda, <USER ACCESS TOKEN> kaynağınız için geçerli bir Kullanıcı erişim belirteci ile değiştirmeniz gerekir. Kullanılabilir bir belirteciniz yoksa, Kullanıcı erişim belirteci belgelerine başvurun.
Aşağıdaki kodu onAppear ContentView. Swift içindeki geri aramaya ekleyin:
var userCredential: CommunicationTokenCredential?
do {
userCredential = try CommunicationTokenCredential(token: "<USER ACCESS TOKEN>")
} catch {
print("ERROR: It was not possible to create user credential.")
return
}
self.callClient = CallClient()
// Creates the call agent
self.callClient?.createCallAgent(userCredential: userCredential!) { (agent, error) in
if error != nil {
print("ERROR: It was not possible to create a call agent.")
return
}
else {
self.callAgent = agent
print("Call agent successfully created.")
}
}
Bir çağrı başlatın
startCallYöntemi, çağrıya başla düğmesine dokunduğunda gerçekleştirilecek eylem olarak ayarlanır. Şunu içeren bir çağrı başlatmak için uygulamayı güncelleştirin ASACallAgent :
func startCall()
{
// Ask permissions
AVAudioSession.sharedInstance().requestRecordPermission { (granted) in
if granted {
// start call logic
let callees:[CommunicationIdentifier] = [CommunicationUserIdentifier(self.callee)]
self.callAgent?.startCall(participants: callees, options: StartCallOptions()) { (call, error) in
if (error == nil) {
self.call = call
} else {
print("Failed to get call object")
}
}
}
}
}
Ayrıca, StartCallOptions çağrının başlangıç seçeneklerini ayarlamak için içindeki özellikleri de kullanabilirsiniz (yani, mikrofonun sesini kapalı olarak başlatmaya izin verir).
Çağrıyı Sonlandır
endCall Son çağrı düğmesine dokunduğunda geçerli çağrıyı sonlandırmak için yöntemini uygulayın.
func endCall()
{
self.call!.hangUp(options: HangUpOptions()) { (error) in
if (error != nil) {
print("ERROR: It was not possible to hangup the call.")
}
}
}
Kodu çalıştırma
Ürün > çalıştırması ' nı seçerek veya (⌘-R) klavye kısayolunu kullanarak uygulamanızı iOS simülatörü üzerinde oluşturabilir ve çalıştırabilirsiniz.
Metin alanına bir kullanıcı KIMLIĞI sağlayarak ve çağrıya başla düğmesine dokunarak gıden bir VoIP çağrısı yapabilirsiniz. Çağırmak 8:echo123 sizi bir Echo bot ile bağlar, bu, başlamak ve ses cihazlarınızın çalıştığını doğrulamak için harika bir yoldur.
Not
İlk kez bir çağrı yaptığınızda sistem mikrofona erişim ister. Bir üretim uygulamasında izin AVAudioSession durumunu denetlemek ve izin verilmediği zaman uygulamanızın davranışını dikkatlice güncelleştirmek için API 'yi kullanmanız gerekir.
Kaynakları temizleme
Bir Iletişim Hizmetleri aboneliğini temizleyip kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, onunla ilişkili diğer tüm kaynakları da siler. Kaynakları Temizlemehakkında daha fazla bilgi edinin.
Sonraki adımlar
Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- Çağıran Hero örnekimize göz atın
- SDK yeteneklerini çağırma hakkında bilgi edinin
- Nasıl çalıştığını çağırma hakkında daha fazla bilgi edinin