Introduzione a Hub di notifica per le app per Xamarin.AndroidGet started with Notification Hubs for Xamarin.Android apps

PanoramicaOverview

In questa esercitazione viene illustrato come usare Hub di notifica di Azure per inviare notifiche push a un'applicazione di Xamarin.Android.This tutorial shows you how to use Azure Notification Hubs to send push notifications to a Xamarin.Android application. Verrà creata un'app di Xamarin.Android vuota che riceve notifiche push tramite Firebase Cloud Messaging (FCM).You'll create a blank Xamarin.Android app that receives push notifications by using Firebase Cloud Messaging (FCM). Al termine, sarà possibile usare l’hub di notifica per trasmettere le notifiche push a tutti i dispositivi che eseguono l'app.When you're finished, you'll be able to use your notification hub to broadcast push notifications to all the devices running your app. Il codice compilato è disponibile nell'esempio di app NotificationHubs.The finished code is available in the NotificationHubs app sample.

Questa esercitazione illustra uno scenario di trasmissione semplice tramite hub di notifica.This tutorial demonstrates the simple broadcast scenario in using Notification Hubs.

Prima di iniziareBefore you begin

Obiettivo di questo articolo è consentire di iniziare a usare Hub di notifica di Azure il prima possibile.The goal of this article is to help you get started using Azure Notification Hubs as quickly as possible. L'articolo presenta uno scenario di trasmissione molto semplice che illustra i concetti di base di Hub di notifica.The article presents a very simple broadcast scenario that focuses on the basic concepts of Notification Hubs.

Se si ha già familiarità con Hub di notifica, è possibile selezionare un altro argomento nel riquadro di spostamento a sinistra o passare agli articoli pertinenti nella sezione "Passaggi successivi".If you are already familiar with Notification Hubs, you might want to select another topic from the left navigation or go to the relevant articles in the "Next steps" section.

I commenti e suggerimenti inviati verranno presi seriamente in considerazione.We take your feedback seriously. Se si riscontrano difficoltà nel completare questo argomento o si hanno suggerimenti per migliorarne il contenuto, è possibile lasciare un commento alla fine dell'articolo.If you have any difficulty completing this topic, or if you have recommendations for improving this content, we invite you to provide feedback at the end of the article.

Il codice completo per questa esercitazione è disponibile su GitHub qui.The completed code for this tutorial can be found on GitHub here.

prerequisitiPrerequisites

Per completare questa esercitazione, è necessario disporre di:This tutorial requires the following:

Il completamento di questa esercitazione costituisce un prerequisito per tutte le altre esercitazioni di Hub di notifica relative ad app per Xamarin.Android.Completing this tutorial is a prerequisite for all other Notification Hubs tutorials for Xamarin.Android apps.

Importante

Per completare l'esercitazione, è necessario disporre di un account Azure attivo.To complete this tutorial, you must have an active Azure account. Se non si dispone di un account Azure, è possibile creare un account di valutazione gratuito in pochi minuti.If you don't have an account, you can create a free trial account in just a couple of minutes. Per informazioni dettagliate, vedere la pagina relativa alla versione di valutazione gratuita di Azure.For details, see Azure Free Trial.

