Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Configurer une application cliente Firebase Cloud Messaging avec Unity

Pour écrire votre multiplateformes Firebase cloud messagerie application client avec Unity, utilisez le Firebase Cloud Messaging API. Le SDK Unity fonctionne à la fois pour Android et iOS, avec une configuration supplémentaire requise pour chaque plate-forme.

Avant que tu commences

Conditions préalables

  • Installez Unity 2017.4 ou une version ultérieure. Les versions antérieures peuvent également être compatibles mais ne seront pas activement prises en charge.

  • (iOS uniquement) Installer les éléments suivants:

    • Xcode 9.4.1 ou supérieur
    • CocoaPods 1.10.0 ou supérieur
  • Assurez-vous que votre projet Unity répond aux exigences suivantes :

    • Pour iOS - iOS cible 10 ou plus
    • Pour Android - les cibles de niveau API 16 (Jelly Bean) ou plus

  • Configurez un appareil ou utilisez un émulateur pour exécuter votre projet Unity.

    • Pour iOS - Mettre en place un appareil iOS physique pour exécuter votre application, et effectuez les opérations suivantes :

      • Obtenir un Apple Push Notification clé d' authentification pour votre compte Apple Developer .
      • Activer les notifications Push dans XCode sous App> Capacités.
    • Pour Android - émulateurs doit utiliser une image de l' émulateur avec Google Play.

Si vous ne possédez pas déjà un projet Unity et que vous voulez juste essayer un produit Firebase, vous pouvez télécharger un de nos échantillons de démarrage rapide .

Étape 1 : Créez un projet Firebase

Avant de pouvoir ajouter Firebase à votre projet Unity, vous devez créer un projet Firebase pour vous connecter à votre projet Unity. Visitez Comprendre Firebase projets pour en savoir plus sur les projets Firebase.

Étape 2 : Enregistrez votre application avec Firebase

Vous pouvez enregistrer une ou plusieurs applications ou jeux pour vous connecter à votre projet Firebase.

  1. Allez à la console Firebase .

  2. Au centre de la page d'aperçu du projet, cliquez sur l'icône de l' unité ( ) pour lancer le flux de travail de configuration.

    Si vous avez déjà ajouté une application à votre projet Firebase, cliquez sur Ajouter application pour afficher les options de plate - forme.

  3. Sélectionnez la cible de build de votre projet Unity que vous souhaitez enregistrer, ou vous pouvez même choisir d'enregistrer les deux cibles maintenant en même temps.

  4. Saisissez le ou les identifiants spécifiques à la plate-forme de votre projet Unity.

    • Pour iOS - Entrez votre ID iOS projet Unity dans l' ID de paquet iOS champ.

    • Pour Android - Entrez Android ID de votre projet Unity dans le nom du package Android champ.
      Les termes nom du package et l' ID d'application sont souvent utilisés de façon interchangeable.

  5. (Facultatif) Entrez votre projet surnom spécifique à la plateforme Unity (s).
    Ces surnoms sont des identifiants de commodité internes et ne sont visibles que par vous dans la console Firebase.

  6. Cliquez sur l' application de vous inscrire.

Étape 3 : ajouter des fichiers de configuration Firebase

  1. Obtenez vos fichiers de configuration Firebase spécifiques à la plate-forme dans le workflow de configuration de la console Firebase.

    • Pour iOS - Cliquez sur Télécharger GoogleService-Info.plist.

    • Pour Android - Cliquez sur Télécharger google-services.json.

  2. Ouvrez la fenêtre Projet de votre projet Unity, puis déplacez votre fichier de configuration (s) dans l' Assets dossier.

  3. Retour dans la console Firebase, dans le flux de travail de configuration, cliquez sur Suivant.

