Learn how to install QuickBlox SDK and send your first message.
QuickBlox SDK helps you implement a real-time chat, video chat, and push notifications to your app. You can fully concentrate on your mobile app development. QuickBlox Android SDK supports both Java and Kotlin programming languages.
If you are just starting your app and developing it from scratch, we recommend to use our sample apps. We use GitHub repositories to make it easy to explore, copy, and modify our code samples. The guide on how to launch and configure the sample app is on GitHub.
For more samples, head to our Code Samples page. These sample apps are available on GitHub so feel free to browse them there. Just clone the repository and modify the source code for your own projects.
QuickBlox application includes everything that brings messaging right into your application - chat, video calling, users, push notifications, etc. To create a QuickBlox application, follow the steps below:
Register a new account following this link. Type in your email and password to sign in. You can also sign in with your Google or GitHub accounts.
Create the app clicking New app button.
Configure the app. Type in the information about your organization into corresponding fields and click Add button.
Go to Dashboard => YOUR_APP => Overview section and copy your Application ID, Authorization Key, Authorization Secret, and Account Key .
To connect QuickBlox SDK to your app, import QuickBlox SDK dependencies via build.gradle file.
Include reference to SDK repository in your project-level build.gradle file at the root directory. Specify the URL of QuickBlox repository where the files are stored. Following this URL gradle finds SDK artifacts.
When the artifacts are found in QuickBlox repository, they get imported to particular SDK modules in build.gradle project file. Add the following code lines to app-level build.gradle file.
Initialize the SDK with your application credentials. Pass the APPLICATION_ID, AUTH_KEY, AUTH_SECRET, and ACCOUNT_KEY to the init() method.
Copy
static final String APPLICATION_ID = "67895";static final String AUTH_KEY = "lkjdueksu7392kj";static final String AUTH_SECRET = "BTFsj7Rtt27DAmT";static final String ACCOUNT_KEY = "9yvTe17TmjNPqDoYtfqp";//QBSettings.getInstance().init(getApplicationContext(), APPLICATION_ID, AUTH_KEY, AUTH_SECRET);QBSettings.getInstance().setAccountKey(ACCOUNT_KEY);
Copy
static final String APPLICATION_ID = "67895";static final String AUTH_KEY = "lkjdueksu7392kj";static final String AUTH_SECRET = "BTFsj7Rtt27DAmT";static final String ACCOUNT_KEY = "9yvTe17TmjNPqDoYtfqp";//QBSettings.getInstance().init(getApplicationContext(), APPLICATION_ID, AUTH_KEY, AUTH_SECRET);QBSettings.getInstance().setAccountKey(ACCOUNT_KEY);
Copy
private const val APPLICATION_ID = "67895"private const val AUTH_KEY = "lkjdueksu7392kj"private const val AUTH_SECRET = "BTFsj7Rtt27DAmT"private const val ACCOUNT_KEY = "9yvTe17TmjNPqDoYtfqp"//QBSettings.getInstance().init(applicationContext, APPLICATION_ID, AUTH_KEY, AUTH_SECRET)QBSettings.getInstance().accountKey = ACCOUNT_KEY
You must initialize SDK before calling any methods through the SDK, except for the init() method. If you attempt to call a method without connecting, the error is returned.
Security
It’s not recommended to keep your authKey and authSecret inside an application in production mode, instead of this, the best approach will be to store them on your backend and initialize QuickBlox SDK with applicationId and acountKey only. More details you can find in Initialize QuickBlox SDK without Authorization Key and Secret section.
Now, it is time to log in with the user. To get it done, set the login and password of the user, call the signIn() method, and pass the user to it using the code snippet below.
Copy
final QBUser user = new QBUser();user.setLogin("johnsmith");user.setPassword("johnPassword");QBUsers.signIn(user).performAsync(new QBEntityCallback<QBUser>() { @Override public void onSuccess(QBUser user, Bundle bundle) { } @Override public void onError(QBResponseException exception) { }});
Copy
final QBUser user = new QBUser();user.setLogin("johnsmith");user.setPassword("johnPassword");QBUsers.signIn(user).performAsync(new QBEntityCallback<QBUser>() { @Override public void onSuccess(QBUser user, Bundle bundle) { } @Override public void onError(QBResponseException exception) { }});
Kotlin
Copy
val user = QBUser()user.login = "johnsmith"user.password = "johnPassword"QBUsers.signIn(user).performAsync(object : QBEntityCallback<QBUser> { override fun onSuccess(user: QBUser?, bundle: Bundle?) { } override fun onError(exception: QBResponseException?) { }})
Having authorized a user, you can proceed with connecting to the chat server to start using Chat module functionality. Call the login() method to connect to the chat server.
Java
Copy
final QBUser user = new QBUser();user.setId(12345);user.setPassword("johnPassword");QBChatService.getInstance().login(user, new QBEntityCallback() { @Override public void onSuccess(Void aVoid, Bundle bundle) { } @Override public void onError(QBResponseException exception) { }});
Java
Copy
final QBUser user = new QBUser();user.setId(12345);user.setPassword("johnPassword");QBChatService.getInstance().login(user, new QBEntityCallback() { @Override public void onSuccess(Void aVoid, Bundle bundle) { } @Override public void onError(QBResponseException exception) { }});
Kotlin
Copy
val user = QBUser()user.id = 12315user.password = "johnPassword"QBChatService.getInstance().login(user, object : QBEntityCallback<Void> { override fun onSuccess(aVoid: Void?, bundle: Bundle?) { } override fun onError(exception: QBResponseException?) { }})
QuickBlox provides three types of dialogs: 1-1 dialog, group dialog, and public dialog. Learn more about dialogs here.
Let’s create a simple 1-1 dialog. Set the type and occupants IDs of the dialog using the the setType() and setOccupantsIds() methods. Then, call the createChatDialog() method and pass the dialog to it.
Java
Copy
ArrayList<Integer> occupantIdsList = new ArrayList<Integer>();int occupantId = 123;occupantIdsList.add(occupantId);QBChatDialog dialog = new QBChatDialog();dialog.setType(QBDialogType.PRIVATE);dialog.setOccupantsIds(occupantIdsList);// or just use DialogUtils//QBChatDialog dialog = DialogUtils.buildPrivateDialog(recipientId);QBRestChatService.createChatDialog(dialog).performAsync(new QBEntityCallback<QBChatDialog>() { @Override public void onSuccess(QBChatDialog result, Bundle bundle) { } @Override public void onError(QBResponseException exception) { }});
Java
Copy
ArrayList<Integer> occupantIdsList = new ArrayList<Integer>();int occupantId = 123;occupantIdsList.add(occupantId);QBChatDialog dialog = new QBChatDialog();dialog.setType(QBDialogType.PRIVATE);dialog.setOccupantsIds(occupantIdsList);// or just use DialogUtils//QBChatDialog dialog = DialogUtils.buildPrivateDialog(recipientId);QBRestChatService.createChatDialog(dialog).performAsync(new QBEntityCallback<QBChatDialog>() { @Override public void onSuccess(QBChatDialog result, Bundle bundle) { } @Override public void onError(QBResponseException exception) { }});
Kotlin
Copy
val occupantIdsList = ArrayList<Int>()val occupantId = 123occupantIdsList.add(occupantId)val dialog = QBChatDialog()dialog.type = QBDialogType.PRIVATEdialog.setOccupantsIds(occupantIdsList)// or just use DialogUtils//QBChatDialog dialog = DialogUtils.buildPrivateDialog(recipientId);QBRestChatService.createChatDialog(dialog).performAsync(object : QBEntityCallback<QBChatDialog> { override fun onSuccess(result: QBChatDialog?, bundle: Bundle?) { } override fun onError(exception: QBResponseException?) { }})
Through QBDialogMessageListener you can monitor whether an incoming message or error is received from QuickBlox server. Use QBIncomingMessagesManager to listen to all incoming messages and related errors.