Abilitare Firebase Cloud MessagingEnable Firebase Cloud Messaging

  1. Accedere alla console di Firebase.Sign in to the Firebase console. Creare un nuovo progetto Firebase se non è già disponibile.Create a new Firebase project if you don't already have one.
  2. Dopo aver creato il progetto, fare clic su Add Firebase to your Android app (Aggiungi Firebase all'app Android) e seguire le istruzioni fornite.After your project is created, click Add Firebase to your Android app and follow the instructions provided.

  3. Nella console di Firebase fare clic sul file cog per il progetto e quindi fare clic su Impostazioni progetto.In the Firebase console, click the cog for your project and then click Project Settings.

  4. Fare clic sulla scheda General (Generale) nelle impostazioni del progetto e quindi scaricare il file google-services.json che contiene la chiave API del server e l'ID client.Click the General tab in your project settings, and then download the google-services.json file that contains the Server API key and Client ID.
  5. Fare clic sulla scheda Cloud Messaging nelle impostazioni del progetto e copiare il valore di Legacy server key (Chiave server legacy).Click the Cloud Messaging tab in your project settings, and copy the value of the Legacy server key. Questo valore verrà usato per configurare i criteri di accesso all'hub di notifica.This value will be used to configure the notification hub access policy.

Configurare l'hub di notificaConfigure your notification hub

  1. Accedere al portale di Azure.Sign in to the Azure portal.

  2. Selezionare Nuovo > Web e dispositivi mobili > Hub di notifica.Select New > Web + Mobile > Notification Hub.

    Portale di Azure: creare un hub di notifica

  3. Nella casella Hub di notifica digitare un nome univoco.In the Notification Hub box, type a unique name. Selezionare l'area, la sottoscrizione e il gruppo di risorse (se già disponibili).Select your Region, Subscription, and Resource Group (if you have one already).

    Se non si ha già uno spazio dei nomi del bus di servizio, è possibile usare il nome predefinito, che viene creato in base al nome dell'hub (se lo spazio dei nomi è disponibile).If you don't already have a service bus namespace, you can use the default name, which is created based on the hub name (if the namespace name is available).

    Se si ha già un spazio dei nomi del bus di servizio in cui si vuole creare l'hub, seguire questa proceduraIf you already have a service bus namespace that you want to create the hub in, follow these steps

    a.a. Nell'area Spazio dei nomi selezionare il collegamento Seleziona esistente.In the Namespace area, select the Select Existing link.

    b.b. Selezionare Create.Select Create.

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

  4. Dopo avere creato lo spazio dei nomi e l'hub di notifica, aprirlo selezionando Tutte le risorse e quindi selezionare l'hub di notifica creato nell'elenco.After you've created the namespace and notification hub, open it by selecting All resources and then select the created notification hub from the list.

    Portale di Azure: pagina del portale dell'hub di notifica

  5. Selezionare Criteri di accesso dall'elenco.Select Access Policies from the list. Prendere nota delle due stringhe di connessione disponibili.Note the two connection strings that are available to you. Sono necessarie in un secondo momento per gestire le notifiche push.You need them to handle push notifications later.

    Importante

    NON usare DefaultFullSharedAccessSignature nell'applicazione.Do NOT use the DefaultFullSharedAccessSignature in your application. Deve essere usato solo nel back-end.This is meant to be used in your back-end only.

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

  1. Scegliere la scheda Configure (Configura) nella parte superiore, immettere il valore di API Key (Chiave API) ottenuto nella sezione precedente e quindi selezionare su Save (Salva).Choose the Configure tab at the top, enter the API Key value you obtained in the previous section, and then select Save.

    

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.Your notification hub is configured to work with FCM, and you have the connection strings to both register your app to receive notifications and to send push notifications.

Connettere l'app all'hub di notificaConnect your app to the notification hub

Creare prima di tutto un nuovo progetto.First, you create a new project.

  1. In Visual Studio scegliere Nuova soluzione > App Android e quindi selezionare Avanti.In Visual Studio, choose New Solution > Android App and then select Next.

    Visual Studio - Creare un nuovo progetto Android

  2. Compilare i campi App Name (Nome app) e Identifier (Identificatore).Enter your App Name and Identifier. Scegliere le piattaforme di destinazione da supportare e quindi fare clic su Avanti e su Crea.Choose the Target Platforms you want to support and then choose Next and Create.

    Visual Studio - Configurazione di un'app Android

    In questo modo viene creato un nuovo progetto Android.This creates a new Android project.

  3. Aprire le proprietà del progetto facendo clic con il pulsante destro del mouse sul nuovo progetto nella visualizzazione Solution e scegliendo Options.Open the project properties by right-clicking your new project in the Solution view and choosing Options. Selezionare la voce Android Application (Applicazione Android) nella sezione Build (Crea).Select the Android Application item in the Build section.

    Verificare che la prima lettera di Package name sia minuscola.Ensure that the first letter of your Package name is lowercase.

    Importante

    La prima lettera del nome del pacchetto deve essere minuscola.The first letter of the package name must be lowercase. In caso contrario verranno visualizzati errori del manifesto dell'applicazione quando l'app verrà registrata per le notifiche push più avanti.Otherwise, you will receive application manifest errors when you register your app for push notifications below.

    Visual Studio - Opzioni del progetto Android

  4. Impostare facoltativamente Minimum Android version su un altro livello API.Optionally, set the Minimum Android version to another API Level.
  5. Impostare eventualmente la versione di destinazione di Android su un'altra versione dell'API di destinazione (deve essere almeno API livello 8 o superiore).Optionally, set the Target Android version to another API version that you want to target (must be API level 8 or higher).
  6. Scegliere OK e chiudere la finestra di dialogo delle opzioni del progetto.Choose OK and close the Project Options dialog.

Aggiungere i pacchetti necessari al progettoAdd the required packages to your project

  1. Fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi > Aggiungi pacchetti NuGetRight-click your project and select Add > Add NuGet Packages
  2. Cercare Xamarin.Azure.NotificationHubs.Android e aggiungerlo al progetto.Search for Xamarin.Azure.NotificationHubs.Android and add it to the project.
  3. Cercare Xamarin.Firebase.Messaging e aggiungerlo al progetto.Search for Xamarin.Firebase.Messaging and add it to the project.

Configurare Hub di notifica nel progettoSet up notification hubs in your project

  1. Raccogliere le informazioni seguenti per l'app Android e l'hub di notifica:Gather the following information for your Android app and notification hub:

    • Stringa di connessione Listen: nel dashboard del portale di Azure scegliere Visualizza stringhe di connessione.Listen connection string: On the dashboard in the [Azure portal], choose View connection strings. Copiare la stringa di connessione DefaultListenSharedAccessSignature per questo valore.Copy the DefaultListenSharedAccessSignature connection string for this value.
    • Nome hub: si tratta del nome dell'hub indicato nel portale di Azure.Hub name: This is the name of your hub from the [Azure portal]. Ad esempio, mynotificationhub2.For example, mynotificationhub2.
  2. Creare una classe Constants.cs per il progetto Xamarin e definire i valori costanti seguenti nella classe.Create a Constants.cs class for your Xamarin project and define the following constant values in the class. Sostituire i segnaposto con i valori.Replace the placeholders with your values.

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

        using Android.Util;
    
  4. Aggiungere a MainActivity.cs una variabile di istanza che verrà usata per visualizzare una finestra di dialogo di avviso quando l'app è in esecuzione:Add an instance variable to MainActivity.cs that will be used to show an alert dialog when the app is running:

        public const string TAG = "MainActivity";
    
  5. Aggiungere il codice seguente a OnCreate in MainActivity.cs dopo base.OnCreate(savedInstanceState):Add the following code to OnCreate in MainActivity.cs after base.OnCreate(savedInstanceState):

        if (Intent.Extras != null)
        {
            foreach (var key in Intent.Extras.KeySet())
            {
                if(key!=null)
                {
                    var value = Intent.Extras.GetString(key);
                    Log.Debug(TAG, "Key: {0} Value: {1}", key, value);
                }
            }
        }
    
  6. Fare clic con il pulsante destro del mouse sul progetto e aggiungere il file google-services.json scaricato in precedenza dal progetto Firebase.Right-click your project and add the google-services.json that you downloaded from your Firebase project earlier. Fare clic con il pulsante destro del mouse sul file aggiunto e impostare l'azione di compilazione su GoogleServicesJsonRight-click the added file and set the build action to GoogleServicesJson

    Visual Studio - Configurare google-services.json

  7. Creare una nuova classe, MyFirebaseIIDService.Create a new class, MyFirebaseIIDService.

  8. Aggiungere le istruzioni using seguenti a MyFirebaseIIDService.cs:Add the following using statements to MyFirebaseIIDService.cs:

        using System;
        using Android.App;
        using Firebase.Iid;
        using Android.Util;
        using WindowsAzure.Messaging;
        using System.Collections.Generic;
    
  9. In MyFirebaseIIDService.cs aggiungere il codice seguente sopra la dichiarazione class e definire la classe in modo che erediti da FirebaseInstanceIdService:In MyFirebaseIIDService.cs, add the following above the class declaration, and have your class inherit from FirebaseInstanceIdService:

        [Service]
        [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
        public class MyFirebaseIIDService : FirebaseInstanceIdService
    
  10. In MyFirebaseIIDService.cs aggiungere il codice seguente:In MyFirebaseIIDService.cs, add the following code:

        const string TAG = "MyFirebaseIIDService";
        NotificationHub hub;
    
        public override void OnTokenRefresh()
        {
            var refreshedToken = FirebaseInstanceId.Instance.Token;
            Log.Debug(TAG, "FCM token: " + refreshedToken);
            SendRegistrationToServer(refreshedToken);
        }
    
        void SendRegistrationToServer(string token)
        {
            // Register with Notification Hubs
            hub = new NotificationHub(Constants.NotificationHubName,
                                      Constants.ListenConnectionString, this);
    
            var tags = new List<string>() { };
            var regID = hub.Register(token, tags.ToArray()).RegistrationId;
    
            Log.Debug(TAG, $"Successful registration of ID {regID}");
        }
    
  11. Creare un'altra nuova classe per il progetto e assegnarle il nome MyFirebaseMessagingService.Create another new class for your project, name it MyFirebaseMessagingService.

  12. Aggiungere le istruzioni using seguenti a MyFirebaseMessagingService.cs.Add the following using statements to MyFirebaseMessagingService.cs.

        using System;
        using System.Linq;
        using Android;
        using Android.App;
        using Android.Content;
        using Android.Util;
        using Firebase.Messaging;
    
  13. Aggiungere il codice seguente sopra la dichiarazione class e definire la classe in modo che erediti da FirebaseMessagingService:Add the following above your class declaration, and have your class inherit from FirebaseMessagingService:

        [Service]
        [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
        public class MyFirebaseMessagingService : FirebaseMessagingService
    
  14. Aggiungere il codice seguente a MyFirebaseMessagingService.cs:Add the following code to MyFirebaseMessagingService.cs:

        const string TAG = "MyFirebaseMsgService";
        public override void OnMessageReceived(RemoteMessage message)
        {
            Log.Debug(TAG, "From: " + message.From);
            if(message.GetNotification()!= null)
            {
                //These is how most messages will be received
                Log.Debug(TAG, "Notification Message Body: " + message.GetNotification().Body);
                SendNotification(message.GetNotification().Body);
            }
            else 
            {
                //Only used for debugging payloads sent from the Azure portal
                SendNotification(message.Data.Values.First());
    
            }
    
        }
    
        void SendNotification(string messageBody)
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
    
            var notificationBuilder = new Notification.Builder(this)
                        .SetContentTitle("FCM Message")
                        .SetSmallIcon(Resource.Drawable.ic_launcher)
                        .SetContentText(messageBody)
                        .SetAutoCancel(true)
                        .SetContentIntent(pendingIntent);
    
            var notificationManager = NotificationManager.FromContext(this);
    
            notificationManager.Notify(0, notificationBuilder.Build());
        }
    
  15. Eseguire l'app nel dispositivo o nell'emulatore caricatoRun your app on your device or loaded emulator

Inviare notifiche dal portaleSend notifications from the portal

È possibile testare rapidamente la ricezione di notifiche nell'app con l'opzione Invio di prova nel portale di Azure.You can test receiving notifications in your app with the Test Send option in the [Azure portal]. Verrà così inviata una notifica push di prova al dispositivo.This sends a test push notification to your device.

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.Push notifications are normally sent in a back-end service like Mobile Services or ASP.NET through a compatible library. Se non è disponibile una libreria per il back-end è anche possibile usare direttamente l'API REST per inviare messaggi di notifica.If a library is not available for your back-end you can also use the REST API directly to send notification messages.

Di seguito è riportato un elenco di altre esercitazioni, che è possibile esaminare per l'invio di notifiche:Here is a list of some other tutorials that you may want to review for sending notifications:

Passaggi successiviNext steps

In questo semplice esempio le notifiche sono state trasmesse a tutti i dispositivi Android.In this simple example, you broadcasted notifications to all your Android devices. Per rivolgersi a utenti specifici, fare riferimento all'esercitazione Usare Hub di notifica per inviare notifiche push agli utenti.In order to target specific users, refer to the tutorial [Use Notification Hubs to push notifications to users]. Se si desidera segmentare gli utenti per gruppi di interesse, consultare Uso di Hub di notifica per inviare le ultime notizie.If you want to segment your users by interest groups, you can read [Use Notification Hubs to send breaking news]. Per altre informazioni sull'uso di Hub di notifica, vedere Panoramica dell'Hub di notifica e Notification Hubs How-To for Android..Learn more about how to use Notification Hubs in [Notification Hubs Guidance] and in the [Notification Hubs How-To for Android].