Udostępnij za pośrednictwem


Samouczek: wysyłanie powiadomień wypychanych do aplikacji platformy Xamarin.Android przy użyciu usługi Notification Hubs

Omówienie

Uwaga

Aby uzyskać informacje na temat wycofywania i migracji usługi Firebase Cloud Messaging, zobacz Migracja usługi Google Firebase Cloud Messaging.

Korzystając z tego samouczka, dowiesz się, jak wysyłać powiadomienia wypychane do aplikacji platformy Xamarin.Android przy użyciu usługi Azure Notification Hubs. Utworzysz pustą aplikację dla platformy Xamarin.Android służącą do odbierania powiadomień push przy użyciu usługi Firebase Cloud Messaging (FCM). Za pomocą centrum powiadomień będzie można wysyłać powiadomienia push do wszystkich urządzeń, na których działa ta aplikacja. Gotowy kod jest dostępny w przykładowej aplikacji NotificationHubs.

W tym samouczku wykonasz następujące kroki:

  • Tworzenie projektu Firebase i włączanie usługi Firebase Cloud Messaging
  • Tworzenie centrum powiadomień
  • Tworzenie aplikacji platformy Xamarin.Android i łączenie jej z centrum powiadomień
  • Wysyłanie powiadomień testowych z witryny Azure Portal

Wymagania wstępne

Tworzenie projektu Firebase i włączanie usługi Firebase Cloud Messaging

  1. Zaloguj się do konsoli Firebase. Utwórz nowy projekt Firebase, jeśli jeszcze go nie masz.

  2. Po utworzeniu projektu wybierz pozycję Dodaj Firebase do swojej aplikacji dla systemu Android.

    Add Firebase to your Android app

  3. Na stronie Dodawanie bazy danych Firebase do aplikacji systemu Android wykonaj następujące kroki:

    1. W polu Nazwa pakietu systemu Android wprowadź nazwę pakietu. Na przykład: tutorials.tutoria1.xamarinfcmapp.

      Specify the package name

    2. Wybierz pozycję Zarejestruj aplikację.

    3. Wybierz pozycję Pobierz google-services.json. Następnie zapisz plik w folderze projektu i wybierz pozycję Dalej. Jeśli projekt programu Visual Studio nie został jeszcze utworzony, możesz wykonać ten krok po utworzeniu projektu.

      Download google-services.json

    4. Wybierz Dalej.

    5. Wybierz pozycję Pomiń ten krok.

      Skip the last step

  4. W konsoli usługi Firebase wybierz koło zębate dla projektu. Następnie wybierz pozycję Ustawienia projektu.

    Select Project Settings

  5. Jeśli nie pobrano pliku google-services.json , możesz go pobrać na tej stronie.

    Download google-services.json from the General tab

  6. Przejdź do karty Cloud Messaging (Obsługa komunikatów w chmurze) u góry strony. Skopiuj i zapisz klucz serwera do późniejszego użycia. Ta wartość służy do konfigurowania centrum powiadomień.

    Copy server key

Tworzenie centrum powiadomień

  1. Zaloguj się w witrynie Azure Portal.

  2. Wybierz pozycję Wszystkie usługi w menu po lewej stronie. A screenshot showing select All Services for an existing namespace.

  3. Wpisz Notification Hubs w polu tekstowym Filtruj usługi . Wybierz ikonę gwiazdki obok nazwy usługi, aby dodać usługę do sekcji ULUBIONE w menu po lewej stronie. Wybierz pozycję Notification Hubs.

    A screenshot showing how to filter for notification hubs.

  4. Na stronie Notification Hubs wybierz pozycję Utwórz na pasku narzędzi.

    A screenshot showing how to create a new notification hub.

  5. Na karcie Podstawowe na stronie Centrum powiadomień wykonaj następujące czynności:

    1. W obszarze Subskrypcja wybierz nazwę subskrypcji platformy Azure, której chcesz użyć, a następnie wybierz istniejącą grupę zasobów lub utwórz nową.

    2. Wprowadź unikatową nazwę nowej przestrzeni nazw w obszarze Szczegóły przestrzeni nazw.

    3. Przestrzeń nazw zawiera co najmniej jedno centrum powiadomień, więc wpisz nazwę centrum w obszarze Szczegóły centrum powiadomień.

    4. Wybierz wartość z listy rozwijanej Lokalizacja . Ta wartość określa lokalizację, w której chcesz utworzyć centrum.

      Screenshot showing notification hub details.

    5. Przejrzyj opcję Strefy dostępności. Jeśli wybrano region ze strefami dostępności, pole wyboru jest zaznaczone domyślnie. Strefy dostępności jest funkcją płatną, dlatego do warstwy jest dodawana dodatkowa opłata.

    6. Wybierz opcję Odzyskiwania po awarii: Brak, Sparowany region odzyskiwania lub Elastyczny region odzyskiwania. Jeśli wybierzesz region odzyskiwania sparowanego, zostanie wyświetlony region trybu failover. Jeśli wybierzesz pozycję Elastyczny region odzyskiwania, użyj listy rozwijanej, aby wybrać z listy regionów odzyskiwania.

      Screenshot showing availability zone details.

    7. Wybierz pozycję Utwórz.

  6. Po zakończeniu wdrażania wybierz pozycję Przejdź do zasobu.

