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:

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.

Visual Studio içindeki yeni Project penceresini gösteren ekran görüntüsü.

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.

Visual Studio 'de Internet ve mikrofona erişim isteği gösteren ekran görüntüsü.

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.

Hızlı başlangıç uygulamasını çalıştırmayı gösteren ekran görüntüsü

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

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>
      &nbsp;
      <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:

Tamamlanan JavaScript uygulamasının ekran görüntüsü.

İ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

Ayarlanıyor

Boş bir etkinliğe sahip bir Android uygulaması oluşturma

Android Studio yeni bir Android Studio projesi Başlat ' ı seçin.

Android Studio 'de ' yeni Android Studio Project başlat ' düğmesinin seçili olduğunu gösteren ekran görüntüsü.

"Telefon ve Tablet" altında "boş etkinlik" proje şablonu ' nu seçin.

Project şablon ekranında seçili ' boş etkinlik ' seçeneğinin gösterildiği ekran görüntüsü.

En düşük SDK "API 26: Android 8,0 (Oreo)" veya üzerini seçin.

Project şablonu ekran 2 ' de seçili ' boş etkinlik ' seçeneğinin gösterildiği ekran görüntüsü.

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.

Tamamlanmış uygulamayı gösteren ekran görüntüsü.

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:

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.

xcode içinde yeni Project penceresini gösteren ekran görüntüsü.

CocoaPods ile paketi ve bağımlılıkları yükler

  1. 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 init

  2. Aş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'
    end
    
  3. pod install öğesini çalıştırın.

  4. Öğesini .xcworkspace Xcode 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.

Hızlı başlangıç uygulamasına yönelik nihai görünüm

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: