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 de Apple için çalışır ve her platform için bazı ek kurulumlar gerekir.
Sen başlamadan önce
Önkoşullar
Unity 2019.1 veya üstünü yükleyin. Daha önceki sürümler de uyumlu olabilir ancak aktif olarak desteklenmeyecektir. Unity 2019.1 desteğinin kullanımdan kaldırıldığı 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 üzeri
- CocoaPod'lar 1.10.0 veya üzeri
Unity projenizin şu gereksinimleri karşıladığından emin olun:
- iOS için — iOS 11 veya üstünü hedefler
- tvOS için - tvOS 12 veya üstünü hedefler
- Android için — API düzeyi 19 (KitKat) veya üstünü hedefler
Unity projenizi çalıştırmak için bir cihaz kurun veya bir emülatör kullanın.
iOS veya tvOS için — Uygulamanızı çalıştırmak için fiziksel bir cihaz kurun ve şu görevleri tamamlayın:
- Apple Geliştirici hesabınız için bir Apple Anında Bildirim Kimlik Doğrulama Anahtarı edinin.
- Uygulama > Yetenekler altında XCode'da Anında Bildirimleri etkinleştirin.
Android için — Emülatörlerin Google Play'de bir emülatör resmi kullanması gerekir.
- 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 ekleyebilmeniz 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 Anlayın sayfasını ziyaret edin.
2. Adım: Uygulamanızı Firebase'e kaydedin
Firebase projenize bağlanmak için bir veya daha fazla uygulama veya oyunu kaydedebilirsiniz.
Firebase konsoluna gidin.
Kurulum iş akışını başlatmak için projeye genel bakış sayfasının ortasında Unity simgesine (
) 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 yapı hedefini kaydetmek istediğinizi seçin, hatta her iki hedefi de aynı anda kaydetmeyi bile seçebilirsiniz.
Unity projenizin platforma özel kimlik(ler)ini girin.
iOS için — iOS paket kimliği alanına Unity projenizin iOS kimliğini girin.
Android için — Unity projenizin Android kimliğini Android paket adı alanına girin.
Paket adı ve uygulama kimliği terimleri sıklıkla birbirinin yerine kullanılır.
Unity projenizi Unity IDE'nizde açın, ardından her platformun ayarlar bölümüne gidin:
iOS için — Yapı Ayarları > iOS'a gidin.
Android için — Android > Oynatıcı Ayarları > Diğer Ayarlar'a gidin.
Unity projenizin kimliği Paket Tanımlayıcı değeridir (örnek kimlik:
com.yourcompany.yourproject
).(İsteğe bağlı) Unity projenizin platforma özel takma adlarını girin.
Bu takma adlar dahili, kullanışlı tanımlayıcılardır ve yalnızca Firebase konsolunda sizin tarafınızdan görülebilir.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 konsolu kurulum iş akışında edinin.
iOS için — GoogleService-Info.plist'i İndir'i tıklayın.
Android için — Google-services.json'u İndir'i tıklayın.
Firebase yapılandırma dosyası, projeniz için benzersiz ancak gizli olmayan tanımlayıcılar içerir. Bu yapılandırma dosyası hakkında daha fazla bilgi edinmek için Firebase Projelerini Anlayın sayfasını ziyaret edin.
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öndüğünüzde, 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 seçeneğine 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 özel değildir.
Açık Unity projenizde Varlıklar > Paketi İçe Aktar > Özel Paket'e gidin.
Sıkıştırılmış SDK'dan uygulamanızda kullanmak istediğiniz desteklenen Firebase ürünlerini seçin.
Firebase Cloud Messaging ile optimum deneyim için projenizde Google Analytics'i etkinleştirmenizi öneririz. Ayrıca Analytics kurulumunun bir parçası olarak Analytics için Firebase paketini uygulamanıza eklemeniz gerekir.
Analiz etkin
- Google Analytics için Firebase paketini ekleyin:
FirebaseAnalytics.unitypackage
- Firebase Cloud Messaging paketini ekleyin:
FirebaseMessaging.unitypackage
Analiz etkinleştirilmedi
Firebase Cloud Messaging paketini ekleyin:
FirebaseMessaging.unitypackage
- Google Analytics için Firebase paketini ekleyin:
Unity Paketini İçe Aktar penceresinde İçe Aktar öğesine tıklayın.
Firebase konsoluna geri döndüğünüzde, kurulum iş akışında İleri'yi tıklayın.
5. Adım: Google Play hizmetlerinin sürüm gereksinimlerini onaylayın
Android için Firebase Unity SDK'sı, SDK'nın kullanılabilmesi için güncel olması gereken Google Play hizmetlerini gerektirir.
Uygulamanızın başına aşağıdaki kodu ekleyin. SDK'daki diğer 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.
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(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 anında bildirimleri etkinleştirin
1. Adım: Kullanıcı bildirimleri çerçevesini ekleyin
Xcode'da projeye tıklayın, ardından Düzenleyici alanından Genel sekmesini seçin.
Bağlantılı Çerçeveler ve Kitaplıklar seçeneğine ilerleyin ve ardından bir çerçeve eklemek için + düğmesini tıklayın.
Görüntülenen pencerede UserNotifications.framework öğesine gidin, söz konusu girişi tıklayın ve ardından Ekle öğesini tıklayın.
2. Adım: Anlık bildirimleri etkinleştirin
Xcode'da projeye tıklayın, ardından Düzenleyici alanından Yetenekler sekmesini seçin.
Anlık Bildirimleri Açık olarak değiştirin.
Arka Plan Modları seçeneğine ilerleyin ve ardından Açık olarak değiştirin.
Arka Plan Modları altında Uzak bildirimler onay kutusunu seçin.
Firebase Cloud Messaging'i başlatın
Firebase Bulut Mesaj kitaplığı, TokenReceived
veya MessageReceived
olayları için işleyiciler eklenirken başlatılacaktır.
Başlatma sonrasında istemci uygulaması örneği için bir kayıt belirteci istenir. Uygulama, daha sonra kullanılmak üzere önbelleğe alınması gereken OnTokenReceived
olayıyla belirteci alacaktır. Mesajlar için bu belirli cihazı hedeflemek istiyorsanız bu jetona ihtiyacınız olacak.
Ayrıca gelen mesajları alabilmek istiyorsanız OnMessageReceived
etkinliğine kayıt olmanız gerekecektir.
Tüm kurulum şuna benzer:
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
yerini alan ö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 herhangi bir ek işlem yapmanıza gerek kalmaz. Varsayılan giriş noktası Activity'yi kullanmayan veya kendi Assets/Plugins/AndroidManifest.xml
sağlayan uygulamaların ekstra yapılandırmaya ihtiyacı olacaktır.
Android'deki Firebase Cloud Messaging Unity Eklentisi iki ek dosyayla birlikte gelir:
-
Assets/Plugins/Android/libmessaging_unity_player_activity.jar
standartUnityPlayerActivity
yerini alanMessagingUnityPlayerActivity
adlı bir etkinlik içerir. -
Assets/Plugins/Android/AndroidManifest.xml
uygulamayaMessagingUnityPlayerActivity
uygulamaya giriş noktası olarak kullanma talimatını verir.
Bu dosyalar, varsayılan UnityPlayerActivity
onStop
, onRestart
aktivite yaşam döngüsü geçişlerini işlememesi veya Firebase Cloud Messaging'in gelen mesajları doğru şekilde işlemesi için gerekli olan onNewIntent
uygulamaması nedeniyle sağlanmıştır.
Özel bir giriş noktası Etkinliğini yapılandırma
Uygulamanız varsayılan UnityPlayerActivity
kullanmıyorsa, sağlanan AndroidManifest.xml
dosyasını kaldırmanız ve özel etkinliğinizin Android Etkinlik Yaşam Döngüsünün tüm geçişlerini doğru şekilde işlediğinden emin olmanız gerekir (bunun nasıl yapılacağına ilişkin bir örnek aşağıda gösterilmiştir). Özel etkinliğiniz UnityPlayerActivity
genişletiyorsa bunun yerine gerekli tüm yöntemleri uygulayan com.google.firebase.MessagingUnityPlayerActivity
genişletebilirsiniz.
Özel bir Activity kullanıyorsanız ve com.google.firebase.MessagingUnityPlayerActivity
öğesini genişletmiyorsanız, aşağıdaki parçacıkları Activity'nize eklemelisiniz.
/** * 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'nın yeni sürümleri (7.1.0 ve sonrası), AndroidManifest.xml
dosyasında ek değişiklikler gerektiren JobIntentService
kullanır.
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" > </service>
Android'de mesaj teslimi hakkında not
Uygulama hiç çalışmadığında ve kullanıcı bir bildirime dokunduğunda, mesaj varsayılan olarak FCM'nin yerleşik geri aramaları aracılığıyla yönlendirilmez. Bu durumda mesaj verileri, uygulamayı başlatmak için kullanılan bir Intent
aracılığıyla alınır.
Uygulama arka plandayken alınan mesajların bildirim alanının içeriği, sistem tepsisi bildirimini doldurmak için kullanılır, ancak bu bildirim içeriği FCM'ye iletilmez. Yani FirebaseMessage.Notification
null olacaktır.
Özetle:
Uygulama durumu | Bildiri | Veri | İkisi birden |
---|---|---|---|
Ö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 Veri: amacın ekstralarında. |
Otomatik başlatmayı önle
FCM, cihaz hedefleme için bir kayıt jetonu oluşturur. Bir jeton oluşturulduğunda kitaplık, tanımlayıcı ve yapılandırma verilerini Firebase'e yükler. Belirteci kullanmadan önce açık bir katılım almak istiyorsanız, yapılandırma sırasında FCM'yi (ve Android'de Analytics'i) devre dışı bırakarak oluşturmayı engelleyebilirsiniz. Bunu yapmak için Apple'da Info.plist
( GoogleService-Info.plist
Info.plist'inize değil) veya Android'de AndroidManifest.xml
bir 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>
Süratli
FirebaseMessagingAutoInitEnabled = NO
FCM'yi yeniden etkinleştirmek için çalışma zamanı çağrısı yapabilirsiniz:
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
Bu değer, ayarlandıktan sonra uygulama yeniden başlatıldığında devam eder.
Android'de Derin Bağlantılara Sahip Mesajları Yönetme
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 amaç filtresi eklemeniz gerekir. Niyet filtresi alan adınızın derin bağlantılarını yakalamalıdır. Mesajlarınız derin bağlantı içermiyorsa bu yapılandırmaya gerek yoktur. AndroidManifest.xml'de:
<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 bir joker karakter belirlemek de mümkündür. Ö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 bilgisayara bağlantı içeren bir bildirime dokunduğunda uygulamanız bağlantıyı işlemek için bu amaç filtresiyle etkinliği başlatır.
Sonraki adımlar
İstemci uygulamasını kurduktan sonra Firebase ile aşağı akış ve konu mesajları göndermeye hazırsınız. Daha fazla bilgi edinmek için bu işlevselliği gösteren hızlı başlangıç örneğine bakın.
Uygulamanıza daha gelişmiş başka davranışlar eklemek için uygulama sunucusundan mesaj gönderme kılavuzlarına bakın:
Bu özelliklerden yararlanmak için bir sunucu uygulamasına ihtiyacınız olacağını unutmayın.