Konfigurowanie ustawień usługi GCM/FCM dla centrum powiadomień

  1. Wybierz pozycję Google (GCM/FCM)/ w sekcji Ustawienia w menu po lewej stronie.

  2. Wprowadź klucz serwera zanotowany w konsoli Google Firebase.

  3. Wybierz pozycję Zapisz na pasku narzędzi.

    Screenshot of Notification Hub in Azure Portal with Google G C M F C M option highlighted and outlined in red.

Centrum powiadomień jest skonfigurowane do pracy z usługą FCM i uzyskano parametry połączenia do rejestrowania aplikacji zarówno w celu odbierania, jak i wysyłania powiadomień wypychanych.

Tworzenie aplikacji platformy Xamarin.Android i łączenie jej z centrum powiadomień

Tworzenie projektu programu Visual Studio i dodawanie pakietów NuGet

Uwaga

Kroki opisane w tym samouczku dotyczą programu Visual Studio 2017.

  1. W programie Visual Studio otwórz menu Plik, wybierz pozycję Nowy, a następnie wybierz pozycję Projekt. W oknie Nowy projekt wykonaj następujące kroki:

    1. Rozwiń węzeł Zainstalowane, Visual C#, a następnie kliknij pozycję Android.

    2. Z listy wybierz pozycję Aplikacja systemu Android (Xamarin ).

    3. Wprowadź nazwę dla projektu.

    4. Wybierz lokalizację projektu.

    5. Wybierz OK

      New Project dialog

  2. W oknie dialogowym Nowa aplikacja systemu Android wybierz pozycję Pusta aplikacja i wybierz przycisk OK.

    Screenshot that highlights the Blank App template.

  3. W oknie Eksploratora rozwiązań rozwiń węzeł Właściwości i kliknij pozycję AndroidManifest.xml. Zaktualizuj nazwę pakietu tak, aby pasowała do nazwy pakietu wprowadzonej podczas dodawania usługi Firebase Cloud Messaging do projektu w konsoli Google Firebase Console.

    Package name in GCM

  4. Ustaw docelową wersję systemu Android dla projektu na Android 10.0 , wykonując następujące kroki:

    1. Kliknij projekt prawym przyciskiem myszy i wybierz polecenie Właściwości.
    2. W polu Kompiluj przy użyciu wersji systemu Android: (platforma docelowa) wybierz pozycję Android 10.0.
    3. Wybierz pozycję Tak w polu komunikatu, aby kontynuować zmianę platformy docelowej.
  5. Dodaj wymagane pakiety NuGet do projektu, wykonując następujące kroki:

    1. Kliknij projekt prawym przyciskiem myszy i wybierz pozycję Zarządzaj pakietami NuGet.

    2. Przejdź do karty Zainstalowane , wybierz pozycję Xamarin.Android.Support.Design, a następnie wybierz pozycję Aktualizuj w okienku po prawej stronie, aby zaktualizować pakiet do najnowszej wersji.

    3. Przejdź do karty Przeglądaj . Wyszukaj pozycję Xamarin.GooglePlayServices.Base. Na liście wyników wybierz pozycję Xamarin.GooglePlayServices.Base. Następnie wybierz pozycję Zainstaluj.

      Google Play Services NuGet

    4. W oknie Menedżera pakietów NuGet wyszukaj pozycję Xamarin.Firebase.Messaging. Na liście wyników wybierz pozycję Xamarin.Firebase.Messaging. Następnie wybierz pozycję Zainstaluj.

    5. Teraz wyszukaj pozycję Xamarin.Azure.NotificationHubs.Android. Na liście wyników wybierz pozycję Xamarin.Azure.NotificationHubs.Android. Następnie wybierz pozycję Zainstaluj.

