Как подключить мобильный SDK к игре на Unity
Обновлено: 9 октября 2026 · 8 мин чтения
Пакет Unity является мостом C# к нативным SDK для Android и iOS, экраны нативные. В редакторе и на других платформах вызовы ничего не делают: SDK работает только в сборках Android и iOS.
Шаги
-
1
Требования
- Unity 2021.3 или новее, Unity 6 тоже работает.
- Android: Minimum API Level 23,
compileSdk35 или новее. iOS: Target minimum iOS Version 15.0, Xcode 15. - External Dependency Manager for Unity (EDM4U): он приносит нативные SDK.
- App ID и оба ключа API (
android_…,ios_…). - Голосовым сообщениям (с SDK 1.0.2) нужно
RECORD_AUDIOв манифесте Android-приложения, иначе кнопка микрофона не показывается. Камере разрешение не нужно.
-
2
Установка
- Установите EDM4U.
- Window › Package Manager › + › Add package from git URL (в Unity 6 «Install package from git URL») и введите:
https://github.com/clomni/clomni-mobile-sdk.git?path=unity#unity-1.0.5
- Android: Project Settings › Player › Android › Minimum API Level 23 или выше. EDM4U › Android Resolver › Settings: «Use Gradle» и «Patch mainTemplate.gradle» включены (EDM4U 1.2.183 или новее).
- iOS: Project Settings › Player › iOS › Target minimum iOS Version 15.0. После сборки открывайте
.xcworkspace, а не.xcodeproj. Если Xcode спрашивает версию Swift, укажитеSWIFT_VERSION = 5.0у целиUnityFramework.
EDM4U пишет в Podfile сборки iOS
pod 'ClomniMessenger', '1.0.4'. Такая форма ищет pod в CocoaPods trunk, где SDK не опубликован. После каждой сборки iOS замените эту строку вPodfileпапки сборки и выполните тамpod install:pod 'ClomniMessenger', :git => 'https://github.com/clomni/clomni-mobile-sdk.git', :tag => '1.0.4'
Чтобы быстро попробовать: Package Manager › Clomni Messenger › Samples › Basic › Import. Добавьте
ClomniBasicSampleна пустой GameObject, введите App ID и ключи в Inspector и соберите на устройство. -
3
Запустите SDK
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из главного треда Unity (main thread), события приходят туда же. -
4
Пользователь и 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();Хеш приходит с сервера Вашей игры. Никогда не кладите Identity Secret в игру: ни в код C#, ни в ассеты, ни в 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() : ""; }Другие вызовы:
PresentNewConversation(source),PresentConversation(id),Dismiss(),SetLauncherVisible(true),SetBottomPadding(72),StartFlow(...). События:MessengerOpened,MessengerClosed,ConversationStarted,FlowCompleted,OnLink.Пока пользователь вошёл в приложение, вызывайте
Clomni.LoginUserпри каждом запуске, как будто он только что вошёл. Для того же пользователя SDK использует сохранённую сессию. -
5
Push: Android
Сначала загрузите ключи в панель (статья «Ключи push для мобильного SDK»). Используйте Firebase Unity SDK (Firebase Messaging) и положите
google-services.jsonвAssets/. Пример пакета «Push (Firebase)» передаёт токен и сообщения в Clomni: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"). - Иконка уведомления является drawable в папке
.androidlib, напримерAssets/Plugins/Android/ClomniRes.androidlib/res/drawable/ic_notification.png, имя передаётся черезClomni.SetNotificationIcon("ic_notification").
Firebase Unity доставляет сообщение в C# только пока игра работает. Чтобы уведомление появлялось и при закрытой игре, передайте сообщение SDK в Java до запуска Unity:
// 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>Проверьте в объединённом манифесте сборки, что
MESSAGING_EVENTполучает толькоClomniListenerService. - Android 13+:
-
6
Push: iOS
Clomni ожидает токен устройства APNs в hex, а не токен FCM. Используйте пакет Unity Mobile Notifications (
com.unity.mobile.notifications). В Project Settings › Mobile Notifications › iOS включите «Enable Push Notifications», он добавит capability в проект Xcode.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)говорит, показывать ли push, пришедший при открытой игре: для push Clomni при открытом Messenger это false. -
7
Проблемы
- В редакторе ничего не происходит: так и должно быть, проверяйте на устройстве.
- Сборка Android не находит
ai.clomni:messenger: Assets › External Dependency Manager › Android Resolver › Force Resolve, «Use Gradle» включён. pod installне находитClomniMessenger: замените строку в Podfile папки сборки на форму:git.- Xcode не находит модуль
ClomniMessenger: откройте.xcworkspace. - На Android уведомления приходят только при открытой игре: нужен Java-сервис выше.
-
8
Полное руководство
- PDF: руководство Clomni Mobile SDK, на русском языке.
- Онлайн: Unity (на английском).
- В панели: раздел «Guide» в колонке настроек канала.