Tutorial de bate-papo por texto (Android)

Visão geral

A API de sinalização do OpenTok permite enviar dados entre clientes conectados a uma sessão do OpenTok. É possível enviar uma mensagem de sinalização para todos os participantes conectados à sessão ou para um cliente específico.

Neste tutorial, vamos usar a API de sinalização do OpenTok para implementar um chat de texto. Você começará com uma versão completa do projeto e explorará o código que o faz funcionar.

Etapa 1: Introdução

O código desta seção está disponível no projeto Signaling do exemplos-do-SDK-do-Vonage-para-Android repositório. Caso ainda não tenha feito isso, você precisará clonar o repositório em um diretório local. Na linha de comando, execute:

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

Abra o Sinalização projeto no Android Studio para acompanhar.

Você precisará inserir as credenciais de autenticação para a ApiKey, o ID da sessão e o token, em OpenTokConfig arquivo. Você pode encontrar esses valores no seu Painel do Opentok.

Etapa 2: Interface do chat de texto

Para exibir nossas mensagens de bate-papo, usamos um android.widget.ListView objeto. Isso permite que o aplicativo exiba mais de uma mensagem por vez. Adicionamos o seguinte código no onCreate() método para carregar nosso layout e obter referências às suas visualizações.

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);

Depois de carregar nossas visualizações de layout do Android e vincular messageHistory para o messageHistoryListView, e configurar nosso editor de mensagens para enviar uma mensagem quando a tecla Enter for pressionada no teclado.

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);

Etapa 3: Envio de sinais

Se você voltar ao passo 2, o sendMessage O método é chamado quando o usuário pressiona a tecla Enter no teclado. sendMessage cria um SignalMessage objeto a partir do texto visível no EditTextView

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

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

    messageEditTextView.setText("");
}

Esse sinal é então enviado a todos os clientes conectados à sessão. sendSignal() é o método real do OpenTok para enviar um sinal. Ele possui dois parâmetros:

  • type (String) — Um parâmetro opcional que pode ser usado como filtro para tipos de sinais.

  • data (String) — Os dados a serem enviados junto com o sinal.

Definimos o type do sinal para SIGNAL_TYPE (uma sequência de caracteres que decidimos definir como “text-signal”). Veremos mais adiante no onSignalReceived() método, no qual verificamos se o sinal recebido é desse tipo. Embora, nesta aplicação, esse seja nosso único tipo de sinal, você tem a flexibilidade de utilizar vários tipos diferentes de sinais.

Etapa 4: Configurando o SignalListener

Agora precisamos definir o signalListener propriedade como SignalListener. No onCreate() método de MainActivity Na classe, adicionamos:

session.setSignalListener(signalListener);

Isso define o signalListener objeto como o implementador do SubscriberKit.SignalListener interface. Essa interface define o onSignalReceived(session, type, data, connection) método, que é chamado quando o cliente recebe um sinal da sessão:

Etapa 5: Recebendo sinais com onSignalReceived

No corpo do onSignalReceived)() Nesse método, queremos primeiro distinguir entre os sinais enviados pelo cliente Android local e os enviados por outros clientes conectados à sessão. Embora essa verificação não seja necessária para todas as Applications, o nosso é um aplicativo de bate-papo por texto, e queremos deixar claro quais mensagens foram enviadas e quais foram recebidas.

Para isso, verificamos o objeto `Connection`. O objeto `Connection` no argumento do método pertence ao cliente do qual o sinal foi enviado. Isso só corresponderá ao objeto `Connection` retornado por mSession.getConnection() (que retorna a conexão do cliente local) se o sinal tiver sido enviado pelo cliente local. O remote a variável está definida como true se o sinal vier de uma conexão diferente da nossa; caso contrário, ele é definido como 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);
    }
}

Em seguida, chamamos a showMessage(messageData, remote) método, passando remote. A jusante, o SignalMessageAdapter por exemplo, messageHistoryListView usará isso para posicionar a visualização que contém os dados do sinal no lado direito da tela, caso esteja sendo enviado, e no lado esquerdo, caso esteja sendo recebido.

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

Para obter mais informações sobre as classes do Android utilizadas nesta implementação de chat de texto, consulte a documentação de referência do Android para o ArrayAdaptor e ListView

Parabéns! Você concluiu o Tutorial de bate-papo por texto para Android.
Você pode continuar experimentando e ajustando o código que desenvolveu aqui, ou conferir o Próximos passos abaixo. Para obter mais informações sobre sinalização, consulte o Guia do desenvolvedor de sinalização do OpenTok.

Próximos passos

Quando terminar esta seção, continue desenvolvendo e aprimorando seu aplicativo OpenTok com estes recursos úteis: