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

Panoramica

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 Aggiungi Firebase all'app Android seguire questa procedura:

    1. In Android package name (Nome pacchetto Android) immettere un nome per il pacchetto. Ad esempio: tutorials.tutoria1.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 e quindi selezionare Hub di notifica nella sezione Dispositivi mobili. Selezionare l'icona a forma di stella accanto al nome del servizio per aggiungere il servizio alla sezione PREFERITI nel menu a sinistra. Dopo aver aggiunto Hub di notifica a PREFERITI, selezionarlo nel menu a sinistra.

    Portale di Azure - Selezionare Hub di notifica

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

    Hub di notifica - Pulsante Aggiungi della barra degli strumenti

  4. Nella scheda Nozioni di base nella pagina Hub di notifica seguire questa procedura:

    1. In Sottoscrizione selezionare il nome della sottoscrizione di Azure da 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 dell'hub di notifica. In alternativa, selezionare uno spazio dei nomi esistente dall'elenco a discesa.

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

    5. Selezionare Crea.

      Portale di Azure: impostare le proprietà dell'hub di notifica

  5. Selezionare Notifiche (icona a forma di campanello) e quindi selezionare Vai alla risorsa. È anche possibile aggiornare l'elenco nella pagina Hub di notifica e selezionare l'hub.

    Portale di Azure - Vai alla risorsa

  6. Selezionare Criteri di accesso dall'elenco. Prendere nota delle due stringhe di connessione disponibili. Sono necessarie in un secondo momento per gestire le notifiche push.

    Importante

    Non usare il criterio DefaultFullSharedAccessSignature nell'applicazione. Deve essere usato solo nel back-end.

    Portale di Azure: stringhe di connessione dell'hub di notifica

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 Compila con android versione: (framework di destinazione) selezionareAndroid 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 per l'ascolto: nel dashboard del Azure portal scegliere Visualizza stringhe di connessione. Copiare la stringa di connessione DefaultListenSharedAccessSignature per questo valore.
    • Nome hub: il nome dell'hub indicato nel Azure portal. 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 avere la classe eredita da Java.Lang.Object e implementare :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 Azure portal. 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: