Aktivera push-meddelanden för anrop

Här lär du dig att aktivera push-meddelanden för Azure Communication Services anrop. Genom att konfigurera dessa får användarna veta när de har ett inkommande anrop som de sedan kan svara på.

Förutsättningar

Installera SDK:n

Leta upp din build.gradle på projektnivå och lägg mavenCentral() till i listan över lagringsplatsen under buildscript och allprojects

buildscript {
    repositories {
    ...
        mavenCentral()
    ...
    }
}
allprojects {
    repositories {
    ...
        mavenCentral()
    ...
    }
}

Lägg sedan till följande rader i avsnittet beroenden i build.gradle på modulnivå

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-calling:1.0.0'
    ...
}

Initiera nödvändiga objekt

Om du vill CallAgent skapa en instans måste du anropa metoden på en createCallAgent CallClient instans. Detta returnerar asynkront ett CallAgent instansobjekt. Metoden createCallAgent tar ett som ett argument som kapslar in en CommunicationUserCredential åtkomsttoken. För att komma åt måste en callAgent-instans skapas först och sedan kan du använda metoden DeviceManager CallClient.getDeviceManager för att hämta DeviceManager.

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an Activity for instance
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential).get();
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();

Om du vill ange ett visningsnamn för anroparen använder du den här alternativa metoden:

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an Activity for instance
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisplayName("Alice Bob");
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential, callAgentOptions).get();

Ytterligare krav för push-meddelanden

Ett Firebase-konto som har ställts in med Cloud Messaging (FCM) aktiverat och med din Firebase Cloud Messaging-tjänst ansluten till en Azure Notification Hub-instans. Mer information Communication Services finns i Communication Services meddelanden. Dessutom förutsätter självstudien att du använder Android Studio version 3.6 eller senare för att skapa ditt program.

En uppsättning behörigheter krävs för Android-programmet för att kunna ta emot meddelanden från Firebase Cloud Messaging. Lägg till följande uppsättning behörigheter direkt efter eller under taggen AndroidManifest.xml <manifest ...> i </application> 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" />

Översikt

Mobila push-meddelanden är popup-meddelanden som visas på mobila enheter. För att anropa fokuserar vi på push-meddelanden för VoIP (Voice over Internet Protocol). Vi registrerar oss för push-meddelanden, hanterar push-meddelanden och avregistrerar sedan push-meddelanden.

Registrera dig för push-meddelanden

Om du vill registrera dig för push-meddelanden måste programmet anropa registerPushNotification() på en instans med en CallAgent enhetsregistreringstoken.

Hämta enhetsregistreringstoken genom att lägga till Firebase SDK i programmodulens -fil genom att lägga till följande rader i avsnittet om det inte build.gradle dependencies redan finns där:

// Add the SDK for Firebase Cloud Messaging
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-messaging:20.2.4'

I filen build.gradle på projektnivå lägger du till följande i dependencies avsnittet om den inte redan finns där:

classpath 'com.google.gms:google-services:4.3.3'

Lägg till följande plugin-program i början av filen om det inte redan finns där:

apply plugin: 'com.google.gms.google-services'

Välj Synkronisera nu i verktygsfältet. Lägg till följande kodfragment för att hämta den enhetsregistreringstoken som genererades av Firebase Cloud Messaging SDK för klientprograminstansen Se till att lägga till nedanstående importer i huvudet för huvudaktiviteten för instansen. De krävs för att kodfragmentet ska kunna hämta token:

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;

Lägg till det här kodfragmentet för att hämta token:

FirebaseInstanceId.getInstance().getInstanceId()
    .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
        @Override
        public void onComplete(@NonNull Task<InstanceIdResult> task) {
            if (!task.isSuccessful()) {
                Log.w("PushNotification", "getInstanceId failed", task.getException());
                return;
            }

            // Get new Instance ID token
            String deviceToken = task.getResult().getToken();
            // Log
            Log.d("PushNotification", "Device Registration token retrieved successfully");
        }
    });

Registrera enhetsregistreringstoken med Calling Services SDK för inkommande push-meddelanden för anrop:

String deviceRegistrationToken = "<Device Token from previous section>";
try {
    callAgent.registerPushNotification(deviceRegistrationToken).get();
}
catch(Exception e) {
    System.out.println("Something went wrong while registering for Incoming Calls Push Notifications.")
}

Hantering av push-meddelanden

Om du vill ta emot push-meddelanden för inkommande anrop anropar du handlePushNotification() på en CallAgent-instans med en nyttolast.

För att hämta nyttolasten från Firebase Cloud Messaging 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 händelsehanteraren som anropas när Firebase Cloud Messaging levererar push-meddelandet till programmet.

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private java.util.Map<String, String> pushNotificationMessageDataFromFCM;

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            Log.d("PushNotification", "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }
        else {
            pushNotificationMessageDataFromFCM = remoteMessage.getData();
        }
    }
}

Lägg till följande tjänstdefinition i AndroidManifest.xml filen, inuti <application> taggen :

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
  • När nyttolasten har hämtats kan den skickas till Communication Services SDK för att parsas ut till ett internt IncomingCallInformation-objekt som hanteras genom anrop till handlePushNotification-metoden på en CallAgent-instans. En CallAgent instans skapas genom att metoden createCallAgent(...) anropas i klassen CallClient .
try {
    IncomingCallInformation notification = IncomingCallInformation.fromMap(pushNotificationMessageDataFromFCM);
    Future handlePushNotificationFuture = callAgent.handlePushNotification(notification).get();
}
catch(Exception e) {
    System.out.println("Something went wrong while handling the Incoming Calls Push Notifications.");
}

När hanteringen av push-meddelandet lyckas och alla händelsehanterare har registrerats korrekt, kommer programmet att ringa.

