Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Configura un'app client Firebase Cloud Messaging con C ++

Per scrivere la tua app client Firebase Cloud Messaging multipiattaforma con C ++, utilizza l'API Firebase Cloud Messaging . L'SDK C ++ funziona sia per Android che per iOS, con alcune configurazioni aggiuntive richieste per ciascuna piattaforma.

Configura Firebase e FCM SDK

Android

  1. Se non l'hai già fatto, aggiungi Firebase al tuo progetto C ++ .

    • Nelle istruzioni di configurazione collegate, esamina i requisiti del dispositivo e dell'app per l'utilizzo di Firebase C ++ SDK, inclusa la raccomandazione di utilizzare CMake per creare la tua app.

    • Nel tuo file build.gradle livello di build.gradle , assicurati di includere il repository Maven di Google in entrambe le sezioni buildscript e allprojects .

  2. Crea un oggetto App Firebase, passando l'ambiente JNI e l'attività:

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

  3. Definisci una classe che implementa l' firebase::messaging::Listener .

  4. Inizializza FCM, passando l'App e un Listener costruito:

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

  5. Le app che si basano sull'SDK dei servizi di Google Play devono controllare il dispositivo per un APK dei servizi di Google Play compatibile prima di accedere alle funzioni. Per saperne di più, fai riferimento all'APK Check for Google Play services .

iOS

  1. Hai bisogno di un certificato APN valido. Se non ne hai già uno, fai riferimento a Fornitura di certificati SSL per APN .
  2. Se non l'hai già fatto, aggiungi Firebase al tuo progetto C ++ . Quindi, per impostare il tuo progetto per FCM:
    1. Nel Podfile del tuo progetto, aggiungi la dipendenza FCM:
      pod 'Firebase/Messaging'
    2. Trascina i firebase.framework e firebase_messaging.framework nel tuo progetto Xcode firebase_messaging.framework Firebase C ++ .
  3. Configura il tuo progetto Xcode per abilitare le notifiche push:

    1. Seleziona il progetto dall'area Navigatore .
    2. Seleziona la destinazione del progetto dall'area Editor .
    3. Seleziona la scheda Generale dall'area Editor .

      1. Scorri verso il basso fino a Framework e librerie collegati , quindi fai clic sul pulsante + per aggiungere framework.
      2. Nella finestra che appare, scorri fino a UserNotifications.framework , fai clic su quella voce, quindi fai clic su Aggiungi .

        Questo framework appare solo in Xcode v8 e versioni successive ed è richiesto da questa libreria.

    4. Seleziona la scheda Funzionalità dall'area Editor .

      1. Passare Notifiche Push On.
      2. Scorri verso il basso fino a Modalità in background , quindi impostalo su On .
      3. Seleziona Notifiche remote in Modalità in background .
  4. Crea un oggetto App Firebase:

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

  5. Definisci una classe che implementa l' firebase::messaging::Listener .

  6. Inizializza Firebase Cloud Messaging, passando l'App e un Listener costruito:

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

Accedi al token di registrazione del dispositivo

All'inizializzazione della libreria Firebase Cloud Messaging, viene richiesto un token di registrazione per l'istanza dell'app client. L'app riceverà il token con il callback OnTokenReceived , che dovrebbe essere definito nella classe che implementa firebase::messaging::Listener .

Se desideri scegliere come target quel dispositivo specifico, avrai bisogno dell'accesso a questo token.

Nota sulla consegna dei messaggi su Android

Quando l'app non è affatto in esecuzione e un utente tocca una notifica, il messaggio non viene, per impostazione predefinita, instradato attraverso i callback incorporati di FCM. In questo caso, i payload dei messaggi vengono ricevuti tramite un Intent utilizzato per avviare l'applicazione. Per fare in modo che FCM inoltri questi messaggi in arrivo alla richiamata della libreria C ++, devi eseguire l'override del metodo onNewIntent nella tua attività e passare l' Intent al 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);
  }
}

I messaggi ricevuti mentre l'app è in background hanno il contenuto del loro campo di notifica utilizzato per popolare la notifica sulla barra delle applicazioni, ma quel contenuto di notifica non verrà comunicato a FCM. Ovvero, Message::notification sarà un null.

In sintesi:

