Mobil SDK-nı Unity oyununa qoşmaq
Son yeniləmə: 9 oktyabr 2026 · 8 dəq oxunur
Unity paketi native Android və iOS SDK-larına C# körpüsüdür, ekranlar native ekranlardır. Editor-da və digər platformalarda çağırışlar heç nə etmir: SDK yalnız Android və iOS build-lərində işləyir.
Addımlar
-
1
Tələblər
- Unity 2021.3 və ya daha yeni, Unity 6 da işləyir.
- Android: Minimum API Level 23,
compileSdk35 və ya daha yeni. iOS: Target minimum iOS Version 15.0, Xcode 15. - External Dependency Manager for Unity (EDM4U): native SDK-ları o gətirir.
- App ID və hər iki API açarı (
android_…,ios_…). - Səsli mesaj üçün (SDK 1.0.2-dən) Android tətbiqinin manifestində
RECORD_AUDIOelan olunmalıdır, yoxsa mikrofon düyməsi görünmür. Kamera üçün icazə lazım deyil.
-
2
Quraşdırma
- EDM4U-nu quraşdırın.
- Window › Package Manager › + › Add package from git URL (Unity 6-da «Install package from git URL») və bu ünvanı yazın:
https://github.com/clomni/clomni-mobile-sdk.git?path=unity#unity-1.0.5
- Android: Project Settings › Player › Android › Minimum API Level 23 və ya yuxarı. EDM4U › Android Resolver › Settings: «Use Gradle» və «Patch mainTemplate.gradle» açıq olsun (EDM4U 1.2.183 və ya daha yeni).
- iOS: Project Settings › Player › iOS › Target minimum iOS Version 15.0. Build-dən sonra
.xcodeproj-u yox,.xcworkspace-i açın. Xcode Swift versiyasını soruşsa,UnityFrameworkhədəfinəSWIFT_VERSION = 5.0yazın.
EDM4U iOS build-inin Podfile-ına
pod 'ClomniMessenger', '1.0.4'yazır. Bu forma pod-u CocoaPods trunk-da axtarır, SDK isə orada yoxdur. Hər iOS build-dən sonra build qovluğundakıPodfile-da həmin sətri dəyişin və oradapod installişlədin:pod 'ClomniMessenger', :git => 'https://github.com/clomni/clomni-mobile-sdk.git', :tag => '1.0.4'
Tez sınamaq üçün: Package Manager › Clomni Messenger › Samples › Basic › Import. Boş GameObject-ə
ClomniBasicSampleəlavə edin, Inspector-da App ID və açarları yazın, cihaza build edin. -
3
SDK-nı başladın
using ClomniMessenger; using UnityEngine; public static class ClomniSetup { [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void Initialize() { var apiKey = Application.platform == RuntimePlatform.IPhonePlayer ? "ios_…" : "android_…"; Clomni.Initialize("app_…", apiKey); if (Debug.isDebugBuild) Clomni.SetLogLevel(ClomniLogLevel.Debug); } }Clomni-ni Unity-nin əsas thread-indən çağırın, hadisələr də orada gəlir. -
4
İstifadəçi və Messenger
Clomni.LoginUser(new ClomniUser { UserId = "12345", Email = "[email protected]", Name = "Aysel" }, hashFromYourServer); Clomni.UpdateUser(language: "az", customAttributes: new Dictionary<string, object> { ["plan"] = "premium" }); // Together with the game's own logout: Clomni.Logout();Hash oyununuzun serverindən gəlir. Identity Secret-i heç vaxt oyuna qoymayın: nə C# koduna, nə asset-lərə, nə PlayerPrefs-ə.
using ClomniMessenger; using UnityEngine; using UnityEngine.UI; public sealed class SupportButton : MonoBehaviour { [SerializeField] private Button button; [SerializeField] private Text badge; private void OnEnable() { button.onClick.AddListener(Open); Clomni.UnreadCountChanged += ShowUnread; } private void OnDisable() { button.onClick.RemoveListener(Open); Clomni.UnreadCountChanged -= ShowUnread; } private void Open() => Clomni.Present("settings_support"); private void ShowUnread(int count) => badge.text = count > 0 ? count.ToString() : ""; }Digər çağırışlar:
PresentNewConversation(source),PresentConversation(id),Dismiss(),SetLauncherVisible(true),SetBottomPadding(72),StartFlow(...). Hadisələr:MessengerOpened,MessengerClosed,ConversationStarted,FlowCompleted,OnLink.Tətbiq hər açılanda, istifadəçi daxil olubsa,
Clomni.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
Push: Android
Açarları əvvəlcə panelə yükləyin («Mobil SDK push açarları»). Firebase Unity SDK-nı (Firebase Messaging) işlədin və
google-services.json-uAssets/-ə qoyun. Paketin «Push (Firebase)» nümunəsi tokeni və mesajları Clomni-yə ötürür:using ClomniMessenger; using Firebase.Messaging; using UnityEngine; public sealed class ClomniFirebaseBridge : MonoBehaviour { private void Start() { FirebaseMessaging.TokenReceived += OnTokenReceived; FirebaseMessaging.MessageReceived += OnMessageReceived; } private void OnDestroy() { FirebaseMessaging.TokenReceived -= OnTokenReceived; FirebaseMessaging.MessageReceived -= OnMessageReceived; } private void OnTokenReceived(object sender, TokenReceivedEventArgs e) { if (Application.platform == RuntimePlatform.Android) Clomni.SetDeviceToken(e.Token); } private void OnMessageReceived(object sender, MessageReceivedEventArgs e) { if (Application.platform != RuntimePlatform.Android) return; if (Clomni.HandlePush(e.Message.Data)) return; // the game's own push } }- Android 13+:
UnityEngine.Android.Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS"). - Bildiriş ikonu
.androidlibqovluğundakı drawable-dır, məsələnAssets/Plugins/Android/ClomniRes.androidlib/res/drawable/ic_notification.png, adıClomni.SetNotificationIcon("ic_notification")ilə verilir.
Firebase Unity mesajı C#-a yalnız oyun işləyəndə çatdırır. Oyun bağlı olanda da bildiriş görünsün deyə mesajı Unity başlamazdan əvvəl Java-da SDK-ya verin:
// Assets/Plugins/Android/ClomniListenerService.java package com.example.game; import ai.clomni.messenger.ClomniPush; import com.google.firebase.messaging.RemoteMessage; import com.google.firebase.messaging.cpp.ListenerService; public class ClomniListenerService extends ListenerService { @Override public void onMessageReceived(RemoteMessage message) { if (ClomniPush.handle(this, message.getData())) return; super.onMessageReceived(message); } }<!-- Assets/Plugins/Android/AndroidManifest.xml, inside <application>. The <manifest> element needs xmlns:tools="http://schemas.android.com/tools". --> <service android:name="com.google.firebase.messaging.cpp.ListenerService" tools:node="remove" /> <service android:name="com.example.game.ClomniListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>Build-in birləşmiş manifestində
MESSAGING_EVENT-i yalnızClomniListenerService-in qəbul etdiyini yoxlayın. - Android 13+:
-
6
Push: iOS
Clomni FCM tokenini yox, APNs cihaz tokenini hex kimi gözləyir. Unity-nin Mobile Notifications paketini (
com.unity.mobile.notifications) işlədin. Project Settings › Mobile Notifications › iOS: «Enable Push Notifications»-ı yandırın, o, capability-ni Xcode layihəsinə əlavə edir.using System.Collections; using ClomniMessenger; using UnityEngine; #if UNITY_IOS using Unity.Notifications.iOS; #endif public sealed class ClomniIosPush : MonoBehaviour { #if UNITY_IOS private string handled; private IEnumerator Start() { var options = AuthorizationOption.Alert | AuthorizationOption.Badge | AuthorizationOption.Sound; using (var request = new AuthorizationRequest(options, true)) { while (!request.IsFinished) yield return null; if (request.Granted && !string.IsNullOrEmpty(request.DeviceToken)) { Clomni.SetDeviceToken(request.DeviceToken); } } } // A tap brings the game to the front: a Clomni push opens its conversation. private void OnApplicationFocus(bool focused) { if (!focused) return; var tapped = iOSNotificationCenter.GetLastRespondedNotification(); if (tapped == null || tapped.Identifier == handled) return; handled = tapped.Identifier; Clomni.HandlePush(tapped.UserInfo); } #endif }Clomni.ShouldShowForeground(data)oyun açıq olanda gələn push-un göstərilməli olub-olmadığını deyir: Messenger açıqdırsa, Clomni push-u üçün false. -
7
Problemlər
- Editor-da heç nə baş vermir: gözlənilən haldır, cihazda sınayın.
- Android build
ai.clomni:messenger-i tapmır: Assets › External Dependency Manager › Android Resolver › Force Resolve, «Use Gradle» açıq olsun. pod installClomniMessenger-i tapmır: build qovluğundakı Podfile-da sətri:gitformasına dəyişin.- Xcode
ClomniMessengermodulunu tapmır:.xcworkspace-i açın. - Android-də bildiriş yalnız oyun açıq olanda gəlir: yuxarıdakı Java servisi.
-
8
Tam təlimat
- PDF: Clomni Mobile SDK təlimatı, Azərbaycan, ingilis və rus dilində.
- Onlayn: Unity.
- Paneldə: kanalın ayarlar sütununda «Təlimat».