Étape 4 : ajouter les SDK Firebase Unity

  1. Dans la console Firebase, cliquez sur Télécharger Firebase SDK Unity, puis décompressez le SDK endroit pratique.

    • Vous pouvez télécharger le SDK Unity Firebase à tout moment.

    • Le SDK Firebase Unity n'est pas spécifique à la plate-forme.

  2. Dans votre projet open Unity, accédez à l' actif> Importer le package> Package personnalisé.

  3. À partir du SDK décompressé, sélectionnez les produits Firebase pris en charge que vous souhaitez utiliser dans votre application.

    Pour une expérience optimale avec Firebase - Cloud Messaging, nous vous recommandons de permettre à Google Analytics dans votre projet. De plus, dans le cadre de la configuration d'Analytics, vous devez ajouter le package Firebase pour Analytics à votre application.

    Analytique activée

    • Ajoutez le package Firebase pour Google Analytics: FirebaseAnalytics.unitypackage
    • Ajoutez le package pour Firebase - Cloud Messaging: FirebaseMessaging.unitypackage

    Analytics non activé

    Ajoutez le package pour Firebase - Cloud Messaging: FirebaseMessaging.unitypackage

  4. Dans la fenêtre d' importation Package unité, cliquez sur Importer.

  5. Retour dans la console Firebase, dans le flux de travail de configuration, cliquez sur Suivant.

Étape 5 : Confirmez la configuration requise pour la version des services Google Play

Le SDK pour Android Unity Firebase nécessite des services Google Play , qui doit être mis à jour avant le SDK peut être utilisé.

Ajoutez le code suivant au démarrage de votre application. Vous pouvez rechercher et éventuellement mettre à jour les services Google Play vers la version requise par le SDK Firebase Unity avant d'appeler toute autre méthode du SDK.

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.
  }
});

Votre projet Unity est enregistré et configuré pour utiliser Firebase.

Étape 7 : Ajouter un cadre de notifications utilisateur

  1. Cliquez sur le projet dans Xcode, puis sélectionnez l'onglet Général de la zone éditeur.

  2. Faites défiler vers le bas pour les cadres et les bibliothèques associées, puis cliquez sur le bouton + pour ajouter un cadre.

  3. Dans la fenêtre qui apparaît, faites défiler jusqu'à UserNotifications.framework, cliquez sur cette entrée, puis cliquez sur Ajouter.

Étape 8 : Activer les notifications push

  1. Cliquez sur le projet dans Xcode, puis sélectionnez l'onglet Fonctionnalités de la zone éditeur.

  2. Mettez les notifications Push sur On.

  3. Faites défiler jusqu'à Modes de fond, puis activez-la.

  4. Cochez la case de notification à distance sous Modes d'arrière - plan.

Initialiser Firebase Cloud Messaging

La bibliothèque message Firebase Nuage sera initialisé lors de l' ajout de gestionnaires soit pour les TokenReceived ou MessageReceived événements.

Lors de l'initialisation, un jeton d'enregistrement est demandé pour l'instance d'application cliente. L'application recevra le jeton avec le OnTokenReceived événement, qui devrait être mis en mémoire cache pour une utilisation ultérieure. Vous aurez besoin de ce jeton si vous souhaitez cibler cet appareil spécifique pour les messages.

De plus, vous devrez vous inscrire pour le OnMessageReceived événement si vous voulez être en mesure de recevoir des messages entrants.

L'ensemble de la configuration ressemble à ceci :

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);
}

Configurer une activité de point d'entrée Android

Sur Android, Firebase - Cloud Messaging est livré avec une activité de point d'entrée personnalisé qui remplace la valeur par défaut UnityPlayerActivity . Si vous n'utilisez pas de point d'entrée personnalisé, ce remplacement s'effectue automatiquement et vous ne devriez pas avoir à effectuer d'action supplémentaire. Apps qui n'utilisent pas le point d' entrée par défaut activité ou que l' offre de leurs propres Assets/Plugins/AndroidManifest.xml auront besoin de configuration supplémentaire.

Le plug-in Firebase Cloud Messaging Unity sur Android est fourni avec deux fichiers supplémentaires :

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar contient une activité appelée MessagingUnityPlayerActivity qui remplace la norme UnityPlayerActivity .
  • Assets/Plugins/Android/AndroidManifest.xml indique à l'application d'utiliser MessagingUnityPlayerActivity comme point d'entrée à l'application.