Avregistrera push-meddelanden

Program kan avregistrera push-meddelanden när som helst. Anropa metoden unregisterPushNotification() på callAgent för att avregistrera.

try {
    callAgent.unregisterPushNotification().get();
}
catch(Exception e) {
    System.out.println("Something went wrong while un-registering for all Incoming Calls Push Notifications.")
}

Konfigurera systemet

Skapa Xcode-projektet

Skapa ett nytt iOS-projekt i Xcode och välj mallen App med enkel vy. Den här snabbstarten använder SwiftUI-ramverket, så du bör ange Språket till Swift och Användargränssnitt till SwiftUI.

Du kommer inte att skapa enhetstester eller UI-tester under den här snabbstarten. Du kan rensa textrutorna Include Unit Tests (Inkludera enhetstester) och Include UI Tests (Inkludera UI-tester).

Skärmbild som visar fönstret för att skapa ett projekt i Xcode.

Installera paketet och beroenden med CocoaPods

  1. Skapa en podfile för ditt program så här:

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. Kör pod install.

  3. Öppna .xcworkspace med Xcode.

Begär åtkomst till mikrofonen

För att få åtkomst till enhetens mikrofon måste du uppdatera appens egenskapslista för information med NSMicrophoneUsageDescription . Du anger det associerade värdet till string en som ska ingå i den dialogruta som systemet använder för att begära åtkomst från användaren.

Högerklicka på posten Info.plist i projektträdet och välj Öppna som > källkod. Lägg till följande rader i avsnittet på <dict> den översta nivån och spara sedan filen.

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>

Konfigurera appramverket

Öppna projektets ContentView.swift-fil och lägg till import en deklaration överst i filen för att importera AzureCommunicationCalling biblioteket. Importera dessutom AVFoundation . Du behöver den för ljudbehörighetsbegäranden i koden.

import AzureCommunicationCalling
import AVFoundation

Initiera CallAgent

Om du vill skapa en -instans från måste du använda en -metod som asynkront returnerar CallAgent CallClient ett callClient.createCallAgent CallAgent -objekt när det har initierats.

Om du vill skapa en anropsklient måste du skicka ett CommunicationTokenCredential -objekt.

import AzureCommunication

let tokenString = "token_string"
var userCredential: CommunicationTokenCredential?
do {
    let options = CommunicationTokenRefreshOptions(initialToken: token, refreshProactively: true, tokenRefresher: self.fetchTokenSync)
    userCredential = try CommunicationTokenCredential(withOptions: options)
} catch {
    updates("Couldn't created Credential object", false)
    initializationDispatchGroup!.leave()
    return
}

// tokenProvider needs to be implemented by Contoso, which fetches a new token
public func fetchTokenSync(then onCompletion: TokenRefreshOnCompletion) {
    let newToken = self.tokenProvider!.fetchNewToken()
    onCompletion(newToken, nil)
}

Skicka objektet CommunicationTokenCredential som du skapade till och ange CallClient visningsnamnet.

self.callClient = CallClient()
let callAgentOptions = CallAgentOptions()
options.displayName = " iOS ACS User"

self.callClient!.createCallAgent(userCredential: userCredential!,
    options: callAgentOptions) { (callAgent, error) in
        if error == nil {
            print("Create agent succeeded")
            self.callAgent = callAgent
        } else {
            print("Create agent failed")
        }
})

Konfigurera push-meddelanden

Ett mobilt push-meddelande är popup-meddelandet som du får på den mobila enheten. Vid samtal fokuserar vi på push-meddelanden med VoIP (voice over Internet Protocol).

I följande avsnitt beskrivs hur du registrerar dig för, hanterar och avregistrerar push-meddelanden. Innan du startar dessa uppgifter måste du slutföra följande krav:

  1. I Xcode går du till Signing & Capabilities. Lägg till en funktion genom att välja + Kapacitet och sedan Push-meddelanden.
  2. Lägg till en annan funktion genom att välja + Kapacitet och sedan Bakgrundslägen.
  3. Under Bakgrundslägen markerar du kryssrutorna Voice over IP (Röst över IP) och Remote notifications (Fjärrmeddelanden).

Skärmbild som visar hur du lägger till funktioner i Xcode.

Registrera dig för push-meddelanden

Om du vill registrera dig för push-meddelanden registerPushNotification() anropar du CallAgent på en instans med en enhetsregistreringstoken.

Registrering för push-meddelanden måste ske efter lyckad initiering. När objektet callAgent förstörs logout anropas , vilket automatiskt avregistrerar push-meddelanden.

let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
callAgent.registerPushNotifications(deviceToken: deviceToken!) { (error) in
    if(error == nil) {
        print("Successfully registered to push notification.")
    } else {
        print("Failed to register push notification.")
    }
}

Hantera push-meddelanden

Om du vill ta emot push-meddelanden för inkommande handlePushNotification() anrop anropar CallAgent du på en instans med en ordlistenyttolast.

let callNotification = PushNotificationInfo.fromDictionary(pushPayload.dictionaryPayload)

callAgent.handlePush(notification: callNotification) { (error) in
    if (error == nil) {
        print("Handling of push notification was successful")
    } else {
        print("Handling of push notification failed")
    }
}

Avregistrera push-meddelanden

Program kan avregistrera push-meddelanden när som helst. Anropa bara unregisterPushNotification metoden på CallAgent .

Anteckning

Program avregistreras inte automatiskt från push-meddelanden vid utloggning.

callAgent.unregisterPushNotification { (error) in
    if (error == nil) {
        print("Unregister of push notification was successful")
    } else {
       print("Unregister of push notification failed, please try again")
    }
}

Nästa steg