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. 1

    Tələblər

    • Unity 2021.3 və ya daha yeni, Unity 6 da işləyir.
    • Android: Minimum API Level 23, compileSdk 35 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_AUDIO elan olunmalıdır, yoxsa mikrofon düyməsi görünmür. Kamera üçün icazə lazım deyil.
  2. 2

    Quraşdırma

    1. EDM4U-nu quraşdırın.
    2. 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
    1. 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).
    2. 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, UnityFramework hədəfinə SWIFT_VERSION = 5.0 yazı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ə orada pod install iş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. 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. 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. 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-u Assets/-ə 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 .androidlib qovluğundakı drawable-dır, məsələn Assets/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ız ClomniListenerService-in qəbul etdiyini yoxlayın.

  6. 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. 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 install ClomniMessenger-i tapmır: build qovluğundakı Podfile-da sətri :git formasına dəyişin.
    • Xcode ClomniMessenger modulunu tapmır: .xcworkspace-i açın.
    • Android-də bildiriş yalnız oyun açıq olanda gəlir: yuxarıdakı Java servisi.
  8. 8

    Tam təlimat

Sənəd