Ces fichiers sont fournis parce que la valeur par défaut UnityPlayerActivity ne gère pas onStop , onRestart transitions du cycle de vie de l' activité ou la mise en œuvre du onNewIntent qui est nécessaire pour Firebase - Cloud Messaging pour gérer correctement les messages entrants.

Configuration d'un point d'entrée personnalisé

Si votre application ne pas utiliser la valeur par défaut UnityPlayerActivity vous devrez retirer le fourni AndroidManifest.xml et vous assurer que votre activité personnalisée gère correctement toutes les transitions de l' activité Android du cycle de vie (un exemple de la façon de le faire est ci - dessous). Si votre activité personnalisée étend UnityPlayerActivity vous pouvez étendre la place com.google.firebase.MessagingUnityPlayerActivity qui met en œuvre toutes les méthodes nécessaires.

Si vous utilisez une activité personnalisée et ne pas étendre com.google.firebase.MessagingUnityPlayerActivity , vous devez inclure les extraits suivants dans votre activité.

/**
 * 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);
}

Les nouvelles versions de Firebase C ++ SDK (7.1.0 et suivantes) l' utilisation JobIntentService qui nécessite des modifications supplémentaires dans AndroidManifest.xml fichier.

<service android:name="com.google.firebase.messaging.MessageForwardingService"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" >
</service>

Remarque sur la livraison des messages sur Android

Lorsque l'application ne s'exécute pas du tout et qu'un utilisateur appuie sur une notification, le message n'est pas, par défaut, acheminé via les rappels intégrés de FCM. Dans ce cas, les charges utiles de messages sont reçus par une Intent utilisée pour démarrer l'application.

Les messages reçus alors que l'application est en arrière-plan ont le contenu de leur champ de notification utilisé pour remplir la notification de la barre d'état système, mais ce contenu de notification ne sera pas communiqué au FCM. C'est, FirebaseMessage.Notification sera une valeur nulle.

En résumé:

État de l'application Notification Données Les deux
Premier plan Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Fond Barre d'état système Firebase.Messaging.FirebaseMessaging.MessageReceived Notification : barre d'état système
Données : en extras de l'intention.

Empêcher l'initialisation automatique

FCM génère un jeton d'enregistrement pour le ciblage des appareils. Lorsqu'un jeton est généré, la bibliothèque télécharge l'identifiant et les données de configuration sur Firebase. Si vous souhaitez obtenir une acceptation explicite avant d'utiliser le jeton, vous pouvez empêcher la génération au moment de la configuration en désactivant FCM (et sur Android, Analytics). Pour ce faire, ajoutez une valeur de métadonnées à votre Info.plist (pas votre GoogleService-Info.plist ) sur iOS ou votre AndroidManifest.xml sur Android:

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>

iOS

FirebaseMessagingAutoInitEnabled = NO

Pour réactiver FCM, vous pouvez effectuer un appel d'exécution :

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

Cette valeur persiste lors des redémarrages de l'application une fois définie.

FCM permet d'envoyer des messages contenant un lien profond vers votre application. Pour recevoir des messages contenant un lien profond, vous devez ajouter un nouveau filtre d'intention à l'activité qui gère les liens profonds pour votre application. Le filtre d'intention doit détecter les liens profonds de votre domaine. Si vos messages ne contiennent pas de lien profond, cette configuration n'est pas nécessaire. Dans AndroidManifest.xml :

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

Il est également possible de spécifier un caractère générique pour rendre le filtre d'intention plus flexible. Par exemple:

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

Lorsque les utilisateurs appuient sur une notification contenant un lien vers le schéma et l'hôte que vous spécifiez, votre application démarre l'activité avec ce filtre d'intention pour gérer le lien.

Prochaines étapes

Après avoir configuré l'application cliente, vous êtes prêt à envoyer des messages en aval et par sujet avec Firebase. Pour en savoir plus, voir l' exemple de démarrage rapide qui illustre cette fonctionnalité.

Pour ajouter d'autres comportements plus avancés à votre application, consultez les guides d'envoi de messages à partir d'un serveur d'application :

Gardez à l' esprit que vous aurez besoin d' une mise en œuvre du serveur pour faire usage de ces caractéristiques.