{"id":"5a6ad1d5-971c-425e-adcc-e7fe5edab773","shortId":"mrdB24","kind":"skill","title":"cometchat-android-v5-core","tagline":"Foundational rules for CometChat Android UI Kit v5. Initialization, login, UIKitSettings builder, dependency setup, and anti-patterns. Read this first.","description":"> **Companion skills:** `cometchat-android-v5-components` provides the component\n> catalog (what exists); `cometchat-android-v5-placement` covers where to put\n> chat in your app; `cometchat-android-v5-theming` covers visual customization.\n\n## Purpose\n\nThis is the foundational skill for every CometChat Android UI Kit v5 integration. It teaches how CometChat works on Android — initialization, login, the UIKitSettings builder, Gradle dependency setup, manifest permissions, and the anti-patterns that silently break integrations.\n\n**Read this skill first, before any component or placement skill.**\n\n---\n\n## Use this skill when\n\n- Setting up CometChat in a new Android project\n- Initializing the SDK (`CometChatUIKit.init`)\n- Logging in / logging out users\n- Configuring `UIKitSettings` via the builder\n- Adding Gradle dependencies\n- Debugging init or login failures\n- \"How do I set up CometChat?\"\n- \"CometChat isn't initializing\"\n\n## Do not use this skill when\n\n- Customizing component appearance → use `cometchat-android-v5-theming`\n- Adding a specific feature (calls, reactions) → use `cometchat-android-v5-features`\n- Writing custom message templates → use `cometchat-android-v5-customization`\n- Diagnosing runtime crashes → use `cometchat-android-v5-troubleshooting`\n\n---\n\n## 1. Gradle Dependencies\n\nAdd the CometChat UI Kit dependency to your app-level `build.gradle`:\n\n```groovy\ndependencies {\n    implementation 'com.cometchat:chat-uikit-android:5.+'\n}\n```\n\nThe UI Kit transitively pulls in the CometChat Chat SDK. For voice/video calling, add the calling SDK separately:\n\n```groovy\ndependencies {\n    implementation 'com.cometchat:chat-uikit-android:5.+'\n    implementation 'com.cometchat:calls-sdk-android:4.+'  // optional — only for calls\n}\n```\n\nEnsure your project-level `build.gradle` includes the CometChat Maven repository:\n\n```groovy\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n        maven { url \"https://dl.cloudsmith.io/public/cometchat/cometchat/maven/\" }\n    }\n}\n```\n\n**Min SDK:** 24 (Android 7.0). **Compile SDK:** 34+. **Java:** 8+. **Kotlin:** 1.8+.\n\n> **⚠️ Important:** Always use the published Maven artifact (`com.cometchat:chat-uikit-android:5.+`). Never use `implementation project(':chatuikit')` or other local module references — those are only for CometChat's own internal development. The Chat SDK (`com.cometchat:chat-sdk-android`) is transitively included by the UI Kit, so you do not need to add it separately.\n\n### 1a. AndroidX + Jetifier (REQUIRED — non-negotiable)\n\nThe CometChat Chat SDK transitively depends on the legacy `com.android.support:support-compat` library. Modern Android Studio projects (Arctic Fox+) default to `androidx.core` instead. Without Jetifier, Gradle sees the same classes (`android.support.v4.os.ResultReceiver`, etc.) declared in both libraries and fails the build with:\n\n```\nDuplicate class android.support.v4.os.ResultReceiver$1 found in modules\n  core-1.16.0.aar -> core-1.16.0-runtime (androidx.core:core:1.16.0)\n  and support-compat-26.1.0.aar -> support-compat-26.1.0-runtime\n  (com.android.support:support-compat:26.1.0)\n```\n\n**Add these two lines to `gradle.properties` at the project root** before any UI Kit code is wired in:\n\n```properties\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n```\n\nBoth are **mandatory**. Jetifier rewrites the legacy `android.support.*` references in the CometChat SDK's transitive deps to their `androidx.*` equivalents at build time, so the duplicate-class error doesn't happen.\n\nA freshly-created Android Studio project usually has `android.useAndroidX=true` already (Arctic Fox+) but **Jetifier is OFF by default** since it's deprecated in newer SDK landscapes. The CometChat V5 SDK still needs it. If `gradle.properties` doesn't have either line, append both. If it has `useAndroidX=true` but no Jetifier line, add the Jetifier line. Idempotent.\n\n---\n\n## 2. Initialization\n\nCometChat must be initialized exactly once before any UI component is used. Initialization is asynchronous and must complete fully before mounting any `CometChat*` view.\n\n### The UIKitSettingsBuilder\n\n**Java:**\n```java\nimport com.cometchat.chatuikit.shared.cometchatuikit.CometChatUIKit;\nimport com.cometchat.chatuikit.shared.cometchatuikit.UIKitSettings;\n\nUIKitSettings uiKitSettings = new UIKitSettings.UIKitSettingsBuilder()\n    .setAppId(APP_ID)           // Required. String from the CometChat dashboard.\n    .setRegion(REGION)          // Required. \"us\", \"eu\", \"in\", etc.\n    .setAuthKey(AUTH_KEY)       // Required for dev mode. Omit in production.\n    .subscribePresenceForAllUsers()  // Optional — enables online/offline indicators.\n    .build();\n```\n\n**Kotlin:**\n```kotlin\nimport com.cometchat.chatuikit.shared.cometchatuikit.CometChatUIKit\nimport com.cometchat.chatuikit.shared.cometchatuikit.UIKitSettings\n\nval uiKitSettings = UIKitSettings.UIKitSettingsBuilder()\n    .setAppId(APP_ID)\n    .setRegion(REGION)\n    .setAuthKey(AUTH_KEY)\n    .subscribePresenceForAllUsers()\n    .build()\n```\n\n### UIKitSettingsBuilder — full method reference\n\n| Method | Type | Description |\n|---|---|---|\n| `setAppId(String)` | Required | CometChat App ID from the dashboard |\n| `setRegion(String)` | Required | Region: `\"us\"`, `\"eu\"`, `\"in\"` |\n| `setAuthKey(String)` | Dev only | Auth Key for client-side login. Omit in production. |\n| `subscribePresenceForAllUsers()` | Optional | Subscribe to presence for all users |\n| `subscribePresenceForFriends()` | Optional | Subscribe to presence for friends only |\n| `subscribePresenceForRoles(List<String>)` | Optional | Subscribe to presence for specific roles |\n| `setAutoEstablishSocketConnection(Boolean)` | Optional | Auto-connect WebSocket. Default: `true` |\n| `setAIFeatures(List<AIExtensionDataSource>)` | Optional | Custom AI features list. Default: built-in AI features |\n| `setExtensions(List<ExtensionsDataSource>)` | Optional | Custom extensions list. Default: built-in extensions |\n| `setDateTimeFormatterCallback(DateTimeFormatterCallback)` | Optional | Custom date/time formatting |\n| `overrideAdminHost(String)` | Advanced | Override admin API host |\n| `overrideClientHost(String)` | Advanced | Override client API host |\n\n### Init call\n\n**Java:**\n```java\nCometChatUIKit.init(context, uiKitSettings, new CometChat.CallbackListener<String>() {\n    @Override\n    public void onSuccess(String s) {\n        // SDK initialized — safe to login and use components\n    }\n\n    @Override\n    public void onError(CometChatException e) {\n        // Handle init failure\n    }\n});\n```\n\n**Kotlin:**\n```kotlin\nCometChatUIKit.init(context, uiKitSettings, object : CometChat.CallbackListener<String>() {\n    override fun onSuccess(s: String) {\n        // SDK initialized — safe to login and use components\n    }\n\n    override fun onError(e: CometChatException) {\n        // Handle init failure\n    }\n})\n```\n\n### Init must happen once\n\nCall `CometChatUIKit.init()` in your `Application.onCreate()` or your launcher `Activity.onCreate()`. Use `CometChatUIKit.isSDKInitialized()` to guard against double-init:\n\n**Java:**\n```java\nif (!CometChatUIKit.isSDKInitialized()) {\n    CometChatUIKit.init(this, uiKitSettings, new CometChat.CallbackListener<String>() {\n        @Override\n        public void onSuccess(String s) {\n            // proceed to login\n        }\n\n        @Override\n        public void onError(CometChatException e) {\n            // show error\n        }\n    });\n}\n```\n\n---\n\n## 3. Login\n\n### Development mode\n\nUse `CometChatUIKit.login(uid, callback)` with a test UID. Every new CometChat app comes with five pre-created test users: `cometchat-uid-1` through `cometchat-uid-5`.\n\n**Java:**\n```java\nif (CometChatUIKit.getLoggedInUser() == null) {\n    CometChatUIKit.login(\"cometchat-uid-1\", new CometChat.CallbackListener<User>() {\n        @Override\n        public void onSuccess(User user) {\n            // Navigate to chat screen\n        }\n\n        @Override\n        public void onError(CometChatException e) {\n            // Handle login failure\n        }\n    });\n}\n```\n\n**Kotlin:**\n```kotlin\nif (CometChatUIKit.getLoggedInUser() == null) {\n    CometChatUIKit.login(\"cometchat-uid-1\", object : CometChat.CallbackListener<User>() {\n        override fun onSuccess(user: User) {\n            // Navigate to chat screen\n        }\n\n        override fun onError(e: CometChatException) {\n            // Handle login failure\n        }\n    })\n}\n```\n\n### Production mode\n\nUse `CometChatUIKit.loginWithAuthToken(token, callback)` with a token obtained from your backend. The backend generates the token using the CometChat REST API with your REST API Key (not the client-side Auth Key).\n\n**Java:**\n```java\nCometChatUIKit.loginWithAuthToken(authToken, new CometChat.CallbackListener<User>() {\n    @Override\n    public void onSuccess(User user) {\n        // Navigate to chat screen\n    }\n\n    @Override\n    public void onError(CometChatException e) {\n        // Handle login failure\n    }\n});\n```\n\n### Getting the current logged-in user\n\n```java\nUser currentUser = CometChatUIKit.getLoggedInUser();\nif (currentUser != null) {\n    String uid = currentUser.getUid();\n}\n```\n\n### Logout\n\n**Java:**\n```java\nCometChatUIKit.logout(new CometChat.CallbackListener<String>() {\n    @Override\n    public void onSuccess(String s) {\n        // Navigate to login screen\n    }\n\n    @Override\n    public void onError(CometChatException e) {\n        // Handle logout failure\n    }\n});\n```\n\n### Create user (dev mode only)\n\n```java\nUser user = new User();\nuser.setUid(\"user-123\");\nuser.setName(\"John Doe\");\n\nCometChatUIKit.createUser(user, new CometChat.CallbackListener<User>() {\n    @Override\n    public void onSuccess(User user) { }\n\n    @Override\n    public void onError(CometChatException e) { }\n});\n```\n\n---\n\n## 4. CometChatUIKit — full public API\n\n| Method | Signature | Description |\n|---|---|---|\n| `init` | `static void init(Context, UIKitSettings, CallbackListener<String>)` | Initialize the SDK |\n| `login` | `static void login(String uid, CallbackListener<User>)` | Login with UID (dev mode) |\n| `loginWithAuthToken` | `static void loginWithAuthToken(String token, CallbackListener<User>)` | Login with auth token (production) |\n| `logout` | `static void logout(CallbackListener<String>)` | Logout current user |\n| `getLoggedInUser` | `static User getLoggedInUser()` | Get current logged-in user (null if none) |\n| `isSDKInitialized` | `static boolean isSDKInitialized()` | Check if SDK is initialized |\n| `createUser` | `static void createUser(User, CallbackListener<User>)` | Create a new user (dev mode) |\n| `sendTextMessage` | `static void sendTextMessage(TextMessage, CallbackListener<TextMessage>)` | Send a text message |\n| `sendMediaMessage` | `static void sendMediaMessage(MediaMessage, CallbackListener<MediaMessage>)` | Send a media message |\n| `sendCustomMessage` | `static void sendCustomMessage(CustomMessage, CallbackListener<CustomMessage>)` | Send a custom message |\n| `sendFormMessage` | `static void sendFormMessage(FormMessage, boolean, CallbackListener<FormMessage>)` | Send a form message |\n| `sendSchedulerMessage` | `static void sendSchedulerMessage(SchedulerMessage, boolean, CallbackListener<SchedulerMessage>)` | Send a scheduler message |\n\n---\n\n## 5. Manifest Permissions\n\nAdd these to your `AndroidManifest.xml`:\n\n```xml\n<uses-permission android:name=\"android.permission.INTERNET\" />\n<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n\n<!-- For media messages -->\n<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"\n    android:maxSdkVersion=\"32\" />\n<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />\n<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />\n<uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\" />\n\n<!-- For voice notes and calls -->\n<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n<uses-permission android:name=\"android.permission.CAMERA\" />\n\n<!-- For push notifications (Android 13+) -->\n<uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" />\n```\n\n---\n\n## 5b. App Theme Requirement\n\nCometChat UI Kit v5 ships its own theme (`CometChatTheme.DayNight`) which itself inherits from `Theme.MaterialComponents.DayNight.NoActionBar` (Material 2 — see the kit's own `chatuikit/src/main/res/values/themes.xml`). Your app's theme **must** inherit from `CometChatTheme.DayNight` so the kit's attribute set is in scope. Using `Theme.AppCompat.*` (which lacks Material attributes the kit relies on) leads to attribute-resolution failures at inflate time.\n\n**Recommended — use CometChat's built-in theme as parent:**\n```xml\n<!-- res/values/themes.xml -->\n<style name=\"AppTheme\" parent=\"CometChatTheme.DayNight\">\n    <!-- Your customizations -->\n    <item name=\"colorPrimary\">@color/your_brand_color</item>\n</style>\n```\n\n**Do NOT inherit from `Theme.AppCompat.*`** — it doesn't pull in the Material attributes the UI Kit reads at inflate time, and you'll see `UnsupportedOperationException: Failed to resolve attribute`. Inheriting directly from `Theme.MaterialComponents.*` works at runtime but you lose the kit's preconfigured color tokens — prefer `CometChatTheme.DayNight` so both the kit's defaults and your overrides apply cleanly.\n\n> **Material 2 vs Material 3.** The kit currently parents on Material 2 (`Theme.MaterialComponents.DayNight.NoActionBar`). Do NOT switch to `Theme.Material3.*` as your app theme parent — the kit's resource attrs are resolved against the Material 2 namespace; mixing in Material 3 leaves some attributes undefined and triggers the same `UnsupportedOperationException` at inflate.\n\n---\n\n## 6. Typical init + login flow (complete example)\n\nThis is the pattern used in the sample apps. Place it in your launcher Activity:\n\n**Java:**\n```java\npublic class SplashActivity extends AppCompatActivity {\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        UIKitSettings uiKitSettings = new UIKitSettings.UIKitSettingsBuilder()\n            .setAppId(\"YOUR_APP_ID\")\n            .setRegion(\"us\")\n            .setAuthKey(\"YOUR_AUTH_KEY\")\n            .subscribePresenceForAllUsers()\n            .build();\n\n        CometChatUIKit.init(this, uiKitSettings, new CometChat.CallbackListener<String>() {\n            @Override\n            public void onSuccess(String s) {\n                if (CometChatUIKit.getLoggedInUser() != null) {\n                    startActivity(new Intent(SplashActivity.this, HomeActivity.class));\n                    finish();\n                } else {\n                    startActivity(new Intent(SplashActivity.this, LoginActivity.class));\n                    finish();\n                }\n            }\n\n            @Override\n            public void onError(CometChatException e) {\n                Toast.makeText(SplashActivity.this, \"Init failed: \" + e.getMessage(), Toast.LENGTH_LONG).show();\n            }\n        });\n    }\n}\n```\n\n**Kotlin:**\n```kotlin\nclass SplashActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        val uiKitSettings = UIKitSettings.UIKitSettingsBuilder()\n            .setAppId(\"YOUR_APP_ID\")\n            .setRegion(\"us\")\n            .setAuthKey(\"YOUR_AUTH_KEY\")\n            .subscribePresenceForAllUsers()\n            .build()\n\n        CometChatUIKit.init(this, uiKitSettings, object : CometChat.CallbackListener<String>() {\n            override fun onSuccess(s: String) {\n                if (CometChatUIKit.getLoggedInUser() != null) {\n                    startActivity(Intent(this@SplashActivity, HomeActivity::class.java))\n                } else {\n                    startActivity(Intent(this@SplashActivity, LoginActivity::class.java))\n                }\n                finish()\n            }\n\n            override fun onError(e: CometChatException) {\n                Toast.makeText(this@SplashActivity, \"Init failed: ${e.message}\", Toast.LENGTH_LONG).show()\n            }\n        })\n    }\n}\n```\n\n---\n\n## 7. Anti-patterns\n\n| Anti-pattern | Why it breaks | Fix |\n|---|---|---|\n| Calling `login()` before `init()` completes | SDK not ready, login silently fails or throws | Always call `login()` inside `init()`'s `onSuccess` |\n| Double `init()` calls | Wastes resources, can cause race conditions | Guard with `CometChatUIKit.isSDKInitialized()` |\n| Hardcoding Auth Key in production | Anyone can decompile your APK and login as any user | Use `loginWithAuthToken()` with server-minted tokens |\n| Using UI components before login | Components require a logged-in user to fetch data | Always verify `getLoggedInUser() != null` before showing chat UI |\n| Missing INTERNET permission | SDK can't reach CometChat servers | Add `<uses-permission android:name=\"android.permission.INTERNET\" />` |\n| Wrong region string | SDK connects to wrong datacenter, gets 404s | Use exact region from dashboard: `\"us\"`, `\"eu\"`, `\"in\"` |\n| Calling `init()` in every Activity | Redundant, wastes network calls | Call once in `Application.onCreate()` or launcher Activity |\n| Using `Theme.AppCompat.*` or `Theme.Material3.*` as app theme | The kit's attrs are resolved against Material 2 (which `CometChatTheme.DayNight` inherits from); mixing namespaces fails with `UnsupportedOperationException` at inflate time | Inherit from `CometChatTheme.DayNight` |\n| Using `implementation project(':chatuikit')` for the UI Kit dependency | Local module references only work inside CometChat's own monorepo; external apps can't resolve the module | Use `implementation 'com.cometchat:chat-uikit-android:5.+'` from the CometChat Maven repository |\n| Forgetting `android.useAndroidX=true` + `android.enableJetifier=true` in `gradle.properties` | CometChat SDK's transitive `com.android.support` deps collide with the project's `androidx.core` → \"Duplicate class android.support.v4.os.ResultReceiver$1\" build failure | See § 1a — both lines mandatory in every greenfield Android Studio integration |\n\n---\n\n## Hard rules\n\n- **Init once, login once.** `CometChatUIKit.init()` must be called exactly once before any UI component is used. `login()` must be called inside `init()`'s `onSuccess`.\n- **Always check `getLoggedInUser()`.** Before navigating to any chat screen, verify the user is logged in.\n- **Never hardcode Auth Key in production.** Use `loginWithAuthToken()` with server-side token generation.\n- **INTERNET permission is mandatory.** Without it, the SDK silently fails.\n- **All UI components require a logged-in user.** Mounting `CometChatConversations`, `CometChatMessageList`, etc. without a logged-in user results in empty views or crashes.\n- **App theme must inherit from `CometChatTheme.DayNight`.** The kit itself parents on `Theme.MaterialComponents.DayNight.NoActionBar` (Material 2). Inheriting from `Theme.AppCompat.*` or `Theme.Material3.*` triggers `UnsupportedOperationException: Failed to resolve attribute` at inflate time.\n- **Always use the published Maven artifact for dependencies, never local project modules.** Use `implementation 'com.cometchat:chat-uikit-android:5.+'` — never `implementation project(':chatuikit')`. Local module references only apply to CometChat's own internal sample apps. External apps must always depend on the published artifact from the CometChat Maven repository.\n- **`gradle.properties` MUST contain `android.useAndroidX=true` AND `android.enableJetifier=true`.** Both lines, no exceptions. The CometChat V5 Android SDK transitively depends on the legacy `com.android.support:support-compat`. Without Jetifier rewriting those references to `androidx.*` at build time, Gradle hits \"Duplicate class android.support.v4.os.ResultReceiver$1\" and the build fails. Modern Android Studio scaffolds set `useAndroidX=true` by default but leave Jetifier off — the integration must add the Jetifier line. Idempotent — if both lines are already present, no change.","tags":["cometchat","android","core","skills","agent-skills","ai-agent","chat","claude-code","cursor","messaging","nextjs","react"],"capabilities":["skill","source-cometchat","skill-cometchat-android-v5-core","topic-agent-skills","topic-ai-agent","topic-chat","topic-claude-code","topic-cometchat","topic-cursor","topic-messaging","topic-nextjs","topic-react","topic-react-native","topic-ui-kit"],"categories":["cometchat-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cometchat/cometchat-skills/cometchat-android-v5-core","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cometchat/cometchat-skills","source_repo":"https://github.com/cometchat/cometchat-skills","install_from":"skills.sh"}},"qualityScore":"0.463","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 27 github stars · SKILL.md body (19,923 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:04:44.712Z","embedding":null,"createdAt":"2026-05-07T13:05:03.507Z","updatedAt":"2026-05-18T19:04:44.712Z","lastSeenAt":"2026-05-18T19:04:44.712Z","tsv":"'-123':1058 '/public/cometchat/cometchat/maven/':283 '1':201,404,878,893,924,1790,2013 '1.16.0':410,414 '1.8':295 '1a':352,1794 '2':540,1242,1355,1365,1387,1713,1907 '24':286 '26.1.0':420,426 '3':851,1358,1392 '34':291 '4':258,1078 '404s':1673 '5':224,251,308,883,1214,1762,1941 '5b':1223 '6':1404 '7':1566 '7.0':288 '8':293 'activ':1425,1686,1697 'activity.oncreate':816 'ad':137,170 'add':204,238,349,427,535,1217,1663,2034 'admin':734 'advanc':732,739 'ai':704,711 'allproject':275 'alreadi':493,2043 'alway':297,1590,1646,1830,1922,1961 'android':3,10,31,42,55,70,81,121,167,179,189,198,223,250,257,287,307,335,374,486,1761,1801,1940,1987,2019 'android.enablejetifier':448,1771,1978 'android.support':457 'android.support.v4.os.resultreceiver':390,403,1789,2012 'android.useandroidx':446,491,1769,1975 'androidmanifest.xml':1221 'androidx':353,468,2004 'androidx.core':381,412,1786 'anti':22,95,1568,1571 'anti-pattern':21,94,1567,1570 'anyon':1614 'api':735,742,966,970,1082 'apk':1618 'app':52,213,579,620,640,866,1224,1250,1374,1419,1447,1515,1703,1749,1894,1957,1959 'app-level':212 'appcompatact':1432,1502 'appear':163 'append':524 'appli':1352,1950 'application.oncreate':812,1694 'arctic':377,494 'artifact':302,1927,1966 'asynchron':556 'attr':1381,1708 'attribut':1261,1271,1279,1308,1324,1395,1918 'attribute-resolut':1278 'auth':595,625,656,977,1117,1453,1521,1610,1847 'authtoken':982 'auto':695 'auto-connect':694 'backend':956,958 'boolean':692,1143,1197,1208 'break':99,1575 'build':399,471,609,628,1456,1524,1791,2006,2016 'build.gradle':215,268 'builder':17,86,136 'built':709,721,1290 'built-in':708,720,1289 'bundl':1437,1507 'call':174,237,240,255,262,745,808,1577,1591,1599,1682,1690,1691,1813,1825 'callback':858,949 'callbacklisten':1092,1102,1114,1124,1155,1167,1177,1187,1198,1209 'calls-sdk-android':254 'catalog':37 'caus':1603 'chang':2046 'chat':49,221,233,248,305,329,333,361,904,934,993,1652,1759,1837,1938 'chat-sdk-android':332 'chat-uikit-android':220,247,304,1758,1937 'chatuikit':313,1732,1945 'chatuikit/src/main/res/values/themes.xml':1248 'check':1145,1831 'class':389,402,477,1429,1500,1788,2011 'class.java':1543,1550 'clean':1353 'client':660,741,975 'client-sid':659,974 'code':441 'collid':1781 'color':1339 'com.android.support':368,422,1779,1994 'com.cometchat':219,246,253,303,331,1757,1936 'com.cometchat.chatuikit.shared.cometchatuikit.cometchatuikit':571,613 'com.cometchat.chatuikit.shared.cometchatuikit.uikitsettings':573,615 'come':867 'cometchat':2,9,30,41,54,69,78,117,150,151,166,178,188,197,206,232,271,323,360,461,511,542,564,585,639,865,876,881,891,922,964,1227,1287,1661,1744,1765,1775,1952,1969,1985 'cometchat-android-v5-components':29 'cometchat-android-v5-core':1 'cometchat-android-v5-customization':187 'cometchat-android-v5-features':177 'cometchat-android-v5-placement':40 'cometchat-android-v5-theming':53,165 'cometchat-android-v5-troubleshooting':196 'cometchat-uid':875,880,890,921 'cometchat.callbacklistener':752,782,833,895,926,984,1026,1065,1461,1529 'cometchatconvers':1879 'cometchatexcept':771,800,847,910,940,999,1041,1076,1488,1556 'cometchatmessagelist':1880 'cometchattheme.daynight':1235,1256,1342,1715,1728,1899 'cometchatuikit':1079 'cometchatuikit.createuser':1062 'cometchatuikit.getloggedinuser':887,918,1014,1469,1536 'cometchatuikit.init':126,748,778,809,829,1457,1525,1810 'cometchatuikit.issdkinitialized':818,828,1608 'cometchatuikit.login':856,889,920 'cometchatuikit.loginwithauthtoken':947,981 'cometchatuikit.logout':1024 'companion':27 'compat':371,419,425,1997 'compil':289 'complet':559,1409,1581 'compon':33,36,107,162,551,766,795,1633,1636,1819,1871 'condit':1605 'configur':132 'connect':696,1668 'contain':1974 'context':749,779,1090 'core':5,409,413 'core-1.16.0.aar':408 'cover':45,58 'crash':194,1893 'creat':485,872,1046,1156 'createus':1150,1153 'current':1006,1126,1133,1361 'currentus':1013,1016 'currentuser.getuid':1020 'custom':60,161,183,191,703,716,727,1190 'custommessag':1186 'dashboard':586,644,1678 'data':1645 'datacent':1671 'date/time':728 'datetimeformattercallback':725 'debug':140 'declar':392 'decompil':1616 'default':379,501,698,707,719,1348,2026 'dep':465,1780 'depend':18,88,139,203,209,217,244,364,1737,1929,1962,1990 'deprec':505 'descript':635,1085 'dev':599,654,1048,1106,1160 'develop':327,853 'diagnos':192 'direct':1326 'dl.cloudsmith.io':282 'dl.cloudsmith.io/public/cometchat/cometchat/maven/':281 'doe':1061 'doesn':479,519,1302 'doubl':823,1597 'double-init':822 'duplic':401,476,1787,2010 'duplicate-class':475 'e':772,799,848,911,939,1000,1042,1077,1489,1555 'e.getmessage':1494 'e.message':1562 'either':522 'els':1477,1544 'empti':1890 'enabl':606 'ensur':263 'equival':469 'error':478,850 'etc':391,593,1881 'eu':591,650,1680 'everi':68,863,1685,1799 'exact':546,1675,1814 'exampl':1410 'except':1983 'exist':39 'extend':1431 'extens':717,723 'extern':1748,1958 'fail':397,1321,1493,1561,1587,1720,1868,1915,2017 'failur':144,775,803,914,943,1003,1045,1281,1792 'featur':173,181,705,712 'fetch':1644 'finish':1476,1483,1551 'first':26,104 'five':869 'fix':1576 'flow':1408 'forget':1768 'form':1201 'format':729 'formmessag':1196 'found':405 'foundat':6,65 'fox':378,495 'fresh':484 'freshly-cr':483 'friend':680 'full':630,1080 'fulli':560 'fun':784,797,928,937,1504,1531,1553 'generat':959,1858 'get':1004,1132,1672 'getloggedinus':1128,1131,1648,1832 'googl':277 'gradl':87,138,202,385,2008 'gradle.properties':432,518,1774,1972 'greenfield':1800 'groovi':216,243,274 'guard':820,1606 'handl':773,801,912,941,1001,1043 'happen':481,806 'hard':1804 'hardcod':1609,1846 'hit':2009 'homeact':1542 'homeactivity.class':1475 'host':736,743 'id':580,621,641,1448,1516 'idempot':539,2038 'implement':218,245,252,311,1730,1756,1935,1943 'import':296,570,572,612,614 'includ':269,338 'indic':608 'inflat':1283,1314,1403,1724,1920 'inherit':1238,1254,1298,1325,1716,1726,1897,1908 'init':141,744,774,802,804,824,1086,1089,1406,1492,1560,1580,1594,1598,1683,1806,1827 'initi':14,82,123,154,541,545,554,760,789,1093,1149 'insid':1593,1743,1826 'instead':382 'integr':74,100,1803,2032 'intent':1473,1480,1539,1546 'intern':326,1955 'internet':1655,1859 'isn':152 'issdkiniti':1141,1144 'java':292,568,569,746,747,825,826,884,885,979,980,1011,1022,1023,1051,1426,1427 'jetifi':354,384,453,497,533,537,1999,2029,2036 'john':1060 'key':596,626,657,971,978,1454,1522,1611,1848 'kit':12,72,208,227,342,440,1229,1245,1259,1273,1311,1336,1346,1360,1378,1706,1736,1901 'kotlin':294,610,611,776,777,915,916,1498,1499 'lack':1269 'landscap':509 'launcher':815,1424,1696 'lead':1276 'leav':1393,2028 'legaci':367,456,1993 'level':214,267 'librari':372,395 'line':430,523,534,538,1796,1981,2037,2041 'list':683,701,706,714,718 'll':1318 'local':316,1738,1931,1946 'log':127,129,1008,1135,1640,1843,1875,1885 'logged-in':1007,1134,1639,1874,1884 'login':15,83,143,662,763,792,842,852,913,942,1002,1035,1096,1099,1103,1115,1407,1578,1585,1592,1620,1635,1808,1822 'loginact':1549 'loginactivity.class':1482 'loginwithauthtoken':1108,1111,1625,1852 'logout':1021,1044,1120,1123,1125 'long':1496,1564 'lose':1334 'mandatori':452,1797,1862 'manifest':90,1215 'materi':1241,1270,1307,1354,1357,1364,1386,1391,1712,1906 'maven':272,279,301,1766,1926,1970 'mavencentr':278 'media':1180 'mediamessag':1176 'messag':184,1171,1181,1191,1202,1213 'method':631,633,1083 'min':284 'mint':1629 'miss':1654 'mix':1389,1718 'mode':600,854,945,1049,1107,1161 'modern':373,2018 'modul':317,407,1739,1754,1933,1947 'monorepo':1747 'mount':562,1878 'must':543,558,805,1253,1811,1823,1896,1960,1973,2033 'namespac':1388,1719 'navig':902,932,991,1033,1834 'need':347,515 'negoti':358 'network':1689 'never':309,1845,1930,1942 'new':120,576,751,832,864,894,983,1025,1054,1064,1158,1443,1460,1472,1479 'newer':507 'non':357 'non-negoti':356 'none':1140 'null':888,919,1017,1138,1470,1537,1649 'object':781,925,1528 'obtain':953 'omit':601,663 'oncreat':1436,1505 'onerror':770,798,846,909,938,998,1040,1075,1487,1554 'online/offline':607 'onsuccess':756,785,837,899,929,988,1030,1069,1465,1532,1596,1829 'option':259,605,667,675,684,693,702,715,726 'overrid':733,740,753,767,783,796,834,843,896,906,927,936,985,995,1027,1037,1066,1072,1351,1433,1462,1484,1503,1530,1552 'overrideadminhost':730 'overrideclienthost':737 'parent':1294,1362,1376,1903 'pattern':23,96,1414,1569,1572 'permiss':91,1216,1656,1860 'place':1420 'placement':44,109 'pre':871 'pre-creat':870 'preconfigur':1338 'prefer':1341 'presenc':670,678,687 'present':2044 'proceed':840 'product':603,665,944,1119,1613,1850 'project':122,266,312,376,435,488,1731,1784,1932,1944 'project-level':265 'properti':445 'protect':1434 'provid':34 'public':754,768,835,844,897,907,986,996,1028,1038,1067,1073,1081,1428,1463,1485 'publish':300,1925,1965 'pull':229,1304 'purpos':61 'put':48 'race':1604 'reach':1660 'reaction':175 'read':24,101,1312 'readi':1584 'recommend':1285 'redund':1687 'refer':318,458,632,1740,1948,2002 'region':588,623,648,1665,1676 'reli':1274 'repositori':273,276,1767,1971 'requir':355,581,589,597,638,647,1226,1637,1872 'resolut':1280 'resolv':1323,1383,1710,1752,1917 'resourc':1380,1601 'rest':965,969 'result':1888 'rewrit':454,2000 'role':690 'root':436 'rule':7,1805 'runtim':193,411,421,1331 'safe':761,790 'sampl':1418,1956 'savedinstancest':1438,1440,1506,1509 'scaffold':2021 'schedul':1212 'schedulermessag':1207 'scope':1265 'screen':905,935,994,1036,1838 'sdk':125,234,241,256,285,290,330,334,362,462,508,513,759,788,1095,1147,1582,1657,1667,1776,1866,1988 'see':386,1243,1319,1793 'send':1168,1178,1188,1199,1210 'sendcustommessag':1182,1185 'sendformmessag':1192,1195 'sendmediamessag':1172,1175 'sendschedulermessag':1203,1206 'sendtextmessag':1162,1165 'separ':242,351 'server':1628,1662,1855 'server-mint':1627 'server-sid':1854 'set':115,148,1262,2022 'setaifeatur':700 'setappid':578,619,636,1445,1513 'setauthkey':594,624,652,1451,1519 'setautoestablishsocketconnect':691 'setdatetimeformattercallback':724 'setextens':713 'setregion':587,622,645,1449,1517 'setup':19,89 'ship':1231 'show':849,1497,1565,1651 'side':661,976,1856 'signatur':1084 'silent':98,1586,1867 'sinc':502 'skill':28,66,103,110,113,159 'skill-cometchat-android-v5-core' 'source-cometchat' 'specif':172,689 'splashact':1430,1501,1541,1548,1559 'splashactivity.this':1474,1481,1491 'startact':1471,1478,1538,1545 'static':1087,1097,1109,1121,1129,1142,1151,1163,1173,1183,1193,1204 'still':514 'string':582,637,646,653,731,738,757,787,838,1018,1031,1100,1112,1466,1534,1666 'studio':375,487,1802,2020 'subscrib':668,676,685 'subscribepresenceforallus':604,627,666,1455,1523 'subscribepresenceforfriend':674 'subscribepresenceforrol':682 'super.oncreate':1439,1508 'support':370,418,424,1996 'support-compat':369,417,423,1995 'support-compat-26.1.0.aar':416 'switch':1369 'teach':76 'templat':185 'test':861,873 'text':1170 'textmessag':1166 'theme':57,169,1225,1234,1252,1292,1375,1704,1895 'theme.appcompat':1267,1300,1699,1910 'theme.material3':1371,1701,1912 'theme.materialcomponents':1328 'theme.materialcomponents.daynight.noactionbar':1240,1366,1905 'throw':1589 'time':472,1284,1315,1725,1921,2007 'toast.length':1495,1563 'toast.maketext':1490,1557 'token':948,952,961,1113,1118,1340,1630,1857 'topic-agent-skills' 'topic-ai-agent' 'topic-chat' 'topic-claude-code' 'topic-cometchat' 'topic-cursor' 'topic-messaging' 'topic-nextjs' 'topic-react' 'topic-react-native' 'topic-ui-kit' 'transit':228,337,363,464,1778,1989 'trigger':1398,1913 'troubleshoot':200 'true':447,449,492,530,699,1770,1772,1976,1979,2024 'two':429 'type':634 'typic':1405 'ui':11,71,207,226,341,439,550,1228,1310,1632,1653,1735,1818,1870 'uid':857,862,877,882,892,923,1019,1101,1105 'uikit':222,249,306,1760,1939 'uikitset':16,85,133,574,575,617,750,780,831,1091,1441,1442,1459,1511,1527 'uikitsettings.uikitsettingsbuilder':577,618,1444,1512 'uikitsettingsbuild':567,629 'undefin':1396 'unsupportedoperationexcept':1320,1401,1722,1914 'url':280 'us':590,649,1450,1518,1679 'use':111,157,164,176,186,195,298,310,553,765,794,817,855,946,962,1266,1286,1415,1624,1631,1674,1698,1729,1755,1821,1851,1923,1934 'useandroidx':529,2023 'user':131,673,874,900,901,930,931,989,990,1010,1012,1047,1052,1053,1055,1057,1063,1070,1071,1127,1130,1137,1154,1159,1623,1642,1841,1877,1887 'user.setname':1059 'user.setuid':1056 'usual':489 'v5':4,13,32,43,56,73,168,180,190,199,512,1230,1986 'val':616,1510 'verifi':1647,1839 'via':134 'view':565,1891 'visual':59 'voice/video':236 'void':755,769,836,845,898,908,987,997,1029,1039,1068,1074,1088,1098,1110,1122,1152,1164,1174,1184,1194,1205,1435,1464,1486 'vs':1356 'wast':1600,1688 'websocket':697 'wire':443 'without':383,1863,1882,1998 'work':79,1329,1742 'write':182 'wrong':1664,1670 'xml':1222,1295","prices":[{"id":"409595dd-352c-456f-a696-47f1f54a1b82","listingId":"5a6ad1d5-971c-425e-adcc-e7fe5edab773","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cometchat","category":"cometchat-skills","install_from":"skills.sh"},"createdAt":"2026-05-07T13:05:03.507Z"}],"sources":[{"listingId":"5a6ad1d5-971c-425e-adcc-e7fe5edab773","source":"github","sourceId":"cometchat/cometchat-skills/cometchat-android-v5-core","sourceUrl":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-android-v5-core","isPrimary":false,"firstSeenAt":"2026-05-07T13:05:03.507Z","lastSeenAt":"2026-05-18T19:04:44.712Z"}],"details":{"listingId":"5a6ad1d5-971c-425e-adcc-e7fe5edab773","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cometchat","slug":"cometchat-android-v5-core","github":{"repo":"cometchat/cometchat-skills","stars":27,"topics":["agent-skills","ai-agent","chat","claude-code","cometchat","cursor","messaging","nextjs","react","react-native","ui-kit"],"license":null,"html_url":"https://github.com/cometchat/cometchat-skills","pushed_at":"2026-05-18T05:04:24Z","description":"Add CometChat chat to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with Claude Code, Cursor, Codex, VS Code Copilot, Windsurf, Cline, Kiro, and 50+ more agents.","skill_md_sha":"bc72c28116cf6d84a9285d56f69cf82430996cc5","skill_md_path":"skills/cometchat-android-v5-core/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-android-v5-core"},"layout":"multi","source":"github","category":"cometchat-skills","frontmatter":{"name":"cometchat-android-v5-core","license":"MIT","description":"Foundational rules for CometChat Android UI Kit v5. Initialization, login, UIKitSettings builder, dependency setup, and anti-patterns. Read this first.","compatibility":"Android 7.0+; Java 8+; Kotlin 1.8+; com.cometchat:chat-uikit-android:5.x"},"skills_sh_url":"https://skills.sh/cometchat/cometchat-skills/cometchat-android-v5-core"},"updatedAt":"2026-05-18T19:04:44.712Z"}}