Authentication
In order to use the features of the Chat SDK for iOS in your client apps, a SendbirdChat
instance should be initiated in each client app through user authentication with the Sendbird server. The instance communicates and interacts with the server based on the authenticated user account and is allowed to use the Chat SDK's features. This page explains how to authenticate your user with the server.
Initialize the Chat SDK with APP_ID
To use our chat features, you must initialize the SendbirdChat
instance by passing APP_ID
of your Sendbird application as an argument to a parameter of the initialize(params:migrationStartHandler:completionHandler:)
method. The initialize(params:migrationStartHandler:completionHandler:)
method must be called once across your client app. Typically, initialization is implemented in the user login view.
With the implementation of local caching, you must determine whether you would like to use local caching and configure its settings through localCacheConfig
and InitParams
. First, set values to maxSize
, clearOrder
, and isEncryptionEnabled
in LocalCacheConfig
. This determines how much space in local cache the SDK can use, in which order it should clear cached data when the cached data reaches the limit, and which type of data protection you will apply. Then use the localCacheConfig
instance in the InitParams
constructor. Also set isLocalCachingEnabled
in the params to true
so that the SDK can use local cache for its collection instances. To learn more, see the Database management and Encryption sections under Local caching.
Additionally, two callback functions, migrationStartHandler
and completionHandler
, have also been added to the initialization code as shown below.
The isLocalCachingEnabled
parameter determines whether or not the client app will use local storage through Sendbird Chat SDK. Since this is optional, the default value is set to false
. If you want to build a client app with our local caching functionalities, set the isLocalCachingEnabled
parameter to true
.
Then, the completionHandler
gets the initialization status through different event handlers and informs the client app whether the initialization is successful or not. On the other hand, the migrationStartHandler
is called when the migration for local caching has started.
Connect to the Sendbird server with a user ID
By default, the Sendbird server can authenticate a user with just a unique user ID. Then, the server queries the database to check for a match upon connection request. If no matching user ID is found, the server creates a new user account with the user ID. The ID should be unique within a Sendbird application to be distinguishable from other identifiers such as a hashed email address or a phone number in your service.
While authenticating with just the user ID is convenient in the developing and testing stages of a service, a more secure authentication process using tokens is strongly recommended for most production environments.
Note: Go to the event delegate page to learn more about the usages of the Chat SDK's delegates and callbacks.
Note: Apart from initializing the
SendbirdChat
instance, you should connect to the Sendbird server before calling almost every method through the Chat SDK. If you attempt to call a method without connecting, a.connectionRequired (800101)
error will be returned.
Connect to the Sendbird server with a user ID and a token
For a more secure way of authenticating a user, you can require an authentication token, which can be an access token or a session token, in addition to a unique user ID. Any token issued for a user must be provided to the Sendbird server each time the user logs in by passing the token as an argument to the authToken
parameter of the connect(userId:authToken:completionHandler:)
method.
Using an access token
Through our Chat Platform API, an access token can be generated when creating a user. You can also issue an access token for an existing user. Once an access token is issued, a user is required to provide the access token in the connect()
method which is used for logging in.
-
Using the Chat API, create a Sendbird user account with information submitted when a user signs up or logs in to your service.
-
Save the user ID along with the issued access token to your persistent storage which is securely managed.
-
When the user attempts to log in to a client app, load the user ID and access token from the storage, and then pass them to the
connect(userId:authToken:completionHandler:)
method. -
Periodically replacing the user's access token is recommended to protect the account.
Note: From Settings > Application > Security > Access token permission setting on your dashboard, you're able to prevent users without an access token from logging in to your Sendbird application or restrict their access to read and write messages.
Using a session token
You can also use a session token instead of an access token to authenticate a user. Session tokens are a more secure option because they expire after a certain period whereas access tokens don't. See Chat Platform API guides for further explanation about the difference between access token and session token, how to issue a session token, and how to revoke all session tokens.
Set a session delegate
When a user is authenticated with a session token, the Chat SDK connects the user to the Sendbird server and can send data requests to the server for ten minutes as long as the session token hasn't expired or hasn't been revoked.
Upon the user's session expiration, the Chat SDK will refresh the session internally using a SessionDelegate
. However, if the session token has expired or has been revoked, the Chat SDK can't do so. In that case, the client app needs to implement a SessionDelegate
instance to refresh the token and pass it back to the SDK so that it can refresh the session again.
Note: A
SessionDelegate
instance must be set before the server connection is requested.
The following code shows how to implement the delegate methods.
When the SessionDelegate.sessionTokenDidRequire(successCompletion:failCompletion:)
is invoked, the SDK waits for a specific amount of time to receive a new session token from the client app.
If neither successCompletion
nor failCompletion
are called within the specified timeout period, the socket connection will be disconnected. If this occurs, the client app has to manually call SendbirdChat.connect(userId:authToken:)
for a new socket connection.
The timeout period can be set using the setSessionTokenRefreshTimeout(_:)
method as shown in the code below.
Disconnect from the Sendbird server
Disconnect a user from the Sendbird server when they no longer need to receive messages from an online state. However, the user will still receive push notifications for new messages from group channels they've joined.
When a client app is disconnected, all event delegates registered through add(_:identifier:)
stop receiving event callbacks from the server. Then, all internally cached data in the client app are flushed. This includes channels that are cached when the getChannel(url:completionHandler:)
method of OpenChannel
or GroupChannel
is called, as well as locally cached channels and messages.
Disconnect the WebSocket only
While calling SendbirdChat.disconnect()
disconnects the WebSocket as well as clear local cache data, you can call SendbirdChat.disconnectWebSocket
to disconnect the WebSocket only and keep the locally cached data.
To reconnect after calling disconnectWebSocket
, use the SendbirdChat.connect()
method as shown in the code below.