Mobil SDK-nı iOS tətbiqinə qoşmaq
Son yeniləmə: 9 oktyabr 2026 · 10 dəq oxunur
iOS SDK yalnız sistem framework-lərini işlədir, privacy manifest ilə gəlir. Clomni iOS push-larını sizin .p8 açarınızla birbaşa APNs-ə göndərir: iOS-da Firebase lazım deyil.
Addımlar
-
1
Tələblər
- iOS 15 və ya daha yeni, Xcode 15 və ya daha yeni.
- Panelin Quraşdırma bölməsindən App ID və iOS API açarı (
ios_…). - Push üçün Apple Developer hesabı və APNs açarı.
-
2
Paketi əlavə edin
Swift Package Manager: Xcode › File › Add Package Dependencies,
https://github.com/clomni/clomni-mobile-sdk.gityazın,1.0.4-dən «Up to Next Major Version» seçin vəClomniMessengerməhsulunu tətbiq hədəfinə əlavə edin.Package.swift-də:dependencies: [ .package(url: "https://github.com/clomni/clomni-mobile-sdk.git", from: "1.0.4"), ], targets: [ .target(name: "App", dependencies: [ .product(name: "ClomniMessenger", package: "clomni-mobile-sdk"), ]), ]CocoaPods: SDK CocoaPods trunk-da yoxdur, pod-u repozitoriyanın tag-indən götürün.
pod 'ClomniMessenger', '1.0.4'yazılsa, CocoaPods paketi tapmır.# Podfile, in your app's target pod 'ClomniMessenger', :git => 'https://github.com/clomni/clomni-mobile-sdk.git', :tag => '1.0.4'
İstifadəçi söhbətdə şəkil göndərə bilir.
Info.plist-ə icazə mətnlərini əlavə edin:<key>NSPhotoLibraryUsageDescription</key> <string>To send photos to support</string> <key>NSCameraUsageDescription</key> <string>To take a photo and send it to support</string> <key>NSMicrophoneUsageDescription</key> <string>To send voice messages to support</string>
NSCameraUsageDescriptionyoxdursa, Messenger kamera seçimini göstərmir.NSMicrophoneUsageDescriptionyoxdursa, mikrofon düyməsi görünmür (səsli mesaj SDK 1.0.2-dən). -
3
SDK-nı başladın
initialize-i tətbiq açılanda bir dəfə çağırın. SwiftUI tətbiqindəAppDelegate-i@UIApplicationDelegateAdaptorilə verin, push üçün onsuz da lazımdır.import SwiftUI @main struct ExampleApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate var body: some Scene { WindowGroup { ContentView() } } }Metodları istənilən thread-dən çağırmaq olar, callback-lər əsas thread-də gəlir. İkinci
initializenəzərə alınmır. TamAppDelegateaşağıdakı push hissəsindədir. -
4
İstifadəçi və Messenger
let user = ClomniUser(userId: "12345", email: "[email protected]", name: "Aysel") Clomni.loginUser(user, userHash: hashFromYourServer) // the hash comes from your server Clomni.updateUser(language: "az", customAttributes: ["plan": "premium"]) // Together with your app's own logout: Clomni.logout()
// SwiftUI Button("Support") { Clomni.present(source: "profile_support") } // UIKit @objc private func supportTapped() { Clomni.present(source: "profile_support") }Messenger ən üstdəki ekranın üzərində açılır.
present-i ekran göstəriləndən sonra çağırın,didFinishLaunching-də yox. Digər çağırışlar:presentNewConversation(source:),presentConversation(_:),dismiss(). Oxunmamış mesajların sayı:let token = Clomni.addUnreadCountListener { count in ... }, sonraClomni.removeUnreadCountListener(token). Üzən düymə:Clomni.setLauncherVisible(true),Clomni.setBottomPadding(72)(point).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
Hadisələr, linklər, dil və görünüş
Messenger-in hadisələrini dinləmək üçün:
Clomni.onMessengerOpened = { source in print("opened from \(source ?? "-")") } Clomni.onMessengerClosed = { print("closed") } Clomni.onConversationStarted = { id in print("conversation \(id)") } Clomni.onFlowCompleted = { flowId in print("flow \(flowId) completed") } Clomni.onUnreadCountChanged = { count in print("unread \(count)") }Hər hadisənin bir dinləyicisi olur,
nilonu silir.Xəbərin düyməsi veb ünvanı və ya tətbiqin deep link-ini aça bilər.
onLinktəyin olunubsa, hər link tətbiqə gəlir və onu tətbiq açır. Təyin olunmayıbsa, linkləri sistem açır.Clomni.onLink = { url in if url.scheme == "example" { // route inside your app } else { UIApplication.shared.open(url) } }Dil, səslər və tətbiqin öz rəngi:
Clomni.setLanguage("en") // az, en or ru; nil follows the phone Clomni.setSoundsEnabled(false) Clomni.setTheme(primaryColor: "#0A66C2", typeface: "Montserrat", mode: .dark)setLanguagepaneldə 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.
setThemepanelin rənginin, şriftinin və rejiminin üstünə tətbiqin özününkünü qoyur. Rəng#RRGGBBformatı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ə, logdasetTheme: primaryColor "…" is not #RRGGBBçıxır.- Şrift tətbiqin bundle-ındakı və
Info.plist-dəUIAppFontsaltında yazılmış şriftin ailə adıdır (Montserrat-Regular.ttffaylı üçün"Montserrat"). Mətn Dynamic Type-a yenə tabedir. Yalnız şrift üçün:Clomni.setTypeface("Montserrat"). Şrift tapılmasa, logdafont family "…" is not in the app; the system font staysçıxır və sistem şrifti qalır.
-
6
Push: capability
Xcode › Project navigator › layihə › TARGETS › tətbiq › Signing & Capabilities › + Capability › Push Notifications. Konfiqurasiya «All» olsun.
-
7
Push: AppDelegate
import ClomniMessenger import UIKit import UserNotifications final class AppDelegate: NSObject, UIApplicationDelegate, @preconcurrency UNUserNotificationCenterDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Clomni.initialize(appId: "app_…", apiKey: "ios_…") UNUserNotificationCenter.current().delegate = self Task { let center = UNUserNotificationCenter.current() let granted = try? await center.requestAuthorization(options: [.alert, .sound, .badge]) if granted == true { UIApplication.shared.registerForRemoteNotifications() } } return true } func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Clomni.setDeviceToken(deviceToken) } // A push while the app is open. Clomni pushes stay hidden while the Messenger is open. @MainActor func userNotificationCenter( _ center: UNUserNotificationCenter, willPresent notification: UNNotification ) async -> UNNotificationPresentationOptions { Clomni.shouldShowForeground(notification.request.content.userInfo) ? [.banner, .list, .sound] : [] } // A tap: a Clomni push opens its conversation. @MainActor func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse) async { if Clomni.handlePush(response.notification.request.content.userInfo) { return } // your app's own push } }- Hər iki delegate metodu
@MainActorqalsın,nonisolatedyox. Yoxsa bildirişə toxunanda tətbiq «Call must be made on main thread» ilə dayanır. - Bildiriş icazəsini istifadəçiyə uyğun anda istəyin. Nümunə qısalıq üçün açılışda istəyir.
Clomni.isClomniPush(userInfo)push-un Clomni-yə aid olub-olmadığını deyir.
- Hər iki delegate metodu
-
8
Sandbox və production
SDK hər cihazın APNs mühitini özü bildirir: Xcode-dan işə salınan build sandbox, TestFlight, App Store və Ad Hoc isə production işlədir. Bir
.p8açarı ikisinə də xidmət edir, bir şərtlə ki Sandbox & Production üçün yaradılsın. Bir mühitlə məhdud açar o biri mühitdəBadEnvironmentKeyInTokenverir. «Test bildirişi» siyahısı hər cihazın mühitini göstərir.Operatorun şəkli bildirişdə görünsün istəyirsinizsə, Notification Service Extension əlavə edin. Clomni hər push-u
mutable-content: 1vəavatar_urlilə göndərir. Extension-un hazır kodu tam təlimatın iOS bölməsindədir, ona Clomni SDK lazım deyil. -
9
Yoxlayın
- Tətbiqi real iPhone-da işə salın (simulyator Clomni-dən APNs push-u qəbul etmir), bildirişlərə icazə verin və Messenger-i bir dəfə açın.
- Panel › kanalınız › ayarlar sütunu › Push › «Test bildirişi» › cihazı seçin › «Göndər».
Loglar Xcode konsolunda və Console.app-də: subsystem
ai.clomni.messenger, categoryClomni. Tez-tez rastlaşanlar:api_key səhvdir və ya bu platforma üçün deyil:ios_…açarını işlədin. Paneldəki «iOS Bundle ID» tətbiqinkindən fərqlidirsə də belə olur.no window to present the messenger from yet:present-i ekran göstəriləndən sonra çağırın.- «Test bildirişi»
BadEnvironmentKeyInToken: Sandbox & Production açarı yaradın.DeviceTokenNotForTopic: Push bölməsindəki Bundle ID tətbiqinki deyil.
-
10
Tam təlimat
- PDF: Clomni Mobile SDK təlimatı, Azərbaycan, ingilis və rus dilində.
- Onlayn: iOS.
- Paneldə: kanalın ayarlar sütununda «Təlimat».