Dodawanie pliku JSON usług Google

  1. Skopiuj plik google-services.json pobrany z konsoli Google Firebase Console do folderu projektu.

  2. Dodaj plik google-services.json do projektu.

  3. Wybierz plik google-services.json w oknie Eksploratora rozwiązań.

  4. W okienku Właściwości ustaw GoogleServicesJson jako akcję kompilacji. Jeśli nie widzisz opcji GoogleServicesJson, zamknij program Visual Studio, uruchom go ponownie, otwórz projekt i spróbuj ponownie.

    GoogleServicesJson build action

Konfigurowanie centrów powiadomień w projekcie

Rejestrowanie w usłudze Firebase Cloud Messaging

  1. Jeśli migrujesz z usługi Google Cloud Messaging do bazy danych Firebase, plik projektu AndroidManifest.xml może zawierać nieaktualną konfigurację usługi GCM, co może spowodować duplikowanie powiadomień. Edytuj plik i usuń następujące wiersze wewnątrz <application> sekcji, jeśli istnieją:

    <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. Dodaj następujące instrukcje przed elementem aplikacji .

    <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. Zbierz następujące informacje dotyczące aplikacji dla systemu Android i centrum powiadomień:

    • Listen connection string (Parametry połączenia nasłuchiwania): na pulpicie nawigacyjnym w witrynie Azure Portal kliknij pozycję Wyświetl parametry połączeń. Skopiuj parametry połączenia DefaultListenSharedAccessSignature dla tej wartości.
    • Nazwa centrum: nazwa centrum z witryny Azure Portal. Na przykład moje_centrum_powiadomien_2.
  4. W oknie Eksploratora rozwiązań kliknij prawym przyciskiem myszy projekt, wskaż pozycję Dodaj i wybierz pozycję Klasa.

  5. Utwórz klasę Constants.cs w projekcie Xamarin i zdefiniuj w tej klasie następujące wartości stałych. Zastąp tekst zastępczy własnymi wartościami.

    public static class Constants
    {
        public const string ListenConnectionString = "<Listen connection string>";
        public const string NotificationHubName = "<hub name>";
    }
    
  6. Dodaj następujące instrukcje using w pliku MainActivity.cs:

    using WindowsAzure.Messaging.NotificationHubs;
    
  7. Dodaj następujące właściwości do klasy MainActivity:

    internal static readonly string CHANNEL_ID = "my_notification_channel";
    
    
  8. W pliku MainActivity.cs dodaj następujący kod do elementu OnCreate po elemencie base.OnCreate(savedInstanceState):

    // Listen for push notifications
    NotificationHub.SetListener(new AzureListener());
    
    // Start the SDK
    NotificationHub.Start(this.Application, HubName, ConnectionString);
    
  9. Dodaj klasę o nazwie AzureListener do projektu.

  10. Dodaj następujące instrukcje using w pliku AzureListener.cs.

    using Android.Content;
    using WindowsAzure.Messaging.NotificationHubs;
    
  11. Dodaj następujące elementy powyżej deklaracji klasy i odziedzicz klasę Java.Lang.Object i zaimplementuj element INotificationListener:

    public class AzureListener : Java.Lang.Object, INotificationListener
    
  12. Dodaj następujący kod wewnątrz AzureListener klasy, aby przetworzyć odebrane komunikaty.

        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. Skompiluj projekt.

  14. Uruchom aplikację na urządzeniu lub załadowanym emulatorze.

Wysyłanie powiadomienia testowego z witryny Azure Portal

Odbieranie powiadomień w aplikacji możesz przetestować za pomocą opcji Wysyłanie testowe w witrynie Azure Portal. Powoduje to wysłanie testowego powiadomienia push na urządzenie.

Azure portal - Test Send

Powiadomienia wypychane są zwykle wysyłane w usłudze zaplecza, takiej jak Mobile Services czy ASP.NET, za pośrednictwem zgodnej biblioteki. Jeśli biblioteka nie jest dostępna dla zaplecza, możesz również użyć interfejsu API REST bezpośrednio do wysyłania komunikatów powiadomień.

Następne kroki

W tym samouczku wysłano wyemitowane powiadomienia do wszystkich urządzeń z systemem Android zarejestrowanych w zapleczu. Aby dowiedzieć się, jak wysyłać powiadomienia push do konkretnych urządzeń z systemem Android, przejdź do następującego samouczka: