Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Configurer une application cliente Firebase Cloud Messaging avec C ++

Pour écrire votre application cliente Firebase Cloud Messaging multiplateforme avec C ++, utilisez l'API Firebase Cloud Messaging . Le SDK C ++ fonctionne pour Android et iOS, avec une configuration supplémentaire requise pour chaque plate-forme.

Configurer Firebase et le SDK FCM

Android

  1. Si vous ne l'avez pas déjà fait, ajoutez Firebase à votre projet C ++ .

    • Dans les instructions de configuration liées, examinez les exigences de l'appareil et de l'application pour utiliser le SDK Firebase C ++, y compris la recommandation d'utiliser CMake pour créer votre application.

    • Dans votre fichier build.gradle niveau du build.gradle , assurez-vous d'inclure le référentiel Maven de Google dans vos sections buildscript et allprojects .

  2. Créez un objet d'application Firebase, en transmettant l'environnement JNI et l'activité:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. Définissez une classe qui implémente l' firebase::messaging::Listener .

  4. Initialisez FCM, en passant dans l'application et un auditeur construit:

    ::firebase::messaging::Initialize(app, listener);

  5. Les applications qui reposent sur le SDK des services Google Play doivent rechercher sur l'appareil un fichier APK de services Google Play compatible avant d'accéder aux fonctionnalités. Pour en savoir plus, consultez Vérifier les services APK de Google Play .

iOS

  1. Vous avez besoin d'un certificat APNs valide. Si vous n'en avez pas déjà un, reportez-vous à Provision APNs SSL Certificates .
  2. Si vous ne l'avez pas déjà fait, ajoutez Firebase à votre projet C ++ . Ensuite, pour configurer votre projet pour FCM:
    1. Dans le Podfile de votre projet, ajoutez la dépendance FCM:
      pod 'Firebase/Messaging'
    2. Faites glisser les firebase.framework et firebase_messaging.framework dans votre projet Xcode à partir du SDK Firebase C ++ .
  3. Configurez votre projet Xcode pour activer les notifications push:

    1. Sélectionnez le projet dans la zone Navigateur .
    2. Sélectionnez la cible du projet dans la zone Editeur .
    3. Sélectionnez l'onglet Général dans la zone Editeur .

      1. Faites défiler jusqu'à Frameworks et bibliothèques liés , puis cliquez sur le bouton + pour ajouter des frameworks.
      2. Dans la fenêtre qui apparaît, faites défiler jusqu'à UserNotifications.framework , cliquez sur cette entrée, puis cliquez sur Ajouter .

        Ce framework n'apparaît que dans Xcode v8 et versions ultérieures et est requis par cette bibliothèque.

    4. Sélectionnez l'onglet Capacités dans la zone Editeur .

      1. Mettez les notifications Push sur On.
      2. Faites défiler jusqu'à Modes de fond, puis activez-la.
      3. Sélectionnez Notifications à distance sous Modes d'arrière-plan .
  4. Créez un objet d'application Firebase:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. Définissez une classe qui implémente l' firebase::messaging::Listener .

  6. Initialisez Firebase Cloud Messaging, en transmettant l'application et un écouteur construit:

    ::firebase::messaging::Initialize(app, listener);

Accéder au jeton d'enregistrement de l'appareil

Lors de l'initialisation de la bibliothèque Firebase Cloud Messaging, un jeton d'enregistrement est demandé pour l'instance d'application cliente. L'application recevra le jeton avec le rappel OnTokenReceived , qui doit être défini dans la classe qui implémente firebase::messaging::Listener .

Si vous souhaitez cibler cet appareil spécifique, vous aurez besoin d'accéder à ce jeton.

Remarque sur la livraison des messages sur Android

Lorsque l'application ne fonctionne 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 des messages sont reçues via une Intent utilisée pour démarrer l'application. Pour que FCM transfère ces messages entrants au rappel de la bibliothèque C ++, vous devez remplacer la méthode onNewIntent dans votre activité et transmettre l' Intent au MessageForwardingService .

import com.google.firebase.messaging.MessageForwardingService;

class MyActivity extends Activity {
  private static final String TAG = "MyActvity";

  @Override
  protected void onNewIntent(Intent intent) {
    Log.d(TAG, "A message was sent to this app while it was in the background.");
    Intent message = new Intent(this, MessageForwardingService.class);
    message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
    message.putExtras(intent);
    message.setData(intent.getData());
    startService(message);
  }
}

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é à FCM. Autrement dit, Message::notification sera une valeur nulle.

En résumé:

État de l'application Notification Données Tous les deux
Premier plan OnMessageReceived OnMessageReceived OnMessageReceived
Fond Barre d'état système OnMessageReceived Notification: barre d'état système
Données: en extras de l'intention.

Gestion des messages personnalisés sur Android

Par défaut, les notifications envoyées à l'application sont transmises à ::firebase::messaging::Listener::OnMessageReceived , mais dans certains cas, vous souhaiterez peut-être remplacer le comportement par défaut. Pour ce faire sur Android, vous devrez écrire des classes personnalisées qui étendent com.google.firebase.messaging.cpp.ListenerService et mettre à jour AndroidManifest.xml votre projet.

Remplacez les méthodes ListenerService .

ListenerService est la classe Java qui intercepte les messages entrants envoyés à l'application et les achemine vers la bibliothèque C ++. Lorsque l'application est au premier plan (ou lorsque l'application est l'arrière-plan et qu'elle reçoit une charge utile de données uniquement), les messages passeront par l'un des rappels fournis sur cette classe. Pour ajouter un comportement personnalisé à la gestion des messages, vous devrez étendre le ListenerService par défaut de FCM:

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

En substituant la méthode ListenerService.onMessageReceived , vous pouvez effectuer des actions basées sur l'objet RemoteMessage reçu et obtenir les données du message:

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService également quelques autres méthodes qui sont utilisées moins fréquemment. Ceux-ci peuvent également être remplacés, pour plus d'informations, consultez la référence FirebaseMessagingService .

@Override
public void onDeletedMessages() {
  Log.d(TAG, "Messages have been deleted on the server.");
  // Do additional logic...
  super.onDeletedMessages();
}

@Override
public void onMessageSent(String messageId) {
  Log.d(TAG, "An outgoing message has been sent.");
  // Do additional logic...
  super.onMessageSent(messageId);
}

@Override
public void onSendError(String messageId, Exception exception) {
  Log.d(TAG, "An outgoing message encountered an error.");
  // Do additional logic...
  super.onSendError(messageId, exception);
}

Mettre à jour AndroidManifest.xml

Une fois vos classes personnalisées écrites, elles doivent être incluses dans le AndroidManifest.xml pour prendre effet. Assurez-vous que le manifeste inclut les outils de fusion en déclarant l'attribut approprié dans la <manifest> , comme suit:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.firebase.messaging.cpp.samples"
    xmlns:tools="http://schemas.android.com/tools">

Dans l'archive firebase_messaging_cpp.aar il y a un fichier AndroidManifest.xml qui déclare le ListenerService par défaut de FCM. Ce manifeste est normalement fusionné avec le manifeste spécifique au projet, qui permet à ListenerService de s'exécuter. Ce ListenerService doit être remplacé par le service d'écoute cusom. Cela est accompli en supprimant le ListenerService par défaut et en ajoutant le service personnalisé, ce qui peut être fait avec les lignes suivantes AndroidManifest.xml fichier AndroidManifest.xml vos projets:

<service android:name="com.google.firebase.messaging.cpp.ListenerService"
         tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService"
         android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

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 un opt-in 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::SetTokenRegistrationOnInitEnabled(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 capturer 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 tapent 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 des sujets avec Firebase. Pour en savoir plus, consultez cette fonctionnalité illustrée dans l' exemple de démarrage rapide que vous pouvez télécharger, exécuter et consulter.

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

Gardez à l'esprit que vous aurez besoin d'une implémentation de serveur pour utiliser ces fonctionnalités.