Qiscus Chat SDK (Software Development Kit) é um produto fornecido pela Qiscus que permite incorporar um recurso de chat/chat no aplicativo em seus aplicativos de forma rápida e fácil. Com nosso SDK de chat, você pode implementar o recurso de chat sem lidar com a complexidade da infraestrutura de comunicação em tempo real. Fornecemos uma API poderosa para permitir que você implemente o recurso de bate-papo em seus aplicativos no processo de desenvolvimento mais contínuo.
Qiscus Chat SDK oferece muitos recursos, como:
Fornecemos um aplicativo de exemplo para ajudá-lo a conhecer nosso SDK de bate-papo. Este aplicativo de exemplo foi desenvolvido com funcionalidades completas para que você possa descobrir o fluxo e as principais atividades usando Qiscus Chat SDK. Agora você pode personalizar livremente sua própria IU. Você também pode criar seu próprio aplicativo com base em nosso aplicativo de exemplo. Para mais detalhes você pode baixar este exemplo.
git clone https://github.com/qiscus/qiscus-chat-sdk-android-sample.git
Este aplicativo de exemplo usa o APP ID de exemplo, o que significa que, ao usar esse aplicativo de exemplo, você compartilhará os dados com outras pessoas. Caso queira tentar por conta própria, você pode alterar o APP ID para o seu próprio APP ID. Você pode encontrar seu ID do APP em seu painel. Clique aqui para acessar seu painel
Primeiramente, você precisa criar sua aplicação no dashboard, acessando o Qiscus Chat Dashboard. Você pode criar mais de um ID de aplicativo.
Qiscus Chat SDK requer no mínimo Android API 16 (Jelly Bean). Para integrar seu aplicativo ao Qiscus, isso pode ser feito em 2 (dois) passos. Primeiro, você precisa adicionar uma referência de URL em seu projeto .gradle. Esta referência é um guia para .gradle obter o SDK do Qiscus Chat do repositório correto. Abaixo está como fazer isso:
allprojects {
repositories {
...
maven { url "https://artifactory.qiscus.com/artifactory/qiscus-library-open-source" }
}
}
Em segundo lugar, você precisa adicionar dependências do SDK dentro do .gradle do seu aplicativo. Em seguida, você precisa sincronizar para compilar o Qiscus Chat SDK para seu aplicativo.
dependencies {
...
implementation 'com.qiscus.sdk:chat-core:1.8.3'
}
Você precisa iniciar o ID do seu aplicativo de bate-papo antes de realizar a autenticação. Essa inicialização só precisa ser feita uma vez no ciclo de vida do aplicativo. A inicialização pode ser implementada na inicialização. Aqui está como você pode fazer isso:
public class SampleApp extends Application {
@ Override
public void onCreate () {
super . onCreate ();
QiscusCore . initWithAppId ( this , APPID );
}
}
A inicialização deve ser chamada uma vez em um aplicativo Android. A melhor prática que você pode colocar na aula de aplicação.
Para usar os recursos do Qiscus Chat SDK, o usuário precisa se autenticar no Qiscus Server. Para obter mais detalhes, você pode descobrir a seção Autenticação. Esta autenticação é feita chamando a função setUser(). Esta função irá recuperar ou criar credenciais de usuário com base no userId exclusivo, por exemplo:
QiscusCore . setUser ( userId , userKey )
. withUsername ( username )
. withAvatarUrl ( avatarUrl )
. withExtras ( extras )
. save ( new QiscusCore . SetUserListener () {
@ Override
public void onSuccess ( QiscusAccount qiscusAccount ) {
//on success
}
@ Override
public void onError ( Throwable throwable ) {
//on error
});
Onde:
userId (string, exclusivo): Um identificador de usuário que será usado para identificar um usuário e usado sempre que outro usuário precisar conversar com esse usuário. Pode ser qualquer coisa, seja o e-mail do usuário, o índice do banco de dados do usuário, etc. Desde que seja único e uma string.
userKey (string): userKey para fins de autenticação, portanto, mesmo que um estranho conheça seu ID de usuário, ele não poderá acessar os dados do usuário.
nome de usuário (string): nome de usuário para exibição dentro da sala de bate-papo.
avatarURL (string, opcional): para exibir o avatar do usuário, retorne ao avatar padrão se não for fornecido.
Você pode aprender com a figura abaixo para entender o que realmente aconteceu ao chamar a função setUser()
:
Após a criação da sua conta de usuário, às vezes você pode precisar atualizar as informações do usuário, como alterar o avatar do usuário. Você pode usar o método QiscusCore.updateUser()
para fazer alterações em sua conta.
QiscusCore . updateUser ( userName , avatarUrl , new QiscusCore . SetUserListener () {
@ Override
public void onSuccess ( QiscusAccount qiscusAccount ) {
//do anything after it successfully updated
}
@ Override
public void onError ( Throwable throwable ) {
//do anything if error occurs
}
});
Conforme mencionado na seção anterior, quando você executou setUser(), os dados do usuário serão armazenados localmente. Quando o usuário precisa se desconectar do serviço Qiscus Chat SDK, você precisa limpar os dados do usuário relacionados ao Qiscus Chat SDK, como token, perfil, mensagens, salas, etc., do dispositivo local. Você pode fazer isso chamando o método clearUser():
QiscusCore . clearUser ();
Sala de bate-papo é um lugar onde 2 ou mais usuários podem conversar entre si. Existem 3 tipos de sala de bate-papo que podem ser criados usando Qiscus Chat SDK: sala de bate-papo individual, sala de bate-papo em grupo e canal. Em alguns casos, uma sala pode ser identificada pelo ID exclusivo da sala ou pelo nome da sala.
Presumimos que você já conhece um usuário-alvo com quem deseja bater um papo. Certifique-se de que seu usuário alvo foi registrado no Qiscus Chat SDK através do método setUser(), conforme explicado na seção anterior. Para iniciar uma conversa com seu usuário alvo, isso pode ser feito com o método getChatRoom()
. O Qiscus Chat SDK, então, fornecerá a você uma nova sala de chat, de forma assíncrona. Quando a sala for criada com sucesso, o Qiscus Chat SDK retornará um pacote de sala de bate-papo por meio do ouvinte onSuccess()
.
QiscusApi . getInstance (). chatUser ( userId , options )
. subscribeOn ( Schedulers . io ())
. observeOn ( AndroidSchedulers . mainThread ())
. subscribe ( chatRoom -> {
// on success
}, throwable -> {
// on error
});
Onde:
userId : um identificador de usuário que será usado para identificar um usuário e usado sempre que outro usuário precisar conversar com esse usuário. Pode ser qualquer coisa, seja o e-mail do usuário, o índice do banco de dados do usuário, etc. Desde que seja único e uma string.
distintoId : (obsoleto) você pode preencher “ ” (string vazia).
opções : metadados que podem servir como informações adicionais à Sala de Chat, que consiste em valor-chave, por exemplo, chave: plano de fundo e valor: vermelho.
Quando você deseja que muitos usuários conversem em uma sala de bate-papo individual, você precisa criar uma sala de grupo. Basicamente, a Sala de Grupo tem o mesmo conceito da Sala de Chat 1-a-1, mas a diferença é que a Sala de Grupo terá como alvo uma série de IDs de usuário em um único método. Veja como você pode criar uma sala de grupo:
QiscusApi . getInstance (). createGroupChat ( roomName , userIds , avatarUrl , options );
. subscribeOn ( Schedulers . io ())
. observeOn ( AndroidSchedulers . mainThread ())
. subscribe ( chatRoom -> {
// on success
}, throwable -> {
// on error
});
A criação de uma sala de chat de canal é ideal para um caso de uso que requer um grande número de participantes, mais de 100.
Você precisa definir uniqueId para identificar uma sala de chat do canal. Se não existir uma sala de chat com uniqueId predefinido, será criada uma nova com o solicitante como único participante. Caso contrário, se já existir uma sala de bate-papo com uniqueId predefinido, ela retornará essa sala e adicionará o solicitante como participante.
Quando a sala não existir na primeira chamada e você não enviar avatarUrl e/ou roomName, ele usará o valor padrão. Mas, após a segunda chamada (a sala existe) e você enviar avatarUrl e/ou roomName, ela será atualizada para esse valor. Por exemplo, a implementação criando canal:
QiscusApi . getInstance (). createChannel ( uniqueId , roomName , avatarUrl , options )
. subscribeOn ( Schedulers . io ())
. observeOn ( AndroidSchedulers . mainThread ())
. subscribe ( chatRoom -> {
// on success
}, throwable -> {
// on error
});
Em alguns casos, pode ser necessário adicionar participantes adicionais ao bate-papo da sala ou até mesmo remover qualquer participante.
Para obter a lista de todas as salas, você pode chamar QiscusApi.getInstance().getChatRooms(int page, int limit, boolean showMembers), page start from 1, limit indica o máximo de salas por página, showMembers também é um sinalizador para carregar membros da sala ou não. Aqui exemplo de código:
QiscusApi . getInstance (). getAllChatRooms ( showParticipant , showRemoved , showEmpty , page , limit )
. subscribeOn ( Schedulers . io ())
. observeOn ( AndroidSchedulers . mainThread ())
. subscribe ( chatRooms -> {
//on success
}, throwable -> {
//on error
});
Você pode adicionar mais de um participante na sala de bate-papo chamando o método addRoomMember. Você também pode passar vários IDs de usuário. Assim que um participante conseguir ingressar na sala de bate-papo, ele receberá uma nova sala de bate-papo em sua lista de salas de bate-papo.
QiscusApi . getInstance (). addParticipants ( roomId , userId )
. subscribeOn ( Schedulers . io ())
. observeOn ( AndroidSchedulers . mainThread ())
. subscribe ( chatRoom -> {
// on success
}, throwable -> {
//on error
});
Você pode remover mais de um participante da sala de bate-papo chamando o método removeRoomMember. Você também pode passar vários IDs de usuário. Depois que um participante for removido da sala de bate-papo, ele não encontrará a sala de bate-papo relacionada em sua lista de salas de bate-papo.
QiscusApi . getInstance (). removeParticipants ( roomId , userId )
. subscribeOn ( Schedulers . io ())
. observeOn ( AndroidSchedulers . mainThread ())
. subscribe ( chatRoom -> {
//success
}, throwable -> {
//error
});
Primeiro instale o FCM em seus aplicativos, você pode seguir estas etapas. Você pode pular esta etapa se seus aplicativos já usam o FCM. Em seguida, coloque sua chave de API no painel do qiscus. Agora vamos integrar com o SDK do cliente Qiscus, primeiro habilite o FCM na configuração de bate-papo do Qiscus.
Qiscus . getChatConfig (). setEnableFcmPushNotification ( true );
Depois disso, você precisa registrar o token FCM para notificar o SDK do Qiscus Chat, você pode chamar sendCurrentToken() após o login e na página inicial (era o login no qiscus), por exemplo:
if ( Qiscus . hasSetupUser ()) {
FirebaseUtil . sendCurrentToken ();
}
public class FirebaseUtil {
public static void sendCurrentToken() {
AppFirebaseMessagingService.getCurrentDeviceToken();
}
}
<service android:name=".AppFirebaseMessagingService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Depois de registrar seu token FCM, você obterá dados do FCM Qiscus Chat SDK, que você pode manipular usando o método handleMessageReceived()
, por exemplo:
import android.util.Log;
import androidx.annotation.NonNull;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.qiscus.sdk.chat.core.QiscusCore;
import com.qiscus.sdk.chat.core.util.QiscusFirebaseMessagingUtil;
public class AppFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("Qiscus", "onMessageReceived " + remoteMessage.getData().toString());
if (QiscusFirebaseMessagingUtil.handleMessageReceived(remoteMessage)) {
return;
}
}
@Override
public void onNewToken(@NonNull String s) {
super.onNewToken(s);
Log.d("Qiscus", "onNewToken " + s);
QiscusCore.registerDeviceToken(s);
}
public static void getCurrentDeviceToken() {
final String token = QiscusCore.getFcmToken();
if (token != null) {
FirebaseMessaging.getInstance().deleteToken()
.addOnCompleteListener(task -> {
QiscusCore.removeDeviceToken(token);
getTokenFcm();
})
.addOnFailureListener(e -> QiscusCore.registerDeviceToken(token));
} else {
getTokenFcm();
}
}
private static void getTokenFcm() {
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(task -> {
if (task.isSuccessful() && task.getResult() != null) {
QiscusCore.registerDeviceToken(task.getResult());
} else {
Log.e("Qiscus", "getCurrentDeviceToken Failed : " +
task.getException());
}
});
}
}
Qiscus Chat SDK fornece uma maneira simples de permitir que aplicativos publiquem e ouçam alguns eventos em tempo real. Você pode publicar digitação, leitura, status do usuário e eventos personalizados para poder manipular livremente no manipulador de eventos. Isso permite informar aos usuários que outro participante está ativamente envolvido na comunicação com eles.
Qiscus Chat SDK está usando EventBus para transmitir eventos para todos os aplicativos. Você pode aprender mais sobre EventBus neste site. O que você precisa fazer é registrar o objeto que receberá o evento do EventBus. Você pode chamá-lo assim:
EventBus . getDefault (). register ( this );
Quando você não precisar mais ouvir o evento, será necessário cancelar o registro do receptor chamando este método:
EventBus . getDefault (). unregister ( this );
Este é um exemplo de como registrar uma atividade para receber evento do EventBus:
public class MyActivity extends AppCompatActivity {
@ Override
protected void onCreate ( @ Nullable Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_my );
// listen room event
QiscusPusherApi . getInstance (). subscribeChatRoom ( qiscusChatRoom );
// listen user status
QiscusPusherApi . getInstance (). subscribeUserOnlinePresence ( "userId" );
}
@ Override
protected void onResume () {
super . onResume ();
EventBus . getDefault (). register ( this ); // register to EventBus
}
@ Override
protected void onPause () {
super . onPause ();
EventBus . getDefault (). unregister ( this ); // unregister from EventBus
}
@ Subscribe
public void onReceiveComment ( QiscusCommentReceivedEvent event ) {
event . getQiscusComment (); // to get the comment
}
@ Subscribe
public void onReceiveRoomEvent ( QiscusChatRoomEvent roomEvent ) {
switch ( roomEvent . getEvent ()) {
case TYPING :
roomEvent . getRoomId (); // this is the room id
roomEvent . getUser (); // this is the qiscus user id
roomEvent . isTyping (); // true if the user is typing
break ;
case DELIVERED :
roomEvent . getRoomId (); // this is the room id
roomEvent . getUser (); // this is the qiscus user id
roomEvent . getCommentId (); // the comment id was delivered
break ;
case READ :
roomEvent . getRoomId (); // this is the room id
roomEvent . getUser (); // this is the qiscus user id
roomEvent . getCommentId (); // the comment id was read
break ;
case CUSTOM :
//here, you can listen custom event
roomEvent . getRoomId (); // this is the room id
roomEvent . getUser (); // this is the qiscus user id
roomEvent . getEventData (); //event data (JSON)
break ;
}
}
@ Subscribe
public void onUserStatusChanged ( QiscusUserStatusEvent event ) {
event . getUser (); // this is the qiscus user id
event . isOnline (); // true if user is online
event . getLastActive (); // Date of last active user
}
@ Override
protected void onDestroy () {
super . onDestroy ();
// stop listening room event
QiscusPusherApi . getInstance (). unsubsribeChatRoom ( qiscusChatRoom );
// stop listening user status
QiscusPusherApi . getInstance (). unsubscribeUserOnlinePresence ( "qiscus_user_id" );
}
}
ProGuard é o otimizador mais popular para bytecode Java. Isso torna seus aplicativos Java e Android menores e mais rápidos. Leia aqui para obter mais detalhes sobre o Proguard. Se você estiver usando o Proguard em seu aplicativo, certifique-se de adicionar as regras do Proguard do Qiscus das Regras do Qiscus Proguard às suas regras do Proguard.
Para você que prefere codificar com RXJava, o Qiscus Chat SDK oferece suporte a RXJava. Portanto, você pode fazer qualquer coisa como faz com Native Java. Por exemplo, para definir um usuário, conforme explicado na seção Autenticação Básica, você pode fazer o mesmo com RXJava. Aqui está um exemplo de como você pode configurar o usuário com ele:
// Setup qiscus account with rxjava example
Qiscus . setUser ( "[email protected]" , "password" )
. withUsername ( "Tony Stark" )
. withAvatarUrl ( "http://avatar.url.com/handsome.jpg" )
. save ()
. subscribeOn ( Schedulers . io ())
. observeOn ( AndroidSchedulers . mainThread ())
. subscribe ( qiscusAccount -> {
//do anything if success
}, throwable -> {
//do anything if error occurs
});