テキストチャットの使い方ガイド(Android)
概要
OpenTokのシグナリングAPIを使用すると、OpenTokセッションに接続しているクライアント間でデータを送信することができます。セッションに接続している全員に対して、あるいは特定のクライアントに対して、シグナルメッセージを送信することができます。
このチュートリアルでは、OpenTokのシグナリングAPIを使用してテキストチャットを実装します。完成済みのプロジェクトから始め、その動作を支えるコードについて詳しく見ていきます。
ステップ1:はじめに
このセクションのコードは、の「Signaling」プロジェクトで入手可能です。 vonage-android-sdk-サンプル レポジトリにクローンする必要があります。まだの場合は、レポをローカル・ディレクトリにクローンする必要がある。コマンドラインで
git clone git@github.com:opentok/opentok-android-sdk-samples.git
を開く。 シグナリング プロジェクトをAndroid Studioで実行する。
以下の項目に、ApiKey、セッションID、トークンの認証情報を入力する必要があります。 OpenTokConfig ファイル。これらの値は、お使いの Opentok ダッシュボード.
ステップ 2:テキストチャット UI
チャットメッセージを表示するために、私たちは android.widget.ListView オブジェクト。これにより、アプリは一度に複数のメッセージを表示できるようになります。以下のコードを onCreate() レイアウトを展開し、そのビューへの参照を取得するためのメソッド。
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);
Androidのレイアウトビューをインフレートし、 messageHistory に対する messageHistoryListView, そして、キーボードのEnterキーが押されたときにメッセージを送信するように、メッセージエディタを設定します。
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);
ステップ3:信号の送信
ステップ2を振り返ってみると、 sendMessage このメソッドは、ユーザーがキーボードのEnterキーを押したときに呼び出されます。 sendMessage を作成します SignalMessage の可視テキスト内のオブジェクト EditTextView
private void sendMessage() {
Log.d(TAG, "Send Message");
SignalMessage signal = new SignalMessage(messageEditTextView.getText().toString());
session.sendSignal(SIGNAL_TYPE, signal.getMessageText());
messageEditTextView.setText("");
}
この信号は、そのセッションに接続しているすべてのクライアントに送信されます。 sendSignal() これは、シグナルを送信するための OpenTok の実際のメソッドです。このメソッドには 2 つのパラメータがあります:
-
type(文字列) — 信号の種類をフィルタリングするために使用できる、オプションのパラメータです。 -
data(文字列) — シグナルとともに送信するデータ。
私たちは type 信号の SIGNAL_TYPE (「text-signal」と定義することにした文字列)。これについては、後の onSignalReceived() このメソッドでは、受信したシグナルがこのタイプであるかどうかを確認します。このアプリケーションでは、これが唯一のシグナルタイプですが、実際には複数の異なるタイプのシグナルを柔軟に扱うことが可能です。
ステップ 4: SignalListener の設定
次に、 signalListener SignalListener としてプロパティを指定します。その onCreate() 方法 MainActivity クラスに、以下を追加しました:
session.setSignalListener(signalListener);
これにより、 signalListener オブジェクトを、その実装体として SubscriberKit.SignalListener インターフェース。このインターフェースは、 onSignalReceived(session, type, data, connection) クライアントがセッションからシグナルを受信した際に呼び出されるメソッド:
ステップ 5: onSignalReceived による信号の受信
本文では、 onSignalReceived)() この手法では、まず、ローカルのAndroidクライアントから送信された信号と、そのセッションに接続されている他のクライアントから送信された信号とを区別する必要があります。この確認はすべてのApplicationsで必須というわけではありませんが、当アプリケーションはテキストチャットアプリであるため、どのメッセージが送信され、どのメッセージが受信されたかを明確に区別したいと考えています。
これを行うには、Connectionオブジェクトを調べます。メソッドの引数にあるConnectionオブジェクトは、シグナルが送信されたクライアントからのものです。これは、 mSession.getConnection() (ローカルクライアントからの接続を返す)シグナルがローカルクライアントから送信された場合。その remote 変数は次のように設定されています true 信号が自社とは異なる接続から送信されている場合、それ以外の場合は 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);
}
}
次に、 showMessage(messageData, remote) メソッドに remote. 下流では、その SignalMessageAdapter 例えば、 messageHistoryListView これを使用して、シグナルのデータを含むビューを、送信中の場合はビューの右側に、受信中の場合は左側に配置します。
private void showMessage(String messageData, boolean remote) {
SignalMessage message = new SignalMessage(messageData, remote);
messageHistory.add(message);
}
このテキストチャットの実装で使用されているAndroidクラスに関する詳細については、Androidのリファレンスドキュメントの ArrayAdaptor そして リストビュー
おめでとうございます!Android版テキストチャットチュートリアルを完了しました。
ここで作成したコードをさらに試したり調整したりすることもできますし、あるいは 次のステップ 以下を参照してください。シグナリングに関する詳細については、 OpenTok シグナリング開発者ガイド.
次のステップ
ここでの作業が終わったら、以下の役立つリソースを活用して、OpenTokアプリケーションの構築と機能強化を続けてください: