Condividi tramite


Esercitazione: Inviare notifiche push alle app Xamarin.Android usando Hub di notifica

Panoramica

Nota

Per informazioni sui passaggi di deprecazione e migrazione di Firebase Cloud Messaging, vedere Migrazione di Google Firebase Cloud Messaging.

In questa esercitazione viene illustrato come usare Hub di notifica di Azure per inviare notifiche push a un'applicazione di Xamarin.Android. Viene creata un'app di Xamarin.Android vuota che riceve notifiche push tramite Firebase Cloud Messaging (FCM). È possibile usare l'hub di notifica per trasmettere le notifiche push a tutti i dispositivi che eseguono l'app. Il codice compilato è disponibile nell'esempio di app NotificationHubs.

In questa esercitazione vengono completati i passaggi seguenti:

  • Creare un progetto Firebase e attivare Firebase Cloud Messaging
  • Creare un hub di notifica
  • Creare un'app Xamarin.Android e connetterla all'hub di notifica
  • Inviare notifiche di prova dal portale di Azure

Prerequisiti

Creare un progetto Firebase e attivare Firebase Cloud Messaging

  1. Accedere alla console di Firebase. Creare un nuovo progetto Firebase se non è già disponibile.

  2. Dopo aver creato il progetto, selezionare Add Firebase to your Android app (Aggiungi Firebase all'app Android).

    Aggiungere Firebase all'app Android

  3. Nella pagina Aggiungere Firebase all'app Android seguire questa procedura:

    1. In Android package name (Nome pacchetto Android) immettere un nome per il pacchetto. Ad esempio: tutorials.tutorial1.xamarinfcmapp.

      Specificare il nome del pacchetto

    2. Selezionare Registra l'app.

    3. Selezionare Scaricare google-services.json. Salvare quindi il file nella cartella del progetto e selezionare Avanti. Se non è ancora stato creato il progetto di Visual Studio, è possibile eseguire questo passaggio dopo aver creato il progetto.

      Scaricare google-services.json

    4. Selezionare Avanti.

    5. Selezionare Ignora questo passaggio.

      Ignorare l'ultimo passaggio

  4. Nella console di Firebase selezionare il file COG per il progetto. Selezionare quindi Project Settings (Impostazioni progetto).

    Selezionare Project Settings (Impostazioni progetto)

  5. Se non è stato scaricato il file google-services.json, è possibile scaricarlo da questa pagina.

    Scaricare google-services.json dalla scheda Generale

  6. Passare alla scheda Cloud Messaging in alto. Copiare e salvare il valore di Chiave server per un uso successivo. Questo valore verrà usato per configurare l'hub di notifica.

    Copiare la chiave server

Creare un hub di notifica

  1. Accedere al portale di Azure.

  2. Scegliere Tutti i servizi dal menu a sinistra. Screenshot che mostra la selezione di Tutti i servizi per uno spazio dei nomi esistente.

  3. Digitare Hub di notifica nella casella di testo Filtri servizi. Selezionare l'icona a forma di stella accanto al nome del servizio per aggiungere il servizio alla sezione PREFERITI nel menu a sinistra. Selezionare Hub di notifica.

    Screenshot che mostra come filtrare gli hub di notifica.

  4. Nella pagina Hub di notifica selezionare Crea sulla barra degli strumenti.

    Screenshot che mostra come creare un nuovo hub di notifica.

  5. Nella scheda Informazioni di base della pagina hub di notifica seguire questa procedura:

    1. In Sottoscrizioneselezionare il nome della sottoscrizione di Azure che si vuole usare e quindi selezionare un gruppo di risorse esistente o crearne uno nuovo.

    2. Immettere un nome univoco per il nuovo spazio dei nomi in Dettagli spazio dei nomi.

    3. Uno spazio dei nomi contiene uno o più hub di notifica, quindi digitare un nome per l'hub in Dettagli hub di notifica.

    4. Selezionare un valore nell'elenco a discesa Posizione. Questo valore specifica la posizione in cui creare l'hub.

      Screenshot che mostra i dettagli dell'hub di notifica.

    5. Esaminare l'opzione Zone di disponibilità. Se si sceglie un'area con zone di disponibilità, la casella di controllo è selezionata per impostazione predefinita. Le zone di disponibilità sono una funzionalità a pagamento, quindi viene aggiunta una tariffa aggiuntiva al livello.

    6. Scegliere un'opzione di ripristino di emergenza: Nessuna, area di ripristino abbinata o area di ripristino flessibile. Se si sceglie Area di ripristino abbinata, viene visualizzata l'area di failover. Se si seleziona Area di ripristino flessibile, usare l'elenco a discesa per scegliere tra un elenco di aree di ripristino.

      Screenshot che mostra i dettagli della zona di disponibilità.

    7. Seleziona Crea.

  6. Una volta completata la distribuzione, selezionare Vai alla risorsa.

Configurare le impostazioni di GCM/FCM per l'hub di notifica

  1. Selezionare Google (GCM/FCM) nella sezione Settings (Impostazioni) nel menu a sinistra.

  2. Immettere la chiave del server annotata dalla Google Firebase Console.

  3. Sulla barra degli strumenti selezionare Salva.

    Screenshot dell'hub di notifica nel portale di Azure con l'opzione Google G C M F C M evidenziata e con contorno rosso.

L'hub di notifica è configurato per l'uso con FCM e sono disponibili le stringhe di connessione per registrare l'app in modo da ricevere notifiche e inviare notifiche push.

Creare un'app Xamarin.Android e connetterla all'hub di notifica

Creare un progetto di Visual Studio e aggiungere i pacchetti NuGet

Nota

I passaggi descritti in questa esercitazione sono per Visual Studio 2017.

  1. In Visual Studio scegliere Nuovo dal menu File, quindi fare clic su Progetto. Nella finestra New Project (Nuovo progetto) seguire questa procedura:

    1. Espandere Installed (Installato), Visual C#, quindi fare clic su Android.

    2. Selezionare Android App (Xamarin) dall'elenco.

    3. Immettere un nome per il progetto.

    4. Selezionare una località per il progetto.

    5. Selezionare OK

      Finestra di dialogo Nuovo progetto

  2. Nella finestra di dialogo New Android App (Nuova App per Android), selezionare Blank App (App vuota) e selezionare OK.

    Screenshot che evidenzia il modello App vuota.

  3. Nella finestra Esplora soluzioni espandere Proprietà e fare clic su AndroidManifest.xml. Aggiornare il nome del pacchetto in modo che corrisponda al nome del pacchetto immesso durante l'aggiunta di Firebase Cloud Messaging al progetto in Google Firebase Console.

    Nome del pacchetto in GCM

  4. Impostare la versione android di destinazione per il progetto su Android 10.0 seguendo questa procedura:

    1. Fare clic con il pulsante destro del mouse sul progetto e scegliere Proprietà.
    2. Per il campo Compile using Android version(Framework di destinazione) selezionare Android 10.0.
    3. Selezionare nella finestra di messaggio per continuare con la modifica del framework di destinazione.
  5. Aggiungere i pacchetti NuGet necessari al progetto seguendo questa procedura:

    1. Fare clic con il pulsante destro del mouse sul progetto e selezionare Gestisci pacchetti NuGet.

    2. Passare alla scheda Installato, selezionare Xamarin.Android.Support.Design e selezionare Aggiorna nel riquadro a destra per aggiornare il pacchetto alla versione più recente.

    3. Passare alla scheda Sfoglia . Cercare Xamarin.GooglePlayServices.Base. Selezionare Xamarin.GooglePlayServices.Base nell'elenco dei risultati. Quindi, selezionare Installa.

      NuGet Google Play Services

    4. Nella finestra Gestione pacchetti NuGet cercare il pacchetto Xamarin.Firebase.Messaging. Selezionare Xamarin.Firebase.Messaging nell'elenco dei risultati. Quindi, selezionare Installa.

    5. A questo punto, cercare Xamarin.Azure.NotificationHubs.Android. Selezionare Xamarin.Azure.NotificationHubs.Android nell'elenco dei risultati. Quindi, selezionare Installa.

Aggiungere il file JSON di Google Services

  1. Copiare il file google-services.json scaricato da Google Firebase Console nella cartella del progetto.

  2. Aggiungere google-services.json al progetto.

  3. Selezionare google-services.json nella finestra Esplora soluzioni.

  4. Nel riquadro Proprietà impostare l'azione di compilazione GoogleServicesJson. Se non viene visualizzato GoogleServicesJson, chiudere Visual Studio, riavviarlo, riaprire il progetto e riprovare.

    Azione di compilazione GoogleServicesJson

Configurare Hub di notifica nel progetto

Registrazione con Firebase Cloud Messaging

  1. Se si esegue la migrazione da Google Cloud Messaging a Firebase, il file del AndroidManifest.xml progetto potrebbe contenere una configurazione GCM obsoleta, che potrebbe causare la duplicazione delle notifiche. Modificare il file e rimuovere le righe seguenti all'interno della <application> sezione, se presente:

    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
        android:exported="false" />
    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>
    
  2. Aggiungere le istruzioni seguenti prima dell'elemento applicazione.

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    
  3. Raccogliere le informazioni seguenti per l'app Android e l'hub di notifica:

    • Stringa di connessione Listen: nel dashboard del portale di Azure scegliere Visualizza stringhe di connessione. Copiare la stringa di connessione DefaultListenSharedAccessSignature per questo valore.
    • Nome hub: nome dell'hub indicato nel portale di Azure. Ad esempio, mynotificationhub2.
  4. Nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, scegliere Aggiungi e selezionare Classe.

  5. Creare una classe Constants.cs per il progetto Xamarin e definire i valori costanti seguenti nella classe. Sostituire i segnaposto con i valori.

    public static class Constants
    {
        public const string ListenConnectionString = "<Listen connection string>";
        public const string NotificationHubName = "<hub name>";
    }
    
  6. Aggiungere le istruzioni using seguenti a MainActivity.cs:

    using WindowsAzure.Messaging.NotificationHubs;
    
  7. Aggiungere le proprietà seguenti alla classe MainActivity:

    internal static readonly string CHANNEL_ID = "my_notification_channel";
    
    
  8. In MainActivity.cs aggiungere il codice seguente a OnCreate dopo base.OnCreate(savedInstanceState):

    // Listen for push notifications
    NotificationHub.SetListener(new AzureListener());
    
    // Start the SDK
    NotificationHub.Start(this.Application, HubName, ConnectionString);
    
  9. Aggiungere al progetto una classe denominata AzureListener.

  10. Aggiungere le istruzioni using seguenti a AzureListener.cs.

    using Android.Content;
    using WindowsAzure.Messaging.NotificationHubs;
    
  11. Aggiungere quanto segue sopra la dichiarazione di classe e fare in modo che la classe erediti da Java.Lang.Object e implementi :INotificationListener

    public class AzureListener : Java.Lang.Object, INotificationListener
    
  12. Aggiungere il codice seguente all'interno della classe AzureListener per elaborare i messaggi ricevuti.

        public void OnPushNotificationReceived(Context context, INotificationMessage message)
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
    
            var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID);
    
            notificationBuilder.SetContentTitle(message.Title)
                        .SetSmallIcon(Resource.Drawable.ic_launcher)
                        .SetContentText(message.Body)
                        .SetAutoCancel(true)
                        .SetShowWhen(false)
                        .SetContentIntent(pendingIntent);
    
            var notificationManager = NotificationManager.FromContext(this);
    
            notificationManager.Notify(0, notificationBuilder.Build());
        }
    
  13. Compilare il progetto.

  14. Eseguire l'app nel dispositivo o nell'emulatore caricato

Inviare notifiche di prova dal portale di Azure

È possibile testare rapidamente la ricezione di notifiche nell'app con l'opzione Invio di prova nel portale di Azure. Verrà inviata una notifica push di prova al dispositivo.

Portale di Azure - Invio di prova

Le notifiche push vengono in genere inviate in un servizio back-end come Servizi mobili o ASP.NET usando una libreria compatibile. Se non è disponibile una libreria per il back-end è anche possibile usare direttamente l'API REST per inviare messaggi di notifica.

Passaggi successivi

In questa esercitazione, le notifiche sono state trasmesse a tutti i dispositivi Android registrati con il back-end. Per informazioni sulle procedure per eseguire il push di notifiche a dispositivi Android specifici, passare all'esercitazione seguente: