Unity ile platformlar arası Firebase Cloud Messaging istemci uygulamanızı yazmak için Firebase Cloud Messaging API'yi kullanın. Unity SDK, her iki platform için de çalışır ancak her platformda ek kurulum yapılması gerekir.
Başlamadan önce
Ön koşullar
Unity 2021 LTS veya sonraki bir sürümü yükleyin. Unity 2020 desteği kullanımdan kaldırılmış olarak kabul edilir ve bir sonraki büyük sürümden sonra artık aktif olarak desteklenmeyecektir. Daha eski sürümler de uyumlu olabilir ancak aktif olarak desteklenmez.
(Yalnızca Apple platformları) Aşağıdakileri yükleyin:
- Xcode 13.3.1 veya sonraki sürümler
- CocoaPods 1.12.0 veya sonraki sürümler
Unity projenizin aşağıdaki koşulları karşıladığından emin olun:
- iOS için: iOS 13 veya sonraki sürümleri hedefler.
- tvOS için: tvOS 13 veya sonraki sürümleri hedefler.
- Android için: API düzeyi 21 (Lollipop) veya sonraki sürümleri hedefler.
Unity projenizi çalıştırmak için bir cihaz kurun veya emülatör kullanın.
iOS veya tvOS için: Uygulamanızı çalıştırmak üzere fiziksel bir cihaz ayarlayın ve şu görevleri tamamlayın:
- Apple geliştirici hesabınız için Apple Anında Bildirim Kimlik Doğrulama Anahtarı edinin.
- XCode'da App > Capabilities altında push bildirimlerini etkinleştirin.
Android için: Emülatörler, Google Play'i içeren bir emülatör resmi kullanmalıdır.
- Google Hesabınızı kullanarak Firebase'de oturum açın.
Henüz bir Unity projeniz yoksa ve yalnızca bir Firebase ürününü denemek istiyorsanız hızlı başlangıç örneklerimizden birini indirebilirsiniz.
1. adım: Firebase projesi oluşturun
Firebase'i Unity projenize ekleyebilmek için öncelikle Unity projenize bağlanacak bir Firebase projesi oluşturmanız gerekir. Firebase projeleri hakkında daha fazla bilgi edinmek için Firebase Projelerini Anlama başlıklı makaleyi inceleyin.
Firebase projesi oluşturma
-
Firebase konsolunda Proje ekle'yi tıklayın.
-
Firebase kaynaklarını mevcut bir Google Cloud projeye eklemek için projenin adını girin veya açılır menüden projeyi seçin.
-
Yeni bir proje oluşturmak için proje adı girin. İsterseniz proje adının altında gösterilen proje kimliğini de düzenleyebilirsiniz.
-
-
İstenirse Firebase şartlarını inceleyip kabul edin.
-
Devam'ı tıklayın.
-
(İsteğe bağlı) Projeniz için Google Analytics'ı ayarlayın. Bu, aşağıdaki Firebase ürünlerini kullanarak optimum bir deneyim sağlar: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging ve Remote Config (kişiselleştirme dahil).
Mevcut bir Google Analytics hesabı seçin veya yeni bir hesap oluşturun. Yeni bir hesap oluşturursanız Analytics raporlama konumunuzu seçin, ardından projeniz için veri paylaşım ayarlarını ve Google Analytics şartlarını kabul edin.
-
Proje oluştur'u (veya Firebase'i mevcut bir Google Cloud projesine ekliyorsanız Firebase ekle'yi) tıklayın.
Firebase, Firebase projeniz için kaynakları otomatik olarak sağlar. İşlem tamamlandığında Firebase konsolunda Firebase projenizin genel bakış sayfasına yönlendirilirsiniz.
2. adım: Uygulamanızı Firebase'e kaydedin
Firebase projenize bağlanmak için bir veya daha fazla uygulama ya da oyun kaydedebilirsiniz.
Firebase konsoluna gidin.
Kurulum iş akışını başlatmak için projeye genel bakış sayfasının ortasındaki Unity simgesini (
) tıklayın.Firebase projenize zaten bir uygulama eklediyseniz platform seçeneklerini görüntülemek için Uygulama ekle'yi tıklayın.
Unity projenizin hangi derleme hedefini kaydetmek istediğinizi seçin. Dilerseniz her iki hedefi de aynı anda kaydedebilirsiniz.
Unity projenizin platforma özel kimliklerini girin.
iOS için: Unity projenizin iOS kimliğini iOS paket kimliği alanına girin.
Android için: Unity projenizin Android kimliğini Android paket adı alanına girin.
Paket adı ve uygulama kimliği terimleri genellikle birbirinin yerine kullanılır.
Unity projenizin kimliğini nerede bulabilirsiniz?
Unity projenizi Unity IDE'nizde açın, ardından her platformun ayarlar bölümüne gidin:
iOS için: Build Settings > iOS'e (Derleme Ayarları > iOS) gidin.
Android için: Android > Player Settings > Other Settings'e (Android > Oynatıcı Ayarları > Diğer Ayarlar) gidin.
Unity projenizin kimliği, Bundle Identifier değeridir (örnek kimlik:
com.yourcompany.yourproject
).(İsteğe bağlı) Unity projenizin platforma özel takma adlarını girin.
Bu takma adlar dahili, kolaylık tanımlayıcılarıdır ve yalnızca Firebase konsolunda size görünür.Uygulamayı kaydet'i tıklayın.
3. adım: Firebase yapılandırma dosyalarını ekleyin
Platforma özel Firebase yapılandırma dosyalarınızı Firebase konsol kurulumu iş akışında edinin.
iOS için: GoogleService-Info.plist'i indir'i tıklayın.
Android için: google-services.json dosyasını indir'i tıklayın.
Bu yapılandırma dosyası hakkında bilmeniz gerekenler nelerdir?
Firebase yapılandırma dosyasında projeniz ve uygulamanız için benzersiz ancak gizli olmayan tanımlayıcılar bulunur. Bu yapılandırma dosyası hakkında daha fazla bilgi edinmek için Firebase projelerini anlama başlıklı makaleyi inceleyin.
Firebase yapılandırma dosyanızı istediğiniz zaman tekrar indirebilirsiniz.
Yapılandırma dosyası adına
(2)
gibi ek karakterler eklenmediğinden emin olun.
Unity projenizin Proje penceresini açın, ardından yapılandırma dosyalarınızı
Assets
klasörüne taşıyın.Firebase konsoluna geri dönün ve kurulum iş akışında İleri'yi tıklayın.
4. adım: Firebase Unity SDK'larını ekleyin
Firebase konsolunda Firebase Unity SDK'sını indir'i tıklayın, ardından SDK'yı uygun bir yerde açın.
Firebase Unity SDK'sını istediğiniz zaman tekrar indirebilirsiniz.
Firebase Unity SDK'sı platforma özgü değildir.
Açık Unity projenizde Öğeler > Paket İçe Aktar > Özel Paket'e gidin.
Arşivden çıkarılan SDK'dan, uygulamanızda kullanmak istediğiniz desteklenen Firebase ürünlerini seçin.
Firebase Cloud Messaging ile en iyi deneyimi yaşamak için projenizde Google Analytics'ı etkinleştirmenizi öneririz. Ayrıca, Analytics kurulumunun bir parçası olarak Analytics için Firebase paketini uygulamanıza eklemeniz gerekir.
- Google Analytics için Firebase paketini ekleyin:
FirebaseAnalytics.unitypackage
- Firebase Cloud Messaging için paketi ekleyin:
FirebaseMessaging.unitypackage
Firebase Cloud Messaging için paketi ekleyin:
FirebaseMessaging.unitypackage
- Google Analytics için Firebase paketini ekleyin:
Unity Paketini İçe Aktar penceresinde İçe Aktar'ı tıklayın.
Firebase konsoluna geri dönün ve kurulum iş akışında İleri'yi tıklayın.
5. adım: Google Play Hizmetleri sürümüyle ilgili şartları onaylayın
Android için Firebase Unity SDK'sındaki bazı ürünler Google Play services gerektirir. Hangi ürünlerin bu bağımlılığa sahip olduğunu öğrenin. Bu ürünlerin kullanılabilmesi için Google Play services güncel olmalıdır.
Uygulamanızın başına aşağıdaki using
ifadesini ve başlatma kodunu ekleyin. SDK'daki diğer yöntemleri çağırmadan önce Google Play services sürümünü kontrol edebilir ve isteğe bağlı olarak gerekli sürüme güncelleyebilirsiniz.
using Firebase.Extensions;
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
// Create and hold a reference to your FirebaseApp,
// where app is a Firebase.FirebaseApp property of your application class.
app = Firebase.FirebaseApp.DefaultInstance;
// Set a flag here to indicate whether Firebase is ready to use by your app.
} else {
UnityEngine.Debug.LogError(System.String.Format(
"Could not resolve all Firebase dependencies: {0}", dependencyStatus));
// Firebase Unity SDK is not safe to use here.
}
});
Unity projeniz Firebase'i kullanacak şekilde kaydedilmiş ve yapılandırılmış olmalıdır.
Apple desteği için APNs kimlik doğrulama anahtarınızı yükleyin
APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin. Henüz bir APNs kimlik doğrulama anahtarınız yoksa Apple Developer Member Center'da bir tane oluşturduğunuzdan emin olun.
-
Firebase konsolundaki projenizde dişli simgesini, Proje Ayarları'nı ve ardından Cloud Messaging sekmesini seçin.
-
iOS uygulama yapılandırması bölümündeki APNs kimlik doğrulama anahtarı altında, Yükle düğmesini tıklayın.
-
Anahtarınızı kaydettiğiniz konuma gidin, anahtarınızı seçin ve Aç'ı tıklayın. Anahtarın anahtar kimliğini ekleyin ( Apple Developer Member Center'da bulunur) ve Yükle'yi tıklayın.
Apple platformlarında push bildirimlerini etkinleştirme
1. adım: Kullanıcı bildirimleri çerçevesini ekleyin
Xcode'da projeyi tıklayın, ardından Düzenleyici alanından Genel sekmesini seçin.
Bağlı Framework'ler ve Kitaplıklar bölümüne gidin, ardından framework eklemek için + düğmesini tıklayın.
Görüntülenen pencerede UserNotifications.framework'e gidin, bu girişi ve ardından Ekle'yi tıklayın.
2. adım: Push bildirimlerini etkinleştirin
Xcode'da projeyi tıklayın, ardından Editor area'dan Capabilities sekmesini seçin.
Push Bildirimleri'ni Açık konuma getirin.
Arka Plan Modları'na gidin ve Açık olarak değiştirin.
Arka Plan Modları bölümünde Uzaktan bildirimler onay kutusunu işaretleyin.
Firebase Cloud Messaging başlatılıyor
Firebase Cloud Message kitaplığı, TokenReceived
veya MessageReceived
etkinlikleri için işleyiciler eklenirken başlatılır.
Başlatma sırasında, istemci uygulaması örneği için bir kayıt jetonu istenir. Uygulama, OnTokenReceived
etkinliğiyle jetonu alır. Bu jeton, daha sonra kullanılmak üzere önbelleğe alınmalıdır. Bu cihazı mesajlar için hedeflemek istiyorsanız bu jetona ihtiyacınız vardır.
Ayrıca, gelen mesajları almak istiyorsanız OnMessageReceived
etkinliğine kaydolmanız gerekir.
Kurulumun tamamı şu şekilde görünür:
public void Start() { Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived; Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived; } public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) { UnityEngine.Debug.Log("Received Registration Token: " + token.Token); } public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) { UnityEngine.Debug.Log("Received a new message from: " + e.Message.From); }
Android giriş noktası etkinliğini yapılandırma
Android'de Firebase Cloud Messaging, varsayılan UnityPlayerActivity
yerine özel bir giriş noktası etkinliğiyle birlikte gelir. Özel bir giriş noktası kullanmıyorsanız bu değiştirme işlemi otomatik olarak gerçekleşir ve ek bir işlem yapmanız gerekmez. Varsayılan giriş noktası olan Activity'yi kullanmayan veya kendi Assets/Plugins/AndroidManifest.xml
değerini sağlayan uygulamalar için ek yapılandırma gerekir.
Android'deki Firebase Cloud Messaging Unity eklentisi iki ek dosyayla birlikte gelir:
Assets/Plugins/Android/libmessaging_unity_player_activity.jar
, standartUnityPlayerActivity
yerine geçenMessagingUnityPlayerActivity
adlı bir etkinlik içeriyor.Assets/Plugins/Android/AndroidManifest.xml
, uygulamaya giriş noktası olarakMessagingUnityPlayerActivity
kullanılmasını ister.
Bu dosyalar, varsayılan UnityPlayerActivity
, onStop
, onRestart
etkinlik yaşam döngüsü geçişlerini işlemediği veya Firebase Cloud Messaging'in gelen mesajları doğru şekilde işlemesi için gerekli olan onNewIntent
'yi uygulamadığı için sağlanır.
Özel giriş noktası etkinliği yapılandırma
Uygulamanız varsayılan UnityPlayerActivity
kullanmıyorsa sağlanan AndroidManifest.xml
kaldırmanız ve özel etkinliğinizin Android Etkinlik Yaşam Döngüsü'nün tüm geçişlerini düzgün şekilde işlemesini sağlamanız gerekir (Bunun nasıl yapılacağına dair bir örnek aşağıda gösterilmiştir). Özel etkinliğiniz UnityPlayerActivity
öğesini genişletiyorsa bunun yerine gerekli tüm yöntemleri uygulayan com.google.firebase.MessagingUnityPlayerActivity
öğesini genişletebilirsiniz.
Özel bir etkinlik kullanıyorsanız ve com.google.firebase.MessagingUnityPlayerActivity
'yı genişletmiyorsanız etkinliğinize aşağıdaki snippet'leri eklemeniz gerekir.
/** * Workaround for when a message is sent containing both a Data and Notification payload. * * When the app is in the background, if a message with both a data and notification payload is * received the data payload is stored on the Intent passed to onNewIntent. By default, that * intent does not get set as the Intent that started the app, so when the app comes back online * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so * that it sends the intent to the MessageForwardingService which forwards the message to the * FirebaseMessagingService which in turn sends the message to the application. */ @Override protected void onNewIntent(Intent intent) { Intent message = new Intent(this, MessageForwardingService.class); message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT); message.putExtras(intent); message.setData(intent.getData()); // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`. // startService(message); MessageForwardingService.enqueueWork(this, message); } /** * Dispose of the mUnityPlayer when restarting the app. * * This ensures that when the app starts up again it does not start with stale data. */ @Override protected void onCreate(Bundle savedInstanceState) { if (mUnityPlayer != null) { mUnityPlayer.quit(); mUnityPlayer = null; } super.onCreate(savedInstanceState); }
Firebase C++ SDK'sının yeni sürümleri (7.1.0 ve sonrası), JobIntentService
kullanır. Bu da AndroidManifest.xml
dosyasında ek değişiklikler yapılmasını gerektirir.
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="true" > </service>
Android'de ileti teslimiyle ilgili not
Uygulama hiç çalışmıyorken kullanıcı bir bildirime dokunduğunda mesaj, varsayılan olarak FCM'nın yerleşik geri çağırmaları üzerinden yönlendirilmez. Bu durumda, mesaj yükleri uygulamayı başlatmak için kullanılan bir Intent
aracılığıyla alınır.
Uygulama arka plandayken alınan mesajların bildirim alanındaki içerik, sistem tepsisi bildirimini doldurmak için kullanılır ancak bu bildirim içeriği FCM ile paylaşılmaz. Yani,
FirebaseMessage.Notification
değeri boş olur.
Özet olarak:
Uygulama durumu | Bildirim | Veriler | İkisi de |
---|---|---|---|
Ön plan | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Firebase.Messaging.FirebaseMessaging.MessageReceived |
Firebase.Messaging.FirebaseMessaging.MessageReceived |
Arka plan | Sistem tepsisi | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Bildirim: sistem tepsisi Veriler: Amaç ekstralarında. |
Otomatik başlatmayı önleme
FCM, cihaz hedefleme için bir kayıt jetonu oluşturur.
Kitaplık, jeton oluşturulduğunda tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Jetonu kullanmadan önce açıkça izin almak istiyorsanız FCM'yi (ve Android'de Analytics'i) devre dışı bırakarak yapılandırma sırasında jeton oluşturulmasını engelleyebilirsiniz. Bunu yapmak için Apple'da Info.plist
(GoogleService-Info.plist
değil) veya Android'de AndroidManifest.xml
öğenize bir meta veri değeri ekleyin:
<?xml version="1.0" encoding="utf-8"?> <application> <meta-data android:name="firebase_messaging_auto_init_enabled" android:value="false" /> <meta-data android:name="firebase_analytics_collection_enabled" android:value="false" /> </application>
FirebaseMessagingAutoInitEnabled = NO
FCM'yi yeniden etkinleştirmek için bir çalışma zamanı çağrısı yapabilirsiniz:
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
Bu değer, ayarlandıktan sonra uygulama yeniden başlatıldığında da geçerliliğini korur.
Android'de derin bağlantı içeren mesajları işleme
FCM, uygulamanıza derin bağlantı içeren mesajların gönderilmesine olanak tanır. Derin bağlantı içeren mesajlar almak için uygulamanızdaki derin bağlantıları işleyen etkinliğe yeni bir amaç filtresi eklemeniz gerekir. Amaç filtresi, alanınızın derin bağlantılarını yakalamalıdır. İletilerinizde derin bağlantı yoksa bu yapılandırma gerekli değildir. AndroidManifest.xml dosyasında:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/> </intent-filter>
Niyet filtresini daha esnek hale getirmek için joker karakter de belirtebilirsiniz. Örneğin:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="*.example.com" android:scheme="http"/> <data android:host="*.example.com" android:scheme="https"/> </intent-filter>
Kullanıcılar, belirttiğiniz şemaya ve ana makineye bağlantı içeren bir bildirime dokunduğunda uygulamanız, bağlantıyı işlemek için etkinliği bu amaç filtresiyle başlatır.
Sonraki adımlar
İstemci uygulamasını ayarladıktan sonra Firebase ile aşağı akış ve konu mesajları göndermeye hazırsınız. Daha fazla bilgi edinmek için bu işlevi gösteren hızlı başlangıç örneğine bakın.
Uygulamanıza daha gelişmiş davranışlar eklemek için uygulama sunucusundan mesaj göndermeyle ilgili kılavuzlara bakın:
Bu özelliklerden yararlanmak için sunucu uygulamasına ihtiyacınız olduğunu unutmayın.