Anleitung zum Text-Chat (Android)

Übersicht

Mit der OpenTok-Signalisierungs-API können Sie Daten zwischen Clients austauschen, die mit einer OpenTok-Sitzung verbunden sind. Sie können eine Signalisierungsnachricht an alle Teilnehmer der Sitzung oder an einen bestimmten Client senden.

In diesem Tutorial werden wir die OpenTok-Signaling-API verwenden, um einen Text-Chat zu implementieren. Sie beginnen mit einer fertigen Version des Projekts und sehen sich den Code an, der dafür sorgt, dass es funktioniert.

Schritt 1: Erste Schritte

Der Code für diesen Abschnitt ist im Projekt „Signaling“ der vonage-android-sdk-Beispiele Repo. Wenn Sie dies noch nicht getan haben, müssen Sie das Projektarchiv in ein lokales Verzeichnis klonen. Führen Sie in der Befehlszeile Folgendes aus:

git clone git@github.com:opentok/opentok-android-sdk-samples.git

Öffnen Sie die Signalisierung Projekt in Android Studio, um die Entwicklung zu verfolgen.

Sie müssen die Anmeldedaten für ApiKey, die Sitzungs-ID und das Token in OpenTokConfig Datei. Diese Werte finden Sie in Ihrer Opentok-Dashboard.

Schritt 2: Benutzeroberfläche für den Text-Chat

Um unsere Chat-Nachrichten anzuzeigen, verwenden wir ein android.widget.ListView Objekt. Dadurch kann die App mehr als eine Meldung gleichzeitig anzeigen. Wir fügen den folgenden Code in die onCreate() Methode, um unser Layout zu initialisieren und Referenzen auf dessen Ansichten zu erhalten.

setContentView(R.layout.activity_main);

messageEditTextView = findViewById(R.id.message_edit_text);
messageHistoryListView = findViewById(R.id.message_history_list_view);

// Attach data source to message history
messageHistory = new SignalMessageAdapter(this);
messageHistoryListView.setAdapter(messageHistory);

Sobald wir unsere Android-Layout-Ansichten initialisiert und angehängt haben, messageHistory zum messageHistoryListView, und konfigurieren wir unseren Nachrichteneditor so, dass beim Drücken der Eingabetaste auf der Tastatur eine Nachricht gesendet wird.

messageEditTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            InputMethodManager inputMethodManager = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
            sendMessage();
            return true;
        }
        return false;
    }
});

messageEditTextView.setEnabled(false);

Schritt 3: Signale senden

Wenn Sie noch einmal zu Schritt 2 zurückblicken, dann ist die sendMessage Die Methode wird aufgerufen, wenn der Benutzer die Eingabetaste auf der Tastatur drückt. sendMessage erstellt ein SignalMessage Objekt aus dem sichtbaren Text im EditTextView

private void sendMessage() {
    Log.d(TAG, "Send Message");

    SignalMessage signal = new SignalMessage(messageEditTextView.getText().toString());
    session.sendSignal(SIGNAL_TYPE, signal.getMessageText());

    messageEditTextView.setText("");
}

Dieses Signal wird anschließend an alle mit der Sitzung verbundenen Clients gesendet. sendSignal() Dies ist die eigentliche OpenTok-Methode zum Senden eines Signals. Sie verfügt über zwei Parameter:

  • type (Zeichenkette) — Ein optionaler Parameter, der als Filter für Signaltypen verwendet werden kann.

  • data (Zeichenkette) — Die Daten, die mit dem Signal gesendet werden sollen.

Wir legen die type des Signals an SIGNAL_TYPE (eine Zeichenkette, die wir als „text-signal“ definieren wollen). Wir werden später im onSignalReceived() Methode, mit der wir prüfen, ob das empfangene Signal diesem Typ entspricht. In dieser Anwendung ist dies zwar unser einziger Signaltyp, Sie haben jedoch die Möglichkeit, mehrere verschiedene Signaltypen zu verwenden.

Schritt 4: Einrichten des SignalListener

Nun müssen wir die signalListener Eigenschaft als SignalListener. In der onCreate() Methode der MainActivity Klasse haben wir Folgendes hinzugefügt:

session.setSignalListener(signalListener);

Damit wird die signalListener Objekt als Implementierung des SubscriberKit.SignalListener Schnittstelle. Diese Schnittstelle definiert die onSignalReceived(session, type, data, connection) Methode, die aufgerufen wird, wenn der Client ein Signal von der Sitzung erhält:

Schritt 5: Signale mit „onSignalReceived“ empfangen

Im Hauptteil des onSignalReceived)() Bei dieser Methode möchten wir zunächst zwischen Signalen unterscheiden, die vom lokalen Android-Client gesendet werden, und solchen, die von anderen mit der Sitzung verbundenen Clients stammen. Diese Überprüfung ist zwar nicht für alle Applications erforderlich, doch da es sich bei unserer Application um einen Text-Chat handelt, möchten wir klar unterscheiden, welche Nachrichten gesendet und welche empfangen wurden.

Dazu untersuchen wir das `Connection`-Objekt. Das `Connection`-Objekt im Argument der Methode stammt von dem Client, von dem aus das Signal gesendet wurde. Dies stimmt nur mit dem `Connection`-Objekt überein, das von mSession.getConnection() (die die Verbindung des lokalen Clients zurückgibt), falls das Signal vom lokalen Client gesendet wurde. Die remote Die Variable ist auf true wenn das Signal von einer anderen Verbindung als unserer eigenen stammt; andernfalls wird es auf false.

@Override
public void onSignalReceived(Session session, String type, String data, Connection connection) {

    boolean remote = !connection.equals(session.getConnection());
    if (type != null && type.equals(SIGNAL_TYPE)) {
        showMessage(data, remote);
    }
}

Als Nächstes rufen wir die showMessage(messageData, remote) Methode, Übergabe in remote. Flussabwärts, der SignalMessageAdapter beispielsweise, messageHistoryListView Damit wird die Ansicht, die die Daten des Signals enthält, bei einer Übertragung auf der rechten Seite der Ansicht platziert, bei einem Empfang hingegen auf der linken Seite.

private void showMessage(String messageData, boolean remote) {
    SignalMessage message = new SignalMessage(messageData, remote);
    messageHistory.add(message);
}

Weitere Informationen zu den Android-Klassen, die bei dieser Text-Chat-Implementierung verwendet werden, finden Sie in der Android-Referenzdokumentation für die ArrayAdaptor und ListView

Herzlichen Glückwunsch! Du hast das Tutorial zum Text-Chat für Android abgeschlossen.
Du kannst den Code, den du hier entwickelt hast, weiter ausprobieren und anpassen oder dir die Nächste Schritte unten. Weitere Informationen zur Signalübertragung finden Sie im OpenTok-Entwicklerhandbuch zur Signalisierung.

Nächste Schritte

Wenn Sie hier fertig sind, können Sie Ihre OpenTok-Application mit diesen hilfreichen Ressourcen weiter ausbauen und verbessern: