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

    Add Firebase to your Android app

  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.tutoria1.xamarinfcmapp.

      Specify the package name

    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.

      Download google-services.json

    4. Selezionare Avanti.

    5. Selezionare Ignora questo passaggio.

      Skip the last step

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

    Select Project Settings

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

    Download google-services.json from the General tab

  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.

    Copy server key

Creare un hub di notifica

  1. Accedere al portale di Azure.

  2. Scegliere Tutti i servizi dal menu a sinistra. A screenshot showing select All Services for an existing namespace.

  3. Digitare Hub di notifica nella casella di testo Filtra 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.

    A screenshot showing how to filter for notification hubs.

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

    A screenshot showing how to create a new notification hub.

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

    1. In Sottoscrizione selezionare 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 showing notification hub details.

    5. Esaminare l'opzione zone di disponibilità. Se si sceglie un'area con zone di disponibilità, la casella di controllo è selezionata per impostazione predefinita. zone di disponibilità è 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 showing availability zone details.

    7. Seleziona Crea.

  6. Al termine della 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 of Notification Hub in Azure Portal with Google G C M F C M option highlighted and outlined in red.

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. seleziona OK.

      New Project dialog

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

    Screenshot that highlights the Blank App template.

  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.

    Package name 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.

      Google Play Services NuGet

    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.

    GoogleServicesJson build action

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.

Azure portal - Test Send

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: