Mobil SDK-nı Android tətbiqinə qoşmaq

Son yeniləmə: 9 oktyabr 2026 · 11 dəq oxunur

Android SDK Kotlin ilə yazılıb, Java-dan da işləyir. Şəbəkədən başqa heç bir icazə istəmir və ekranlarınıza heç nə əlavə etmir. 1.0.2-dən söhbətdə kamera ilə şəkil və video çəkmək və səsli mesaj göndərmək olar. Kamera üçün icazə lazım deyil: SDK telefonun öz kamera tətbiqini açır, FileProvider SDK-nın içindədir; tətbiqin manifestində CAMERA elan olunubsa, SDK əvvəlcə bu icazəni soruşur. Səsli mesaj üçün tətbiq öz AndroidManifest.xml-ində RECORD_AUDIO elan etməlidir, yoxsa mikrofon düyməsi görünmür və SDK bunu loga yazır.

Addımlar

  1. 1

    Tələblər

    • Android 6.0 (API 23) və ya daha yeni, compileSdk 35 və ya daha yeni, Kotlin 1.8 və ya daha yeni.
    • Panelin Quraşdırma bölməsindən App ID və Android API açarı (android_…).
  2. 2

    Paketi əlavə edin

    Paket Maven Central-dadır. Çox layihədə settings.gradle.kts-də mavenCentral() artıq var.

    // app/build.gradle.kts
    dependencies {
        implementation("ai.clomni:messenger:1.0.5")
    }
  3. 3

    SDK-nı başladın

    initialize-i bir dəfə, Application sinfinizdə çağırın. Bildiriş tətbiqin prosesini başlada bilər, onun açdığı Messenger-ə isə hazır SDK lazımdır, ona görə Activity gecdir.

    // App.kt
    import android.app.Application
    import ai.clomni.messenger.Clomni
    import ai.clomni.messenger.ClomniLogLevel
    
    class App : Application() {
        override fun onCreate() {
            super.onCreate()
            Clomni.initialize(this, appId = "app_…", apiKey = "android_…")
            if (BuildConfig.DEBUG) Clomni.setLogLevel(ClomniLogLevel.DEBUG)
        }
    }
    <!-- AndroidManifest.xml -->
    <application
        android:name=".App"
        ...>

    AGP 8 və daha yenisində BuildConfig.DEBUG üçün app/build.gradle.kts-də buildFeatures { buildConfig = true } lazımdır. Clomni-nin metodlarını istənilən thread-dən çağırmaq olar, dinləyicilər əsas thread-də gəlir. İkinci initialize nəzərə alınmır.

  4. 4

    İstifadəçini daxil edin

    Öz login-inizdən sonra, serverdən gələn user_hash ilə:

    val user = ClomniUser(userId = "12345", email = "[email protected]", name = "Aysel")
    Clomni.loginUser(user, userHash = hashFromYourServer)
    
    Clomni.updateUser(language = "az", customAttributes = mapOf("plan" to "premium"))
    
    // Together with your app's own logout:
    Clomni.logout()

    Hash-in server kodu «Mobil SDK açarları və istifadəçinin tanıdılması» məqaləsindədir.

    Tətbiq hər açılanda, istifadəçi daxil olubsa, loginUser-i yenidən çağırın, istifadəçi təzə daxil olmuş kimi. Eyni istifadəçi üçün SDK saxlanmış sessiyanı işlədir.

  5. 5

    Messenger-i açın

    findViewById<View>(R.id.support).setOnClickListener {
        Clomni.present(source = "profile_support")
    }
    
    // Jetpack Compose
    Button(onClick = { Clomni.present(source = "profile_support") }) {
        Text("Support")
    }
    • Clomni.presentNewConversation(source): birbaşa yeni söhbət.
    • Clomni.presentConversation(id): məlum söhbət, ID onConversationStarted-dən gəlir.
    • Clomni.dismiss(): Messenger-i koddan bağlayır.

    Oxunmamış cavabların sayı, düymənin yanında göstərmək üçün:

    class ProfileActivity : AppCompatActivity() {
        private val unread = UnreadCountListener { count ->
            supportBadge.isVisible = count > 0
            supportBadge.text = count.toString()
        }
    
        override fun onStart() {
            super.onStart()
            Clomni.addUnreadCountListener(unread)
        }
    
        override fun onStop() {
            Clomni.removeUnreadCountListener(unread)
            super.onStop()
        }
    }

    Üzən düymə standart olaraq sönülüdür: Clomni.setLauncherVisible(true), aşağı naviqasiya panelinin üstünə qaldırmaq üçün Clomni.setBottomPadding(72) (dp).

  6. 6

    Hadisələr, linklər, dil və görünüş

    Messenger-in hadisələrini dinləmək üçün:

    Clomni.onMessengerOpened { source -> Log.d("App", "opened from $source") }
    Clomni.onMessengerClosed { Log.d("App", "closed") }
    Clomni.onConversationStarted { id -> Log.d("App", "conversation $id") }
    Clomni.onFlowCompleted { flowId -> Log.d("App", "flow $flowId completed") }
    Clomni.onUnreadCountChanged { count -> Log.d("App", "unread $count") }

    Hər hadisənin bir dinləyicisi olur: yenisi köhnəsini əvəz edir, null onu silir.

    Xəbərin düyməsi veb ünvanı və ya tətbiqin deep link-ini aça bilər. onLink təyin olunubsa, link əvvəlcə tətbiqə gəlir. Tətbiq onu özü açıbsa true qaytarın; false və ya dinləyici yoxdursa, linki sistem açır.

    Clomni.onLink { url ->
        if (url.startsWith("example://")) {
            startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)).setPackage(packageName))
            true
        } else {
            false
        }
    }

    Dil, səslər və tətbiqin öz rəngi:

    Clomni.setLanguage("en")          // az, en or ru; null follows the phone
    Clomni.setSoundsEnabled(false)    // off whatever the panel says
    Clomni.setTheme(
        primaryColor = "#0A66C2",
        typeface = ResourcesCompat.getFont(context, R.font.montserrat),
        mode = ClomniThemeMode.DARK,      // LIGHT, DARK or SYSTEM
    )
    • setLanguage paneldə yandırılmış dillərdən birini seçir (Görünüş › «Dillər»). Boş və ya sönülü dil verilsə, telefonun dili, o da yoxdursa panelin əsas dili işlənir.
    • Səslər: söhbət açıq olanda göndərilən və gələn mesajın qısa səsi. Telefonun səssiz rejiminə tabedir.
    • setTheme panelin rənginin, şriftinin və rejiminin üstünə tətbiqin özününkünü qoyur. Rəng #RRGGBB formatındadır, brendin digər rəngləri ondan törədilir. Hər çağırış əvvəlkini əvəz edir, verilməyən dəyər panelinki qalır. Format səhvdirsə, logda setTheme: primaryColor "…" is not #RRGGBB çıxır.
    • Yalnız şrift üçün: Clomni.setTypeface(typeface). Şrift istifadəçinin mətn ölçüsü ayarına yenə tabedir.
  7. 7

    Push: Firebase-i tətbiqə qoşun

    Operatorun cavabları bağlı tətbiqə FCM data mesajı kimi çatır. SDK-nın Firebase asılılığı yoxdur: tətbiqiniz öz firebase-messaging kitabxanasını saxlayır, öz push-larınız sizdə qalır.

    Firebase console › layihəniz › Project Overview › + Add app › Android: paket adını yazın, «Register app», google-services.json-u yükləyib app/ qovluğuna qoyun.

    // settings.gradle.kts (or the root build.gradle.kts)
    plugins {
        id("com.google.gms.google-services") version "4.4.2" apply false
    }
    // app/build.gradle.kts
    plugins {
        id("com.android.application")
        id("org.jetbrains.kotlin.android")
        id("com.google.gms.google-services")
    }
    
    dependencies {
        implementation("ai.clomni:messenger:1.0.5")
        implementation(platform("com.google.firebase:firebase-bom:33.4.0"))
        implementation("com.google.firebase:firebase-messaging")
    }

    Panelə google-services.json yox, layihənin service account JSON faylı yüklənir: «Mobil SDK push açarları» məqaləsinə baxın.

  8. 8

    Push: tokeni və mesajları ötürün

    // AppMessagingService.kt
    import ai.clomni.messenger.Clomni
    import ai.clomni.messenger.ClomniPush
    import com.google.firebase.messaging.FirebaseMessagingService
    import com.google.firebase.messaging.RemoteMessage
    
    class AppMessagingService : FirebaseMessagingService() {
        override fun onNewToken(token: String) {
            Clomni.setDeviceToken(token)
            // and to your own server, if the app has its own pushes
        }
    
        override fun onMessageReceived(message: RemoteMessage) {
            if (ClomniPush.handle(this, message.data)) return
            // your app's own push
        }
    }
    <!-- AndroidManifest.xml, inside <application> -->
    <service
        android:name=".AppMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

    FCM onNewToken-i yalnız token dəyişəndə çağırır. Cari tokeni hər açılışda da verin, Application.onCreate-də initialize-dən sonra:

    FirebaseMessaging.getInstance().token.addOnSuccessListener(Clomni::setDeviceToken)

    Tətbiqdə yalnız bir FirebaseMessagingService olur. Başqası artıq varsa, Clomni mesajlarını həmin servisdə ötürün. ClomniPush.isClomniPush(data) push-un Clomni-yə aid olub-olmadığını emal etmədən deyir.

  9. 9

    Push: Android 13 icazəsi və ikon

    Android 13 və daha yenisində bildiriş üçün POST_NOTIFICATIONS icazəsi lazımdır. SDK onu özü istəmir: manifestdə elan edin və məntiqli anda istəyin, məsələn ilk mesajdan sonra.

    <!-- AndroidManifest.xml -->
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    class MainActivity : AppCompatActivity() {
        private val askNotifications = registerForActivityResult(ActivityResultContracts.RequestPermission()) { }
    
        private fun askForNotifications() {
            if (Build.VERSION.SDK_INT >= 33 &&
                ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) !=
                PackageManager.PERMISSION_GRANTED
            ) {
                askNotifications.launch(Manifest.permission.POST_NOTIFICATIONS)
            }
        }
    }

    İcazə olmasa bildiriş göstərilmir, oxunmamış mesajların sayı isə yenə yenilənir. Kiçik ikon tətbiqin ikonudur. O, siluet deyilsə, Android boz kvadrat çəkir: Clomni.setNotificationIcon(R.drawable.ic_notification) ilə ağ siluet ikon verin.

    İstifadəçi hər söhbət üçün bir bildiriş görür: başlıq operator və brend, mətn mesajın özü (180 simvola qədər). Bildiriş kanalı clomni_messages-dir. Toxunanda tətbiq, üstündə həmin söhbət açılır. Messenger açıq olanda Clomni bildirişi göstərilmir.

  10. 10

    Yoxlayın

    1. Tətbiqi telefonda işə salın, bildirişlərə icazə verin və Messenger-i bir dəfə açın.
    2. Panel › kanalınız › ayarlar sütunu › Push › «Test bildirişi» › cihazı seçin › «Göndər».

    Loglar logcat-dadır, tag Clomni. Tez-tez rastlaşan xətalar:

    • call Clomni.initialize first: initialize-i Application.onCreate-də çağırın və sinfi manifestdə android:name ilə göstərin.
    • api_key səhvdir və ya bu platforma üçün deyil: android_… açarını işlədin, açarın ləğv olunmadığını yoxlayın.
    • notification not shown (POST_NOTIFICATIONS?): Android 13+ icazəsini istəyin.
    • Servisinizin onMessageReceived-i çağırılmır: servis manifestdə yoxdur, ya da başqa FirebaseMessagingService mesajları götürür.

    Java-dan: Clomni.initialize(context, "app_…", "android_…");, Clomni.loginUser(new ClomniUser("12345", "[email protected]"), hashFromYourServer);, Clomni.present("profile_support");.

  11. 11

    Tam təlimat

Sənəd