Platformlar arası Firebase Cloud Messaging istemci uygulamanızı Unity ile yazmak için Firebase Cloud Messaging API'yi kullanın. Unity SDK hem Android hem Apple'da çalışır ancak her platform için bazı ek kurulum gerekir.
Başlamadan önce
Ön koşullar
Unity 2019.1 veya daha yeni bir sürümü yükleyin. Önceki sürümler de uyumlu olabilir ancak aktif olarak desteklenmez. Unity 2019.1 desteği kullanımdan kaldırıldı olarak kabul ediliyor ve bir sonraki büyük sürümden sonra artık aktif olarak desteklenmeyecek.
(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 şu koşulları karşıladığından emin olun:
- iOS için — iOS 11 veya sonraki sürümleri hedefler
- tvOS için: tvOS 12 veya sonraki sürümleri hedefler
- Android için — API düzeyi 19 (KitKat) veya sonraki sürümleri hedefler
Unity projenizi çalıştırmak için cihaz kurun veya emülatör kullanın.
iOS veya tvOS için: Uygulamanızı çalıştırmak ve aşağıdaki görevleri tamamlamak için bir fiziksel cihaz kurun:
- Apple Geliştirici hesabınız için bir Apple Anında Bildirim Kimlik Doğrulama Anahtarı edinin.
- XCode'da Uygulama > Özellikler altında Push Bildirimleri'ni etkinleştirin.
Android için: Emülatörler, Google Play ile bir emülatör görüntüsü kullanmalıdır.
- Google Hesabınızı kullanarak Firebase'de oturum açın.
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 eklemeden önce Unity projenize bağlanmak için bir Firebase projesi oluşturmanız gerekir. Firebase projeleri hakkında daha fazla bilgi edinmek için Firebase Projelerini Anlama sayfasını ziyaret edin.
2. adım: Uygulamanızı Firebase'e kaydedin
Firebase projenize bağlamak 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 daha önce 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 iki hedefi aynı anda kaydetmeyi de seçebilirsiniz.
Unity projenizin platforma özgü kimliklerini girin.
iOS için: iOS paket kimliği alanına Unity projenizin iOS kimliğini girin.
Android için: Android paket adı alanına Unity projenizin Android kimliğini girin.
Paket adı ve uygulama kimliği terimleri genellikle birbirinin yerine kullanılır.
(İsteğe bağlı) Unity projenizin platforma özgü takma adlarını girin.
Bu takma adlar, dahili kullanım tanımlayıcılarıdır ve bunları Firebase konsolunda yalnızca siz görebilirsiniz.Uygulamayı kaydet'i tıklayın.
3. Adım: Firebase yapılandırma dosyalarını ekleyin
Firebase konsolu kurulum iş akışında platforma özel Firebase yapılandırma dosyalarınızı edinin.
iOS için: GoogleService-Info.plist dosyasını indir'i tıklayın.
Android için: google-services.json'u indir'i tıklayın.
Unity projenizin Proje penceresini açın, ardından yapılandırma dosyalarınızı
Assets
klasörüne taşıyın.Tekrar Firebase konsolunda kurulum iş akışında İleri'yi tıklayın.
4. adım: Firebase Unity SDK'larını ekleyin
Firebase konsolunda Firebase Unity SDK'yı İndir'i tıklayın ve ardından SDK'yı uygun bir yerde açın.
Firebase Unity SDK'yı istediğiniz zaman tekrar indirebilirsiniz.
Firebase Unity SDK platforma özgü değildir.
Açık Unity projenizde Assets > Paketi İçe Aktar > Özel Paket'e gidin.
Sıkıştırılmamış SDK'dan uygulamanızda kullanmak istediğiniz desteklenen Firebase ürünlerini seçin.
Firebase Cloud Messaging ile optimum deneyim yaşamak için projenizde Google Analytics'i etkinleştirmenizi öneririz. Ayrıca, Analytics kurulumunun bir parçası olarak Analytics Firebase paketini uygulamanıza eklemeniz gerekir.
Analytics etkin
- Google Analytics için Firebase paketini ekleyin:
FirebaseAnalytics.unitypackage
- Firebase Cloud Messaging için paketi ekleyin:
FirebaseMessaging.unitypackage
Analytics etkin değil
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.
Tekrar Firebase konsolunda kurulum iş akışında İleri'yi tıklayın.
5. adım: Google Play Hizmetleri sürüm gereksinimlerini onaylayın
Android için Firebase Unity SDK'sı Google Play Hizmetleri'nin kullanılabilmesini gerektirir. SDK'nın kullanılabilmesi için bu hizmetlerin güncel olması gerekir.
Aşağıdaki using
ifadesini ve başlatma kodunu uygulamanızın başına ekleyin. SDK'da başka yöntemleri çağırmadan önce Google Play hizmetlerini kontrol edebilir ve isteğe bağlı olarak Firebase Unity SDK'nın gerektirdiği 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 kaydedildi ve yapılandırıldı.
Apple platformlarında push bildirimlerini etkinleştirme
1. adım: Kullanıcı bildirimleri çerçevesini ekleyin
Xcode'da projeyi tıklayın, ardından Editor alanından General (Genel) sekmesini seçin.
Bağlı Çerçeveler ve Kitaplıklar'a gidin ve çerçeve eklemek için + düğmesini tıklayın.
Görüntülenen pencerede UserBildirimler.framework'e gidin, ilgili 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 alanından Capabilities'i (Özellikler) seçin.
Push Bildirimleri'ni Açık olarak ayarlayın.
Arka Plan Modları'na gidin ve ardından ayarı Açık hale getirin.
Arka Plan Modları'nın altındaki Uzaktan bildirimler onay kutusunu seçin.
Firebase Cloud Messaging'i başlatma
TokenReceived
veya MessageReceived
etkinlikleri için işleyiciler eklenirken Firebase Cloud Mesaj kitaplığı başlatılır.
Başlatma sonrasında istemci uygulama örneği için bir kayıt jetonu istenir. Uygulama, OnTokenReceived
etkinliği içeren jetonu alır ve bu jeton daha sonra kullanılmak üzere önbelleğe alınır. Mesajlar için bu cihazı hedeflemek istiyorsanız bu jetona ihtiyacınız olacaktır.
Ayrıca, gelen mesajları almak istiyorsanız OnMessageReceived
etkinliğine kaydolmanız gerekir.
Tüm ayarlar aşağıdaki gibi 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
Firebase Cloud Messaging, Android'de varsayılan UnityPlayerActivity
öğesinin yerini alan özel bir giriş noktası etkinliğiyle birlikte gelir. Özel giriş noktası kullanmıyorsanız bu değiştirme işlemi otomatik olarak gerçekleşir ve başka bir işlem yapmanız gerekmez. Varsayılan giriş noktası etkinliğini kullanmayan veya kendi Assets/Plugins/AndroidManifest.xml
öğesini sağlayan uygulamaların daha fazla yapılandırmaya ihtiyacı vardır.
Android'deki Firebase Cloud Messaging Unity Eklentisi iki ek dosyayla paket halinde sunulur:
Assets/Plugins/Android/libmessaging_unity_player_activity.jar
,UnityPlayerActivity
standardının yerine geçenMessagingUnityPlayerActivity
adlı bir etkinlik içeriyor.Assets/Plugins/Android/AndroidManifest.xml
, uygulamaya giriş noktası olarakMessagingUnityPlayerActivity
kullanma talimatı verir.
Bu dosyalar, varsayılan UnityPlayerActivity
ayarı onStop
ve 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
API'sini uygulamadığı için sağlanmaktadır.
Özel giriş noktası etkinliğini yapılandırma
Uygulamanız varsayılan UnityPlayerActivity
politikasını kullanmıyorsa sağlanan AndroidManifest.xml
öğesini kaldırmanız ve özel etkinliğinizin Android Etkinlik Yaşam Döngüsü'ndeki tüm geçişleri doğru şekilde işlediğinden emin olmanız gerekir (bunun nasıl yapılacağına dair bir örnek aşağıda gösterilmektedir). Özel etkinliğiniz UnityPlayerActivity
kapsamını genişletiyorsa gerekli tüm yöntemleri uygulayan com.google.firebase.MessagingUnityPlayerActivity
öğesini genişletebilirsiniz.
Özel bir Etkinlik kullanıyor ve com.google.firebase.MessagingUnityPlayerActivity
uzantısını genişletmiyorsanız aşağıdaki snippet'leri Etkinliğinize 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ümlerinde (7.1.0 sonrası) JobIntentService
kullanılır. Bunun için AndroidManifest.xml
dosyasında ek değişiklikler gerekir.
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" > </service>
Android'de ileti teslimi hakkında not
Uygulama hiç çalışmıyorken ve kullanıcı bir bildirime dokunduğunda mesaj, varsayılan olarak FCM'nin yerleşik geri çağırmaları üzerinden yönlendirilmez. Bu durumda, mesaj yükleri uygulamayı başlatmak için kullanılan bir Intent
üzerinden alınır.
Uygulama arka plandayken alınan mesajların bildirim alanı, sistem tepsisi bildirimini doldurmak için kullanılır, ancak bu bildirim içeriği FCM'ye iletilmez. Yani FirebaseMessage.Notification
, null olur.
Özet olarak:
Uygulama durumu | Bildirim | Veriler | Her ikisi de |
---|---|---|---|
Ön plan | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Firebase.Messaging.FirebaseMessaging.MessageReceived |
Firebase.Messaging.FirebaseMessaging.MessageReceived |
Genel bilgi | Sistem tepsisi | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Bildirim: sistem tepsisi Veriler: Amacın ekstraları. |
Otomatik başlatmayı engelle
FCM, cihaz hedefleme için bir kayıt jetonu oluşturur.
Kitaplık, jeton oluşturulduğunda tanımlayıcı ve yapılandırma verilerini Firebase'e yükler. Jetonu kullanmadan önce açık bir etkinleştirme işlemi almak isterseniz FCM'yi (ve Android'de Analytics'i) devre dışı bırakarak yapılandırma sırasında oluşturma işlemini engelleyebilirsiniz. Bunu yapmak için Apple'da Info.plist
cihazınıza (GoogleService-Info.plist
değil) veya Android'de AndroidManifest.xml
cihazınıza meta veri değeri ekleyin:
Android
<?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>
Swift
FirebaseMessagingAutoInitEnabled = NO
FCM'yi yeniden etkinleştirmek için çalışma zamanı araması yapabilirsiniz:
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
Bu değer, ayarlandıktan sonra uygulamanın yeniden başlatılmasında da aynı kalır.
Android'de Derin Bağlantı İçeren Mesajları Ele Alma
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ızın derin bağlantılarını işleyen etkinliğe yeni bir intent filtresi eklemeniz gerekir. Amaç filtresi, alanınızın derin bağlantılarını yakalamalıdır. Mesajlarınız bir derin bağlantı içermiyorsa 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>
Amaç filtresini daha esnek hale getirmek için joker karakter belirtmek de mümkündür. Örnek:
<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 şema ve ana makinenin bağlantısını içeren bir bildirime dokunduğunda uygulamanız bağlantıyı işlemek için bu intent filtresiyle etkinliği 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 demektir. Daha fazla bilgi edinmek için bu işlevi gösteren hızlı başlangıç örneğine göz atın.
Uygulamanıza başka, daha gelişmiş davranışlar eklemek için uygulama sunucusundan mesaj gönderme kılavuzlarına bakın:
Bu özelliklerden yararlanmak için sunucu uygulamasına ihtiyacınız olacağını unutmayın.