QuickBlox Documentation

QuickBlox provides powerful Chat API and SDK to add real-time messaging and video calls to your web and mobile apps. Learn how to integrate QuickBlox across multiple platforms.

Setup

Learn how to add and configure QuickBlox SDK for your app.

🚧

This is our documentation for beta version of QuickBlox Flutter SDK. Please contact our Customer Support Team to provide your feedback, suggestions, and requests to improve this page.

Follow the instructions below to ensure that QuickBlox SDK runs smoothly with your app.

Visit our Key Concepts page to get an overall understanding of the most important QuickBlox concepts.

Get application credentials

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:

  1. 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.
  2. Create the app clicking New app button.
  3. Configure the app. Type in the information about your organization into corresponding fields and click Add button.
  4. Go to Dashboard => YOUR_APP => Overview section and copy your Application ID, Authorization Key, Authorization Secret, and Account Key .

Requirements

The minimum requirements for QuickBlox Flutter SDK are:

  • iOS 13.0
  • Android (minimum version 5.0, API 21)
  • Flutter (minimum version 2.12.0)

Install QuickBlox SDK into your app

📘

To manage project dependencies the Flutter should be installed.

To connect QuickBlox to your app just add it into your project dependencies in pubspec.yaml file located in the root project directory => dependencies section.

dependencies:
  flutter:
    sdk: flutter

  # The following adds the QuickBlox SDK to your application.
  quickblox_sdk: 0.5.0-beta

Add permissions

For Android

Your app requires adding some specific permissions to access the camera, microphone, internet, and storage permissions.

To configure chat functionality, add permissions below:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

To configure video chat functionality, add permissions below:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />

📘

Note that mentioning the camera and microphone permissions in the manifest isn't always enough. You need to request camera and microphone permissions additionally at runtime.

For iOS

You can use our SDK in the background mode as well. If you want to receive push notifications when the app goes to background mode, this requires you to add specific app permissions. Under the app build settings, open the Capabilities tab and turn on Remote notifications checkbox only.

add remote notificatio permission, for your ios app

If you want to use video calling functionality in the background mode set the Audio, AirPlay, and Picture in Picture checkboxes.

add permission for Audio, AirPlay, and Picture in Picture, for your ios app

Initialize QuickBlox SDK

Initialize the framework with your application credentials. Pass Application ID, Authorization Key, Authorization Secret, and Account Key to the init() method.

String appId = 76730;
String authKey = "XydaWcf8OO9xhGT";
String authSecret = "iiohfdija792hjt";
String accountKey = "7yvNe17TnjNUqDoPwfqp";

void init() async {
  try {
    await QB.settings.init(appId, authKey, authSecret, accountKey);
  } on PlatformException catch (e) {
    // Some error occurred, look at the exception message for more details
  }
}

Argument

Required

Description

appId

yes

Application identifier.

authKey

yes

Authorization key.

authSecret

yes

Authorization secret.

accountKey

yes

Required to get actual apiEndpoint and chatEndpoint for the right server.

Point SDK to enterprise server

To point QuickBlox SDK to the QuickBlox enterprise server, you should pass apiEndpoint and chatEndpoint to the init() method.

String appId = 76730;
String authKey = "XydaWcf8OO9xhGT";
String authSecret = "iiohfdija792hjt";
String accountKey = "7yvNe17TnjNUqDoPwfqp";
String apiEndpoint = "api.endpoint.com";
String chatEndpoint = "chat.enpoint.com";

void init() async {
  try {
    await QB.settings.init(appId, authKey, authSecret, accountKey, apiEndpoint: apiEndpoint, chatEndpoint: chatEndpoint);
  } on PlatformException catch (e) {
    // Some error occurred, look at the exception message for more details
  }
}

Argument

Required

Description

apiEndpoint

no

API endpoint.

chatEndpoint

no

Chat endpoint.

📘

For Basic, Startup, and Growth plan users

