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. Unity SDK hem Android hem de Apple'da çalışır ancak bazı ek kurulumlar gerekir her platform için geçerli.

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 aktif olarak desteklenmeyecektir. Unity 2019.1 desteği dikkate alınır desteği sonlandırılmıştır ve sonraki önemli aşamalardan sonra kullanabilirsiniz.

  • (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'u hedefler (KitKat) veya sonraki sürümler
  • Unity projenizi çalıştırmak için cihaz kurun veya emülatör kullanın.

    • iOS veya tvOS için: Aşağıdakilerin çalıştırılacağı fiziksel bir cihaz kurun: uygulamasına gidip şu görevleri tamamlayın:

      • için bir Apple Anında Bildirim Kimlik Doğrulama Anahtarı edinin Apple Geliştirici hesabı
      • Uygulama > altındaki XCode'da Push Bildirimleri'ni etkinleştirin Özellikler.
    • Android içinEmülatörler, emülatör resmi kullanabilirsiniz.

Henüz Unity projeniz yoksa ve bir Firebase'i denemek istiyorsanız hızlı başlangıç örneklerimizden birini indirebilirsiniz.

1. Adım: Firebase projesi oluşturun

Firebase'i Unity projenize eklemeden önce bir Firebase oluşturmanız gerekir Unity projenize bağlanacak. Firebase'i Anlama sayfasını ziyaret edin Projeler'e göz atın.

2. adım: Uygulamanızı Firebase'e kaydedin

Firebase'inize bağlanmak için bir veya daha fazla uygulama ya da oyun kaydedebilirsiniz belirler.

  1. Firebase konsoluna gidin.

  2. Projeye genel bakış sayfasının ortasındaki Unity simgesini tıklayın () kurulum iş akışını başlatın.

    Firebase projenize daha önce uygulama eklediyseniz Uygulama ekle'yi tıklayın tıklayın.

  3. Kaydetmek istediğiniz Unity projenizin derleme hedefini seçin, ya da her iki hedefi aynı anda kaydetmeyi seçebilirsiniz.

  4. Unity projenizin platforma özgü kimliklerini girin.

    • iOS için: Unity projenizin iOS kimliğini iOS paketi Kimlik girin.

    • Android için: Unity projenizin Android kimliğini Android paketi name alanında oturum açın.
      . Paket adı ve uygulama kimliği terimleri genellikle kullanabilirsiniz.

    ziyaret edin.
  5. (İsteğe bağlı) Unity projenizin platforma özgü takma adlarını girin.
    . Bu takma adlar dahili, kolaylık tanımlayıcılarıdır ve yalnızca görebilirsiniz.

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

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

  1. Platforma özel Firebase yapılandırma dosyalarınızı Firebase konsolu kurulumu iş akışı.

    • 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çıp yapılandırmanızı taşıyın dosyayı Assets klasörüne kopyalayı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'sını İndir'i tıklayın, ardından sıkıştırılmış dosyayı açın SDK'yı uygun bir yere koyabilirsiniz.

    • Firebase Unity SDK'yı istediğiniz zaman tekrar indirebilirsiniz.

    • Firebase Unity SDK platforma özgü değildir.

  2. Açık Unity projenizde şuraya gidin: Öğeler > Paketi İçe Aktar > Özel Paket.

  3. Sıkıştırılmamış SDK'dan desteklenen Firebase'i seçin. ürün testlerini en iyi şekilde yararlanabilirsiniz.

    Firebase Cloud Messaging ile optimum bir deneyim için şunları yapmanızı öneririz: Google Analytics'i etkinleştirme bilmek kadar harika bir his yok. Ayrıca, Analytics kurulumunun bir parçası olarak Analytics için Firebase paketini uygulamanıza ekleyin.

    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 kullanılabilmesi için uygulamanın güncel tutulması gerekir.

Aşağıdaki using ifadesini ve başlatma kodunu kabul edersiniz. Google Play hizmetlerini şurada kontrol edebilir ve isterseniz güncelleyebilirsiniz: başka bir kod çağırmadan önce Firebase Unity SDK'sının gerektirdiği sürümü yöntemlerine göz atacağız.

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 desteği için APNs kimlik doğrulama anahtarınızı yükleyin

APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin. Halihazırda bir APNs kimlik doğrulama anahtarınız yoksa Apple Geliştirici Üye Merkezi.

  1. Firebase konsolunda projenizin içinde, dişli simgesi, seçin Proje Ayarları'nı tıklayın ve ardından Cloud Messaging sekmesi.

  2. iOS uygulaması yapılandırması bölümündeki APN kimlik doğrulama anahtarı'nda, Yükle'yi tıklayın. düğmesini tıklayın.

  3. Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve . Anahtarın anahtar kimliğini ekleyin ( Apple Developer Member Center) oturum açın Yükle.

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 menüden General (Genel) sekmesini seçin. Düzenleyici alanı.

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

  3. Görüntülenen pencerede UserBildirimler.framework'e gidin, ilgili girişi seçip Ekle'yi tıklayın.

2. Adım: Push bildirimlerini etkinleştirin

  1. Xcode'da projeyi tıklayın, ardından menüden Capabilities (Özellikler) sekmesini seçin. Düzenleyici alanı.

  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

İşleyici eklenirken Firebase Cloud Mesaj kitaplığı başlatılır TokenReceived veya MessageReceived etkinlikleri için.

Başlatıldıktan sonra istemci uygulaması için bir kayıt jetonu istenir kullanır. Uygulama, OnTokenReceived etkinliği içeren jetonu alır. Bu veriler daha sonra kullanılmak üzere önbelleğe alınır. Buna ihtiyacınız olacak jetonunuzu kullanın.

Ayrıca, aşağıdaki durumlarda OnMessageReceived etkinliğine kaydolmanız gerekir: gelen mesajları alabilmeniz 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 özel bir giriş noktasıyla birlikte gelir. varsayılan UnityPlayerActivity öğesinin yerini alan etkinlik. Şunu kullanmıyorsanız: bu değişimin otomatik olarak gerçekleşeceği özel bir giriş noktasıdır. herhangi bir ek işlem yapması gerekmiyor. Varsayılan giriş noktasını kullanmayan uygulamalar Kendi Assets/Plugins/AndroidManifest.xml öğesini sağlayan veya etkinlikler ekstra yapılandırma.

Android'de Firebase Cloud Messaging Unity eklentisi iki paketle birlikte gelir ek dosyalar:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar, bir MessagingUnityPlayerActivity adlı standardın yerini alan etkinlik UnityPlayerActivity.
  • Assets/Plugins/Android/AndroidManifest.xml, uygulamaya MessagingUnityPlayerActivity, uygulamanın giriş noktası olarak kullanılacak.

Bu dosyalar, varsayılan UnityPlayerActivity özelliği onStop, onRestart etkinlik yaşam döngüsü geçişlerini ele alabilir veya Firebase Cloud Messaging'in doğru şekilde çalışması için gerekli olan onNewIntent gelen mesajları işleme alabilir.

Özel giriş noktası etkinliğini yapılandırma

Uygulamanız varsayılan UnityPlayerActivity ayarını kullanmıyorsa sağlanan AndroidManifest.xml öğesini kaldırın ve özel etkinliğinizin tüm geçişlerini düzgün şekilde Android Etkinlik Yaşam Döngüsü (Bunun nasıl yapılacağına ilişkin bir örnek aşağıda verilmiştir). Özel etkinlik UnityPlayerActivity uzatılır, bunun yerine uzatabilirsiniz Şunları uygulayan com.google.firebase.MessagingUnityPlayerActivity: emin olmanız gerekir.

Özel bir Etkinlik kullanıyorsanız ve com.google.firebase.MessagingUnityPlayerActivity, aşağıdaki snippet'leri etkinleştirmeniz 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 sonrası) için JobIntentService kullanımı gerekir. AndroidManifest.xml dosyasında ek değişiklikler var.

<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 kullanıcı bir bildirime dokunduğunda mesaj, varsayılan olarak FCM'nin yerleşik iletim sistemi üzerinden daha fazla bilgi edindiniz. Bu durumda, mesaj yükleri bir Intent üzerinden alınır ve uygulamayı başlatmak için kullanılır.

Uygulama arka plandayken alınan mesajlarda şu içerikler bulunur: kullanıcının bildirim alanı, sistem tepsisi bildirimini doldurmak için kullanılır, ancak bu bildirim içeriğinin FCM'ye iletilmeyeceğini lütfen unutmayın. Yani, FirebaseMessage.Notification, null olacaktır.

Ö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
Veri: Amacın ekstralarında.

Otomatik başlatmayı engelle

FCM, cihaz hedefleme için bir kayıt jetonu oluşturur. Bir jeton oluşturulduğunda kitaplık, Firebase'e aktarmanızı sağlar. Müstehcen bir URL etkinleştirmeyi unutmayın. Jetonu kullanmadan önce FCM'nin (ve Android'de, Analytics'te) devre dışı bırakılması. Bunu yapmak için Apple'daki Info.plist (GoogleService-Info.plist değil) veya Android'de AndroidManifest.xml:

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 yeni bir intent filtresi eklemeniz gerekir Ayrıca, uygulamanızın derin bağlantılarını işleyen etkinliğe dair Amaç filtresi Alanınızın derin bağlantılarını yakalayabilir. Mesajlarınız 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 etkili hale getirmek için joker karakter belirtmek de mümkündür. daha esnek hale getirebilirsiniz. Ö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 şemanın bağlantısını içeren ve sizi barındıran bir bildirime dokunduğunda belirtirseniz, uygulamanız bağlantısını tıklayın.

Sonraki adımlar

İstemci uygulamasını kurduktan sonra aşağı akış ve Firebase ile mesajları. Daha fazla bilgi edinmek için hızlı başlangıç örneği Bu işlevsellik gösteriliyor.

Uygulamanıza başka, daha gelişmiş davranışlar eklemek için uygulama sunucusundan gelen mesajlar:

Proje hedeflerinizin yararlanmak için sunucu uygulamasını özellikleri.