# Chat SDK Initialization
## Setup main application subclass
The best place to initialize the Chat SDK is in the `onCreate` method of your `Application` subclass.
If you don't already have this class, create it:
```
public class MainApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// Chat SDK intialization goes here
}
}
```
Register this class in your `AndroidManifest.xml`:
```
<application android:name=".MainApp">
```
> Note: Sometimes people confuse the `onCreate` method in the main activity with the `onCreate` method from the `Activity` class. Although in some cases it is possible to setup the Chat SDK from inside an activity, it is not recommended.
## Configure Chat SDK
Chat SDK offers two ways to configure the library - quick config and advanced. Quick allows you get the project up and running with a standard configuration.
### Quick Start
#### Firebase
```
ChatSDKFirebase.quickStart(...);
```
#### FireStream
```
ChatSDKFireStream.quickStart(...);
```
#### XMPP
```
ChatSDKXMPP.quickStart(...);
```
### Advanced Configuration
#### Builder pattern
The Chat SDK and it's modules use the builder pattern for configuration.
You will always first call `builder()` then set your configuration then call `build()` to finish.
#### Modules
The Chat SDK contains a numer of optional modules. These can be added with the `addModule` method. At the very minimum, you should activate the `UIModule` and one of `FirebaseModule`, `XMPPModule` or `FireStreamModule`.
##### Full example
Here is a default configuration.
```
try {
ChatSDK.builder()
.setGoogleMaps("Your Google Static Maps API key")
.setPublicChatRoomLifetimeMinutes(TimeUnit.HOURS.toMinutes(24))
.build()
// Add the Firebase network adapter module
.addModule(
FirebaseModule.builder()
.setFirebaseRootPath("pre_1")
.setDevelopmentModeEnabled(true)
.build()
)
// Add the UI module
.addModule(UIModule.builder()
.setPublicRoomCreationEnabled(true)
.setPublicRoomsEnabled(true)
.build()
)
// Add modules to handle file uploads, push notifications
.addModule(FirebaseUploadModule.shared())
.addModule(FirebasePushModule.shared())
// Enable Firebase UI with phone and email auth
.addModule(FirebaseUIModule.builder()
.setProviders(EmailAuthProvider.PROVIDER_ID, PhoneAuthProvider.PROVIDER_ID)
.build()
)
// Activate
.build()
.activate(this);
} catch (Exception e) {
e.printStackTrace();
}
```
##### Configuration options
The Chat SDK has many configuration options. Too many to list here. The best way to see what's available is by using auto-complete in Android Studio. After `module.build().` press (control + enter) and the list of available options will appear. You can also (cmd + click) to inspect the `Config` class and see a full list of the available options.