Unity ile Firebase Cloud Messaging istemci uygulaması kurma

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.

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.

  1. Firebase konsoluna gidin.

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

  3. Unity projenizin hangi derleme hedefini kaydetmek istediğinizi seçin. Dilerseniz iki hedefi aynı anda kaydetmeyi de seçebilirsiniz.

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

  5. (İ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.

  6. Uygulamayı kaydet'i tıklayın.

3. Adım: Firebase yapılandırma dosyalarını ekleyin

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

  2. Unity projenizin Proje penceresini açın, ardından yapılandırma dosyalarınızı Assets klasörüne taşıyın.

  3. Tekrar Firebase konsolunda kurulum iş akışında İleri'yi tıklayın.

4. adım: Firebase Unity SDK'larını ekleyin

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

  2. Açık Unity projenizde Assets > Paketi İçe Aktar > Özel Paket'e gidin.

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

  4. Unity Paketini İçe Aktar penceresinde İçe Aktar'ı tıklayın.

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

  1. Xcode'da projeyi tıklayın, ardından Editor alanından General (Genel) sekmesini seçin.

  2. Bağlı Çerçeveler ve Kitaplıklar'a gidin ve çerçeve eklemek için + düğmesini tıklayın.

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

  1. Xcode'da projeyi tıklayın, ardından Editor alanından Capabilities'i (Özellikler) seçin.

  2. Push Bildirimleri'ni Açık olarak ayarlayın.

  3. Arka Plan Modları'na gidin ve ardından ayarı Açık hale getirin.

  4. 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çen MessagingUnityPlayerActivity adlı bir etkinlik içeriyor.
  • Assets/Plugins/Android/AndroidManifest.xml, uygulamaya giriş noktası olarak MessagingUnityPlayerActivity 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.

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.