Stato dell'app Notifica Dati Tutti e due
Primo piano OnMessageReceived OnMessageReceived OnMessageReceived
sfondo Area di notifica OnMessageReceived Notifica: vassoio di sistema
Dati: in extra dell'intento.

Gestione dei messaggi personalizzata su Android

Per impostazione predefinita, le notifiche inviate all'app vengono passate a ::firebase::messaging::Listener::OnMessageReceived , ma in alcuni casi potresti voler sovrascrivere il comportamento predefinito. Per fare ciò su Android dovrai scrivere classi personalizzate che estendano com.google.firebase.messaging.cpp.ListenerService così come aggiornare AndroidManifest.xml del tuo progetto.

Sostituisci metodi ListenerService .

ListenerService è la classe Java che intercetta i messaggi in arrivo inviati all'app e li indirizza alla libreria C ++. Quando l'app è in primo piano (o quando l'app è in background e riceve un payload di soli dati), i messaggi passeranno attraverso uno dei callback forniti su questa classe. Per aggiungere un comportamento personalizzato alla gestione dei messaggi, sarà necessario estendere ListenerService predefinito di FCM:

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

class MyListenerService extends ListenerService {

Sovrascrivendo il metodo ListenerService.onMessageReceived , è possibile eseguire azioni basate sull'oggetto RemoteMessage ricevuto e ottenere i dati del messaggio:

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

ListenerService dispone anche di alcuni altri metodi che vengono utilizzati meno frequentemente. Anche questi possono essere sovrascritti, per ulteriori informazioni vedere il riferimento 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);
}

Aggiorna AndroidManifest.xml

Una volta scritte, le classi personalizzate devono essere incluse in AndroidManifest.xml per avere effetto. Assicurati che il manifest includa gli strumenti di unione dichiarando l'attributo appropriato all'interno del tag <manifest> , in questo modo:

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

Nell'archivio firebase_messaging_cpp.aar è presente un file AndroidManifest.xml che dichiara il ListenerService predefinito di FCM. Questo manifest è normalmente unito al manifest specifico del progetto, che è il modo in cui ListenerService può essere eseguito. Questo ListenerService deve essere sostituito con il servizio listener personalizzato. Ciò si ottiene rimuovendo il ListenerService predefinito e aggiungendo il servizio personalizzato, che può essere fatto con le seguenti righe del file AndroidManifest.xml progetto:

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

Impedisci inizializzazione automatica

FCM genera un ID istanza, che viene utilizzato come token di registrazione all'interno di FCM. Quando viene generato un ID istanza, la libreria caricherà l'identificatore e i dati di configurazione su Firebase.Se desideri ottenere un consenso esplicito prima di utilizzare l'ID istanza, puoi impedire la generazione al momento della configurazione disabilitando FCM (e su Android, Analytics) . Per fare ciò, aggiungi un valore di metadati al tuo Info.plist (non al tuo GoogleService-Info.plist ) su iOS o al tuo AndroidManifest.xml su 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

Per riattivare FCM, puoi effettuare una chiamata in runtime:

::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);

Questo valore persiste durante i riavvii dell'app una volta impostato.

FCM consente l'invio di messaggi contenenti un collegamento diretto alla tua app. Per ricevere messaggi che contengono un collegamento diretto, è necessario aggiungere un nuovo filtro per intenti all'attività che gestisce i collegamenti diretti per la tua app. Il filtro di intenzione dovrebbe rilevare i link diretti del tuo dominio. Se i tuoi messaggi non contengono un deep link, questa configurazione non è necessaria. In 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>

È anche possibile specificare un carattere jolly per rendere il filtro intento più flessibile. Per esempio:

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

Quando gli utenti toccano una notifica contenente un collegamento allo schema e all'host specificato, la tua app avvierà l'attività con questo filtro di intento per gestire il collegamento.

Prossimi passi

Dopo aver configurato l'app client, sei pronto per inviare messaggi downstream e topic con Firebase. Per ulteriori informazioni, vedere questa funzionalità dimostrata nell'esempio di avvio rapido che è possibile scaricare, eseguire ed esaminare.

Per aggiungere un comportamento più avanzato alla tua app, consulta le guide per l'invio di messaggi da un server app:

Tieni presente che avrai bisogno di un'implementazione del server per utilizzare queste funzionalità.