- Make sure to set accountKey to get all correct endpoints.
- Make sure to omit apiEndpoint and chatEndpoint fields to provide a smooth migration between servers.

📘

For Enterprise plan users

Contact our sales team to get API endpoint and chat endpoint.

Enable auto-reconnect to Chat

QuickBlox Chat runs over XMPP protocol. To receive messages in a real time mode, the application should be connected to the Chat over XMPP protocol. To enable auto-reconnect to Chat, call enableAutoReconnect() method and pass true to it.

void enableAutoReconnect() async {
  try {
    await QB.settings.enableAutoReconnect(true);
  } on PlatformException catch (e) {
    // Some error occurred, look at the exception message for more details
  }
}

Thus, if XMPP connection is lost and autoreconnect functionality is enabled, the app connects to Chat automatically. You can disable autoreconnection to Chat by passing enable parameter as false to enableAutoReconnect() method.

void enableAutoReconnect() async {
  try {
    await QB.settings.enableAutoReconnect(false);
  } on PlatformException catch (e) {
    // Some error occurred, look at the exception message for more details
  }
}

📘

By default, this parameter is enabled. Set autoreconnection before calling the login() method so it could be applied in a current chat.

Enable logging

Logging functionality allows you to keep track of all events and activities while running your app. As a result, you can monitor the operation of the SDK and improve the debug efficiency. There are 3 logging use cases:

  • REST API logging is used to monitor REST API calls.
  • Chat logging is used to monitor chat issues.
  • WebRTC logging is used to gather issues with video.
  1. Go over this section to learn how to enable logging for your iOS app.
  2. Go over this section to learn how to enable logging for your Android app.

Message carbons

Message carbons functionality allows for multi-device support. Thus, all user messages get copied to all their devices so they could keep up with the current state of the conversation. For example, a User A has phone running conversations and desktop running conversations. User B has desktop running conversations. When User B sends a message to User A, the message shows on both the desktop and phone of User A.

Enable message carbons

void enableCarbons() async {
  try {
    await QB.settings.enableCarbons();
  } on PlatformException catch (e) {
    // Some error occurred, look at the exception message for more details
  }
}

Disable message carbons

void disableCarbons() async {
  try {
    await QB.settings.disableCarbons();
  } on PlatformException catch (e) {
    // Some error occurred, look at the exception message for more details
  }
}

🚧

By default, this parameter is turned off. Keep it enabled if you want to receive messages on all devices of the particular user (when a user is logged in on several devices).

Stream management

Stream management has two important features Stanza Acknowledgements and Stream Resumption:

  • Stanza Acknowledgements is the ability to know if a stanza or series of stanzas has been received by one's peer. In other words, a reply is requested on every sent message. If the reply is received, the message is considered as delivered.
  • Stream Resumption is the ability to quickly resume a stream that has been terminated. So once a connection is re-established, Stream Resumption is executed. By matching the sequence numbers assigned to each Stanza Acknowledgement a server and client can verify which messages are missing and request to resend missing messages.

Call initStreamManagement() method and pass autoReconnect and messageTimeout parameters to it to enable stream management.

bool autoReconnect = true;
int messageTimeout = 3;

void initStreamManagement() async {
  try {
    await QB.settings.initStreamManagement(messageTimeout, autoReconnect: autoReconnect);
  } on PlatformException catch (e) {
    // Some error occurred, look at the exception message for more details
  }
}

Argument

Required

Description

messageTimeout

yes

Preferred resumption time (in seconds). If this parameter is greater than 0, then it is applied, otherwise it is not applied.

autoReconnect

no

Set this parameter to apply Stream resumption. Set it as true to use Stream resumption for new connections. Default: false.

📘

You should enable Stream Management before you do the login() because the Stream Management is initialized while Chat login is performed.

The Stream Management defines an extension for active management of a stream between a client and server, including features for stanza acknowledgments.

Updated about a month ago


What's Next

Authentication

Setup


Learn how to add and configure QuickBlox SDK for your app.

Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.