Oktatóanyag: Leküldéses értesítések küldése React Native alkalmazásoknak az Azure Notification Hubs használatával háttérszolgáltatáson keresztül

Minta letöltése A minta letöltése

Ebben az oktatóanyagban az Azure Notification Hubs használatával küld értesítéseket egy androidos és iOS rendszerű React Native alkalmazásba.

A ASP.NET Core Webes API-háttérrendszer az ügyfél eszközregisztrációjának kezelésére szolgál a legújabb és legjobb telepítési módszer használatával. A szolgáltatás leküldéses értesítéseket is küld platformfüggetlen módon.

Ezeket a műveleteket a Notification Hubs SDK kezeli a háttérműveletek esetében. Az általános megközelítéssel kapcsolatos további részletekért tekintse meg az alkalmazás háttérrendszerének regisztrálását ismertető dokumentációt .

Ez az oktatóanyag végigvezeti az alábbi lépéseket:

Előfeltételek

A lépések követéséhez a következőkre van szükség:

  • Egy Azure-előfizetés ahol létrehozni és -erőforrások kezeléséhez.
  • Mac gép Visual Studio for Mac telepítve (vagy a Visual Studio 2019-et futtató pc a Mobile Development with .NET számítási feladattal).
  • Az alkalmazás androidos (fizikai vagy emulátoros) vagy iOS rendszeren (csak fizikai eszközökön) való futtatásának képessége.

Android esetén a következőket kell tennie:

  • Egy fejlesztő zárolta a fizikai eszközt vagy egy emulátort (az API 26-os vagy újabb verzióját futtatja, amelyen telepítve van a Google Play Services).

iOS esetén a következőket kell tennie:

Megjegyzés

Az iOS-szimulátor nem támogatja a távoli értesítéseket, ezért fizikai eszközre van szükség a minta iOS-en való vizsgálatához. Az oktatóanyag elvégzéséhez azonban nem kell futtatnia az alkalmazást Androidon és iOS rendszeren is.

Az első alapelveket tartalmazó példában szereplő lépéseket előzetes tapasztalat nélkül követheti. Az alábbi szempontok ismerete azonban hasznos lehet.

A megadott lépések a Visual Studio for Mac és a Visual Studio Code-hoz tartoznak, de a Visual Studio 2019-et is használhatja.

Leküldéses értesítési szolgáltatások és az Azure Notification Hub beállítása

Ebben a szakaszban beállítja a Firebase Cloud Messaging (FCM) és az Apple Push Notification Services (APNS) szolgáltatást. Ezután létre kell hoznia és konfigurálnia kell egy értesítési központot, hogy működjön ezekkel a szolgáltatásokkal.

Firebase-projekt létrehozása és a Firebase Cloud Messaging engedélyezése Androidhoz

  1. Jelentkezzen be a Firebase-konzolra. Hozzon létre egy új Firebase-projektet, amely a PushDemo nevet adja meg projektnévként.

    Megjegyzés

    A rendszer létrehoz egy egyedi nevet. Alapértelmezés szerint ez a megadott név kisbetűs változatából és egy kötőjellel elválasztott generált számból áll. Ezt módosíthatja, ha azt szeretné, hogy az továbbra is globálisan egyedi legyen.

  2. A projekt létrehozása után válassza a Firebase hozzáadása az Android-alkalmazáshoz lehetőséget.

    Firebase hozzáadása Android-alkalmazáshoz

  3. Az Add Firebase to your Android app (Firebase hozzáadása androidos alkalmazáshoz ) lapon hajtsa végre az alábbi lépéseket.

    1. Az Android-csomag neveként adja meg a csomag nevét. Például: com.<organization_identifier>.<package_name>.

      Adja meg a csomag nevét

    2. Válassza az Alkalmazás regisztrálása lehetőséget.

    3. Válassza a Letöltés google-services.json lehetőséget. Ezután mentse a fájlt egy helyi mappába későbbi használatra, és válassza a Tovább gombot.

      Google-services.json letöltése

    4. Kattintson a Tovább gombra.

    5. Válassza a Folytatás konzolra lehetőséget

      Megjegyzés

      Ha a Folytatás konzolra gomb nincs engedélyezve, a telepítés ellenőrzése miatt válassza a Lépés kihagyása lehetőséget.

  4. A Firebase konzolon válassza ki a projekt fogaskerékét. Ezután válassza a Projektbeállítások lehetőséget.

    Projektbeállítások kiválasztása

    Megjegyzés

    Ha még nem töltötte le a google-services.json fájlt, ezen az oldalon töltheti le.

  5. Váltson a felső Cloud Messaging (Felhőbeli üzenetkezelés ) lapra. Másolja és mentse a kiszolgálókulcsot későbbi használatra. Ezzel az értékkel konfigurálhatja az értesítési központot.

    Kiszolgálókulcs másolása

iOS-alkalmazás regisztrálása leküldéses értesítésekhez

Ha leküldéses értesítéseket szeretne küldeni egy iOS-alkalmazásnak, regisztrálja az alkalmazást az Apple-ben, és regisztráljon leküldéses értesítésekre is.

  1. Ha még nem regisztrálta az alkalmazást, keresse meg az iOS kiépítési portált az Apple Fejlesztői központban. Jelentkezzen be a portálra az Apple ID azonosítójával, lépjen a Tanúsítványok, azonosítók & Profilok elemre, majd válassza az Azonosítók lehetőséget. Ide kattintva + regisztrálhat egy új alkalmazást.

    iOS Kiépítési portál alkalmazásazonosítók lapja

  2. Az Új azonosító regisztrálása képernyőn válassza az Alkalmazásazonosítók választógombot. Ezután válassza a Folytatás elemet.

    iOS kiépítési portál – új azonosító regisztrálása lap

  3. Frissítse a következő három értéket az új alkalmazáshoz, majd válassza a Folytatás lehetőséget:

    • Leírás: Adjon meg egy leíró nevet az alkalmazásnak.

    • Csomagazonosító: Adja meg a com.organization_identifier<> űrlap csomagazonosítóját.<>product_name az alkalmazásterjesztési útmutatóban leírtak szerint. A következő képernyőképen az mobcat érték szervezeti azonosítóként, a PushDemo érték pedig a terméknév.

      iOS Kiépítési portál – Alkalmazásazonosító regisztrálása lap

    • Leküldéses értesítések: Ellenőrizze a Leküldéses értesítések lehetőséget a Képességek szakaszban.

      Űrlap új alkalmazásazonosító regisztrálásához

      Ez a művelet létrehozza az alkalmazásazonosítót, és kéri, hogy erősítse meg az információkat. Válassza a Folytatás, majd a Regisztráció lehetőséget az új alkalmazásazonosító megerősítéséhez.

      Új alkalmazásazonosító megerősítése

      Miután kiválasztotta a Regisztráció lehetőséget, az új alkalmazásazonosító sorelemként jelenik meg a Tanúsítványok, azonosítók & Profilok lapon.

  4. A Tanúsítványok, azonosítók & Profilok lapon, az Azonosítók területen keresse meg a létrehozott alkalmazásazonosító sorelemet. Ezután válassza ki a sorát az Alkalmazásazonosító konfigurációjának szerkesztése képernyő megjelenítéséhez.

Tanúsítvány létrehozása a Notification Hubshoz

Tanúsítvány szükséges ahhoz, hogy az értesítési központ működjön az Apple Push Notification Services (APNS) szolgáltatással, és kétféleképpen nyújtható:

  1. P12 leküldéses tanúsítvány létrehozása, amely közvetlenül a Notification Hubra tölthető fel (az eredeti megközelítés)

  2. Jogkivonatalapú hitelesítéshez használható p8-tanúsítvány létrehozása (az újabb és javasolt megközelítés)

Az újabb megközelítés számos előnnyel rendelkezik az APNS tokenalapú (HTTP/2) hitelesítésében leírtak szerint. Kevesebb lépésre van szükség, de adott forgatókönyvekhez is kötelező megadni. A lépések azonban mindkét megközelítéshez meg lettek adva, mivel mindkét módszer az oktatóanyag céljaira fog működni.

1. LEHETŐSÉG: Közvetlenül a Notification Hubra feltölthető p12 leküldéses tanúsítvány létrehozása
  1. Mac gépén futtassa a Keychain Access eszközt. A Utilities mappából vagy a Launchpad Egyéb mappájából nyitható meg.

  2. Válassza a Kulcskarika-hozzáférés lehetőséget, bontsa ki a Tanúsítványsegéd elemet, majd válassza a Tanúsítvány kérése hitelesítésszolgáltatótól lehetőséget.

    Új tanúsítvány kérése a Keychain Access használatával

    Megjegyzés

    Alapértelmezés szerint a Keychain Access kiválasztja a lista első elemét. Ez akkor lehet probléma, ha a Tanúsítványok kategóriában van, és az Apple Worldwide Developer Relations Hitelesítésszolgáltató nem az első elem a listában. A CSR (tanúsítvány-aláírási kérelem) létrehozása előtt győződjön meg arról, hogy van egy nem kulcseleme, vagy az Apple Worldwide Developer Relations hitelesítésszolgáltatói kulcs van kiválasztva.

  3. Válassza ki a Felhasználó Email címét, adja meg a Köznapi név értékét, győződjön meg arról, hogy a Lemezre mentve értéket adja meg, majd válassza a Folytatás lehetőséget. Hagyja üresen a hitelesítésszolgáltató Email Cím mezőt, mert nincs rá szükség.

    A tanúsítvány várható adatai

  4. Adja meg a Tanúsítvány-aláírási kérelem (CSR) fájl nevét a Mentés másként területen, válassza ki a helyet a Hol, majd válassza a Mentés lehetőséget.

    Válassza ki a tanúsítvány fájlnevét

    Ez a művelet a CSR-fájlt a kiválasztott helyre menti. Az alapértelmezett hely az Asztal. Jegyezze meg a fájlhoz kiválasztott helyet.

  5. Térjen vissza a Tanúsítványok, azonosítók & Profilok lapra az iOS kiépítési portálon, görgessen le a bejelölt leküldéses értesítések beállításhoz, majd válassza a Konfigurálás lehetőséget a tanúsítvány létrehozásához.

    Alkalmazásazonosító szerkesztése lap

  6. Megjelenik az Apple Push Notification szolgáltatás TLS/SSL-tanúsítványok ablaka . Válassza a Tanúsítvány létrehozása gombot a Fejlesztési TLS/SSL-tanúsítvány szakasz alatt.

    Tanúsítvány létrehozása az alkalmazásazonosítóhoz gomb

    Megjelenik az Új tanúsítvány létrehozása képernyő.

    Megjegyzés

    Ez az oktatóanyag fejlesztési tanúsítványt használ. Ugyanezt a folyamatot használják az éles tanúsítvány regisztrálásakor. Csak győződjön meg arról, hogy ugyanazt a tanúsítványtípust használja az értesítések küldésekor.

  7. Válassza a Fájl kiválasztása lehetőséget, keresse meg azt a helyet, ahová a CSR-fájlt mentette, majd a betöltéshez kattintson duplán a tanúsítvány nevére. Ezután válassza a Folytatás elemet.

  8. Miután a portál létrehozta a tanúsítványt, válassza a Letöltés gombot. Mentse a tanúsítványt, és jegyezze meg a mentés helyét.

    Generált tanúsítványletöltési oldal

    A rendszer letölti és menti a tanúsítványt a számítógépre a Letöltések mappában.

    A tanúsítványfájl megkeresése a Letöltések mappában

    Megjegyzés

    Alapértelmezés szerint a letöltött fejlesztési tanúsítvány neve aps_development.cer.

  9. Kattintson duplán a letöltött leküldéses tanúsítványra aps_development.cer. Ez a művelet telepíti az új tanúsítványt a kulcskarikán az alábbi képen látható módon:

    Kulcskarika-hozzáférési tanúsítványok listája új tanúsítvánnyal

    Megjegyzés

    Bár a tanúsítványban szereplő név eltérő lehet, a név az Apple Development iOS Push Services előtaggal lesz ellátva, és a megfelelő csomagazonosítóval van társítva.

  10. A Kulcskarika-hozzáférés + területenkattintson a Tanúsítványok kategóriában létrehozott új leküldéses tanúsítványra. Válassza az Exportálás lehetőséget, nevezze el a fájlt, válassza ki a p12 formátumot, majd válassza a Mentés lehetőséget.

    Tanúsítvány exportálása p12 formátumban

    Dönthet úgy, hogy jelszóval védi a tanúsítványt, de a jelszó megadása nem kötelező. Ha meg szeretné kerülni a jelszó létrehozását, kattintson az OK gombra . Jegyezze fel az exportált p12-tanúsítvány fájlnevét és helyét. Ezek az APN-ekkel történő hitelesítés engedélyezésére szolgálnak.

    Megjegyzés

    A p12-fájl neve és helye eltérhet az oktatóanyagban láthatótól.

2. LEHETŐSÉG: Jogkivonatalapú hitelesítéshez használható p8-tanúsítvány létrehozása
  1. Jegyezze fel a következő adatokat:

    • Alkalmazásazonosító előtagja (csapatazonosító)
    • Csomagazonosító
  2. A Tanúsítványok, azonosítók & profilok területen kattintson a Kulcsok elemre.

    Megjegyzés

    Ha már rendelkezik az APNS-hez konfigurált kulccsal, használhatja újra a közvetlenül a létrehozása után letöltött p8-tanúsítványt. Ha igen, figyelmen kívül hagyhatja a 35. lépést.

  3. Új kulcs létrehozásához kattintson a + gombra (vagy a Kulcs létrehozása gombra).

  4. Adjon meg egy megfelelő kulcsnevet , majd ellenőrizze az Apple Push Notifications szolgáltatás (APNS) beállítását, majd kattintson a Folytatás gombra, majd a következő képernyőn a Regisztrálás elemre.

  5. Kattintson a Letöltés gombra, majd helyezze át a p8 fájlt ( AuthKey_ előtaggal) egy biztonságos helyi könyvtárba, majd kattintson a Kész gombra.

    Megjegyzés

    Ügyeljen arra, hogy a p8-fájl biztonságos helyen legyen (és mentsen biztonsági másolatot). A kulcs letöltése után nem tölthető le újra a kiszolgálópéldány eltávolításakor.

  6. A Kulcsok területen kattintson a létrehozott kulcsra (vagy egy meglévő kulcsra, ha ezt választotta).

  7. Jegyezze fel a Kulcsazonosító értéket.

  8. Nyissa meg a p8-tanúsítványt egy tetszőleges alkalmazásban, például a Visual Studio Code-ban. Jegyezze fel a kulcs értékét ( -----BEGIN PRIVATE KEY----- és -----END PRIVATE KEY----- között).

    -----BEGIN TITKOS KULCS-----
    <key_value>
    -----END TITKOS KULCS-----

    Megjegyzés

    Ez az a tokenérték , amelyet később a Notification Hub konfigurálásához fog használni.

A lépések végén a következő információkkal kell rendelkeznie, amelyeket később használhat az Értesítési központ konfigurálása APNS-adatokkal című cikkben:

  • Csapatazonosító (lásd az 1. lépést)
  • Csomagazonosító (lásd az 1. lépést)
  • Kulcsazonosító (lásd a 7. lépést)
  • Jogkivonat értéke (a 8. lépésben beszerzett p8 kulcsérték)

Üzembe helyezési profil létrehozása az alkalmazáshoz

  1. Térjen vissza az iOS kiépítési portálra, válassza a Tanúsítványok, azonosítók & Profilok lehetőséget, a bal oldali menüben válassza a Profilok lehetőséget, majd válassza az + új profil létrehozásához lehetőséget. Megjelenik az Új kiépítési profil regisztrálása képernyő.

  2. A kiépítési profil típusaként válassza az iOS-alkalmazásfejlesztés lehetőséget a Fejlesztés területen, majd válassza a Folytatás lehetőséget.

    Kiépítési profilok listája

  3. Ezután válassza ki a létrehozott alkalmazásazonosítót az Alkalmazásazonosító legördülő listából, majd válassza a Folytatás lehetőséget.

    Válassza ki az alkalmazásazonosítót

  4. A Tanúsítványok kiválasztása ablakban válassza ki a kódaláíráshoz használt fejlesztési tanúsítványt, majd válassza a Folytatás lehetőséget.

    Megjegyzés

    Ez a tanúsítvány nem az előző lépésben létrehozott leküldéses tanúsítvány. Ez az Ön fejlesztési tanúsítványa. Ha nem létezik, létre kell hoznia, mivel ez az oktatóanyag előfeltétele . A fejlesztői tanúsítványok az Apple Fejlesztői portálon, az Xcode-on vagy a Visual Studióban hozhatók létre.

  5. Térjen vissza a Tanúsítványok, azonosítók & Profilok lapra, válassza a bal oldali menü Profilok elemét, majd válassza a lehetőséget + egy új profil létrehozásához. Megjelenik az Új kiépítési profil regisztrálása képernyő.

  6. A Tanúsítványok kiválasztása ablakban válassza ki a létrehozott fejlesztési tanúsítványt. Ezután válassza a Folytatás elemet.

  7. Ezután válassza ki a teszteléshez használni kívánt eszközöket, majd válassza a Folytatás lehetőséget.

  8. Végül válassza ki a profil nevét a Kiépítési profil neve területen, majd válassza a Létrehozás lehetőséget.

    Kiépítési profil nevének kiválasztása

  9. Az új kiépítési profil létrehozásakor válassza a Letöltés lehetőséget. Jegyezze meg a mentés helyét.

  10. Tallózással keresse meg a kiépítési profil helyét, majd kattintson rá duplán a fejlesztői gépen való telepítéshez.

Értesítési központ létrehozása

Ebben a szakaszban létrehoz egy értesítési központot, és konfigurálja az APNS-hitelesítést. Használhat p12 leküldéses tanúsítványt vagy jogkivonatalapú hitelesítést. Ha már létrehozott értesítési központot szeretne használni, ugorjon az 5. lépésre.

  1. Jelentkezzen be az Azure-ba.

  2. Kattintson az Erőforrás létrehozása elemre, keresse meg és válassza az Értesítési központ lehetőséget, majd kattintson a Létrehozás gombra.

  3. Frissítse a következő mezőket, majd kattintson a Létrehozás gombra:

    ALAPSZINTŰ RÉSZLETEK

    Előfizetés: Válassza ki a cél előfizetést a legördülő listából
    Erőforráscsoport: Új erőforráscsoport létrehozása (vagy meglévő kiválasztása)

    NÉVTÉR RÉSZLETEI

    Notification Hub-névtér: Adjon meg egy globálisan egyedi nevet a Notification Hub-névtérhez

    Megjegyzés

    Győződjön meg arról, hogy az Új létrehozása lehetőség van kiválasztva ehhez a mezőhöz.

    ÉRTESÍTÉSI KÖZPONT RÉSZLETEI

    Értesítési központ: Adja meg az értesítési központ nevét
    Helyen: Válasszon egy megfelelő helyet a legördülő listából
    Tarifacsomag: Az alapértelmezett Ingyenes beállítás megtartása

    Megjegyzés

    Hacsak nem érte el az ingyenes szinten található központok maximális számát.

  4. A Notification Hub kiépítése után keresse meg az erőforrást.

  5. Lépjen az új Értesítési központra.

  6. Válassza a hozzáférési szabályzatok elemet a listából (a KEZELÉS területen).

  7. Jegyezze fel a Szabályzatnév értékeket és a hozzájuk tartozó kapcsolati sztringértékeket .

Az Értesítési központ konfigurálása APNS-adatokkal

A Notification Services (Értesítési szolgáltatások) területen válassza az Apple lehetőséget, majd kövesse a megfelelő lépéseket a Korábban a Tanúsítvány létrehozása a Notification Hubshoz szakaszban kiválasztott módszer alapján.

Megjegyzés

Csak akkor használja az Éles alkalmazás üzemmódot, ha leküldéses értesítéseket szeretne küldeni azoknak a felhasználóknak, akik az alkalmazást az áruházból vásárolták meg.

1. LEHETŐSÉG: .p12 leküldéses tanúsítvány használata

  1. Válassza a Tanúsítvány elemet.

  2. Válassza a fájl ikont.

  3. Jelölje ki a korábban exportált .p12 fájlt, majd válassza a Megnyitás lehetőséget.

  4. Ha szükséges, adja meg a megfelelő jelszót.

  5. Válassza a Védőfal módot.

  6. Kattintson a Mentés gombra.

2. LEHETŐSÉG: Jogkivonatalapú hitelesítés használata

  1. Válassza a Jogkivonat lehetőséget.

  2. Adja meg a korábban beszerzett alábbi értékeket:

    • Kulcsazonosító
    • Csomagazonosító
    • Csapatazonosító
    • Token
  3. Válassza a Tesztkörnyezet lehetőséget.

  4. Kattintson a Mentés gombra.

Az értesítési központ konfigurálása FCM-adatokkal

  1. A bal oldali menü Beállítások szakaszában válassza a Google (GCM/FCM) lehetőséget.
  2. Adja meg a Google Firebase-konzolról feljegyzett kiszolgálókulcsot.
  3. Válassza az eszköztár Save (Mentés) elemét.

ASP.NET Core Webes API háttéralkalmazás létrehozása

Ebben a szakaszban a ASP.NET Core Webes API-háttérrendszert hozza létre az eszközregisztráció és az értesítések React Native mobilalkalmazásba való küldéséhez.

Webes projekt létrehozása

  1. A Visual Studióban válassza az Új megoldás fájlja>lehetőséget.

  2. Válassza a .NETCore-alkalmazás>>ASP.NET Core>API>Tovább lehetőséget.

  3. Az új ASP.NET Core webes API konfigurálása párbeszédpanelen válassza a .NET Core 3.1Célkerete lehetőséget.

  4. Adja meg a PushDemoApi nevet a projekt neveként , majd válassza a Létrehozás lehetőséget.

  5. Indítsa el a hibakeresést (Command + Enter) a sablonalapú alkalmazás teszteléséhez.

    Megjegyzés

    A sablonalapú alkalmazás úgy van konfigurálva, hogy a WeatherForecastControllerthasználja launchUrlként. Ezt a Tulajdonságok>launchSettings.json adhatja meg.

    Ha a rendszer érvénytelen fejlesztési tanúsítványt talált üzenettel kéri:

    1. A probléma megoldásához kattintson az Igen gombra a dotnet dev-certs https eszköz futtatásának elfogadásához. A "dotnet dev-certs https" eszköz ezután megkéri, hogy adja meg a tanúsítvány jelszavát és a kulcskarika jelszavát.

    2. Kattintson az Igen gombra, amikor a rendszer az új tanúsítvány telepítését és megbízhatóságát kéri, majd adja meg a kulcskarika jelszavát.

  6. Bontsa ki a Controllers mappát, majd törölje WeatherForecastController.cs.

  7. Törölje WeatherForecast.cs.

  8. Állítson be helyi konfigurációs értékeket a Secret Manager eszközzel. A titkos kulcsok megoldástól való leválasztása biztosítja, hogy ne kerülnek a verziókövetésbe. Nyissa meg a Terminált , majd nyissa meg a projektfájl könyvtárát, és futtassa a következő parancsokat:

    dotnet user-secrets init
    dotnet user-secrets set "NotificationHub:Name" <value>
    dotnet user-secrets set "NotificationHub:ConnectionString" <value>
    

    Cserélje le a helyőrző értékeket a saját értesítési központ nevére és kapcsolati karakterlánc értékekre. Ezeket az értesítési központ létrehozása szakaszban jegyezte fel. Ellenkező esetben megkeresheti őket az Azure-ban.

    NotificationHub:Név:
    Lásd: Név az Áttekintés felső részén található Essentials-összefoglalásban.

    NotificationHub:ConnectionString:
    Lásd: DefaultFullSharedAccessSignature a hozzáférési szabályzatokban

    Megjegyzés

    Éles forgatókönyvek esetén olyan lehetőségeket tekinthet meg, mint az Azure KeyVault a kapcsolati karakterlánc biztonságos tárolásához. Az egyszerűség kedvéért a titkos kulcsok hozzá lesznek adva a Azure App Service alkalmazás beállításaihoz.

Ügyfelek hitelesítése API-kulccsal (nem kötelező)

Az API-kulcsok nem olyan biztonságosak, mint a tokenek, de elegendőek az oktatóanyag céljaira. Az API-kulcsok egyszerűen konfigurálhatók a ASP.NET Köztes szoftveren keresztül.

  1. Adja hozzá az API-kulcsot a helyi konfigurációs értékekhez.

    dotnet user-secrets set "Authentication:ApiKey" <value>
    

    Megjegyzés

    Cserélje le a helyőrző értékét a saját értékére, és jegyezze fel.

  2. Ellenőrzés + Kattintson a PushDemoApi projektre, válassza az Új mappa lehetőséget a Hozzáadás menüben, majd kattintson a Hozzáadáshitelesítésselmappanévként elemre.

  3. Ellenőrzés + Kattintson a Hitelesítés mappára, majd válassza az Új fájl... lehetőséget a Hozzáadás menüben.

  4. Válassza az Általános>üres osztály lehetőséget, adja meg anév ApiKeyAuthOptions.cs, majd kattintson az Új elemre a következő implementáció hozzáadásakor.

    using Microsoft.AspNetCore.Authentication;
    
    namespace PushDemoApi.Authentication
    {
        public class ApiKeyAuthOptions : AuthenticationSchemeOptions
        {
            public const string DefaultScheme = "ApiKey";
            public string Scheme => DefaultScheme;
            public string ApiKey { get; set; }
        }
    }
    
  5. Adjon hozzá egy másik üres osztályt a ApiKeyAuthHandler.cs nevű hitelesítési mappához, majd adja hozzá a következő implementációt.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security.Claims;
    using System.Text.Encodings.Web;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Authentication;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Options;
    
    namespace PushDemoApi.Authentication
    {
        public class ApiKeyAuthHandler : AuthenticationHandler<ApiKeyAuthOptions>
        {
            const string ApiKeyIdentifier = "apikey";
    
            public ApiKeyAuthHandler(
                IOptionsMonitor<ApiKeyAuthOptions> options,
                ILoggerFactory logger,
                UrlEncoder encoder,
                ISystemClock clock)
                : base(options, logger, encoder, clock) {}
    
            protected override Task<AuthenticateResult> HandleAuthenticateAsync()
            {
                string key = string.Empty;
    
                if (Request.Headers[ApiKeyIdentifier].Any())
                {
                    key = Request.Headers[ApiKeyIdentifier].FirstOrDefault();
                }
                else if (Request.Query.ContainsKey(ApiKeyIdentifier))
                {
                    if (Request.Query.TryGetValue(ApiKeyIdentifier, out var queryKey))
                        key = queryKey;
                }
    
                if (string.IsNullOrWhiteSpace(key))
                    return Task.FromResult(AuthenticateResult.Fail("No api key provided"));
    
                if (!string.Equals(key, Options.ApiKey, StringComparison.Ordinal))
                    return Task.FromResult(AuthenticateResult.Fail("Invalid api key."));
    
                var identities = new List<ClaimsIdentity> {
                    new ClaimsIdentity("ApiKeyIdentity")
                };
    
                var ticket = new AuthenticationTicket(
                    new ClaimsPrincipal(identities), Options.Scheme);
    
                return Task.FromResult(AuthenticateResult.Success(ticket));
            }
        }
    }
    

    Megjegyzés

    A hitelesítési kezelő egy séma viselkedését megvalósító típus, amely ebben az esetben egy egyéni API-kulcsséma.

  6. Adjon hozzá egy másik Üres osztályt a ApiKeyAuthenticationBuilderExtensions.cs nevű hitelesítési mappához, majd adja hozzá a következő implementációt.

    using System;
    using Microsoft.AspNetCore.Authentication;
    
    namespace PushDemoApi.Authentication
    {
        public static class AuthenticationBuilderExtensions
        {
            public static AuthenticationBuilder AddApiKeyAuth(
                this AuthenticationBuilder builder,
                Action<ApiKeyAuthOptions> configureOptions)
            {
                return builder
                    .AddScheme<ApiKeyAuthOptions, ApiKeyAuthHandler>(
                        ApiKeyAuthOptions.DefaultScheme,
                        configureOptions);
            }
        }
    }
    

    Megjegyzés

    Ez a bővítménymetódus leegyszerűsíti a köztes szoftver konfigurációs kódját Startup.cs olvashatóbbá és általában könnyebben követhetővé teszi.

  7. A Startup.cs frissítse a ConfigureServices metódust, hogy konfigurálja az API-kulcs hitelesítését a szolgáltatások hívása alatt . AddControllers metódus.

    using PushDemoApi.Authentication;
    using PushDemoApi.Models;
    using PushDemoApi.Services;
    
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
    
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = ApiKeyAuthOptions.DefaultScheme;
            options.DefaultChallengeScheme = ApiKeyAuthOptions.DefaultScheme;
        }).AddApiKeyAuth(Configuration.GetSection("Authentication").Bind);
    }
    
  8. Továbbra is Startup.cs frissítse a Configure metódust, hogy meghívja a UseAuthentication és a UseAuthorization bővítménymetódusokat az alkalmazás IApplicationBuilderjén. Győződjön meg arról, hogy ezek a metódusok a UseRouting és az alkalmazás előtt lettek meghívva . UseEndpoints.

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.UseHttpsRedirection();
    
        app.UseRouting();
    
        app.UseAuthentication();
    
        app.UseAuthorization();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
    

    Megjegyzés

    A UseAuthentication hívása regisztrálja a korábban regisztrált hitelesítési sémákat használó köztes szoftvereket (a ConfigureServicesből). Ezt minden olyan köztes szoftver előtt meg kell hívni, amely a felhasználók hitelesítésétől függ.

Függőségek hozzáadása és szolgáltatások konfigurálása

ASP.NET Core támogatja a függőséginjektálási (DI) szoftvertervezési mintát, amely az osztályok és függőségeik közötti vezérlés inverziójának (IoC) elérésére szolgáló technika.

Az értesítési központ és a Notification Hubs SDK háttérműveletekhez való használata egy szolgáltatásba van beágyazva. A szolgáltatás regisztrálva van, és megfelelő absztrakción keresztül érhető el.

  1. Ellenőrzés + Kattintson a Függőségek mappára, majd válassza a NuGet-csomagok kezelése... lehetőséget.

  2. Keressen rá a Microsoft.Azure.NotificationHubs kifejezésre , és győződjön meg arról, hogy ellenőrizve van.

  3. Kattintson a Csomagok hozzáadása, majd az Elfogadás gombra, amikor a rendszer a licencfeltételek elfogadására kéri.

  4. Ellenőrzés + Kattintson a PushDemoApi projektre, válassza az Új mappa lehetőséget a Hozzáadás menüben, majd kattintson a Hozzáadásmodellek használatával mappanévként elemre.

  5. Ellenőrzés + Kattintson a Modellek mappára, majd válassza az Új fájl... lehetőséget a Hozzáadás menüben.

  6. Válassza az Általános>üres osztály lehetőséget, adja meg a név PushTemplates.cs, majd kattintson az Új gombra az alábbi implementáció hozzáadása gombra.

    namespace PushDemoApi.Models
    {
        public class PushTemplates
        {
            public class Generic
            {
                public const string Android = "{ \"notification\": { \"title\" : \"PushDemo\", \"body\" : \"$(alertMessage)\"}, \"data\" : { \"action\" : \"$(alertAction)\" } }";
                public const string iOS = "{ \"aps\" : {\"alert\" : \"$(alertMessage)\"}, \"action\" : \"$(alertAction)\" }";
            }
    
            public class Silent
            {
                public const string Android = "{ \"data\" : {\"message\" : \"$(alertMessage)\", \"action\" : \"$(alertAction)\"} }";
                public const string iOS = "{ \"aps\" : {\"content-available\" : 1, \"apns-priority\": 5, \"sound\" : \"\", \"badge\" : 0}, \"message\" : \"$(alertMessage)\", \"action\" : \"$(alertAction)\" }";
            }
        }
    }
    

    Megjegyzés

    Ez az osztály az ebben a forgatókönyvben megkövetelt általános és csendes értesítések jogkivonatos értesítési hasznos adatait tartalmazza. A hasznos adatok a telepítésen kívül vannak definiálva, hogy lehetővé tegyék a kísérletezést anélkül, hogy a szolgáltatáson keresztül frissíteni kellene a meglévő telepítéseket. Az oktatóanyag hatókörén kívül esik a telepítések ilyen módon végzett módosításainak kezelése. Éles környezetben fontolja meg az egyéni sablonokat.

  7. Vegyen fel egy másik Üres osztályt a Modellek mappába DeviceInstallation.cs, majd adja hozzá a következő implementációt.

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace PushDemoApi.Models
    {
        public class DeviceInstallation
        {
            [Required]
            public string InstallationId { get; set; }
    
            [Required]
            public string Platform { get; set; }
    
            [Required]
            public string PushChannel { get; set; }
    
            public IList<string> Tags { get; set; } = Array.Empty<string>();
        }
    }
    
  8. Vegyen fel egy másik Üres osztályt a Models (Modellek ) mappába NotificationRequest.cs, majd adja hozzá a következő implementációt.

    using System;
    
    namespace PushDemoApi.Models
    {
        public class NotificationRequest
        {
            public string Text { get; set; }
            public string Action { get; set; }
            public string[] Tags { get; set; } = Array.Empty<string>();
            public bool Silent { get; set; }
        }
    }
    
  9. Vegyen fel egy másik Üres osztályt a Models (Modellek ) mappába NotificationHubOptions.cs, majd adja hozzá a következő implementációt.

    using System.ComponentModel.DataAnnotations;
    
    namespace PushDemoApi.Models
    {
        public class NotificationHubOptions
        {
            [Required]
            public string Name { get; set; }
    
            [Required]
            public string ConnectionString { get; set; }
        }
    }
    
  10. Adjon hozzá egy új mappát a Szolgáltatások nevű PushDemoApi projekthez.

  11. Adjon hozzá egy üres felületet a INotificationService.cs nevű Services mappához, majd adja hozzá a következő implementációt.

    using System.Threading;
    using System.Threading.Tasks;
    using PushDemoApi.Models;
    
    namespace PushDemoApi.Services
    {
        public interface INotificationService
        {
            Task<bool> CreateOrUpdateInstallationAsync(DeviceInstallation deviceInstallation, CancellationToken token);
            Task<bool> DeleteInstallationByIdAsync(string installationId, CancellationToken token);
            Task<bool> RequestNotificationAsync(NotificationRequest notificationRequest, CancellationToken token);
        }
    }
    
  12. Adjon hozzá egy üres osztályt a NotificationHubsService.cs nevű Services mappához, majd adja hozzá a következő kódot az INotificationService felület implementálásához:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.NotificationHubs;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Options;
    using PushDemoApi.Models;
    
    namespace PushDemoApi.Services
    {
        public class NotificationHubService : INotificationService
        {
            readonly NotificationHubClient _hub;
            readonly Dictionary<string, NotificationPlatform> _installationPlatform;
            readonly ILogger<NotificationHubService> _logger;
    
            public NotificationHubService(IOptions<NotificationHubOptions> options, ILogger<NotificationHubService> logger)
            {
                _logger = logger;
                _hub = NotificationHubClient.CreateClientFromConnectionString(
                    options.Value.ConnectionString,
                    options.Value.Name);
    
                _installationPlatform = new Dictionary<string, NotificationPlatform>
                {
                    { nameof(NotificationPlatform.Apns).ToLower(), NotificationPlatform.Apns },
                    { nameof(NotificationPlatform.Fcm).ToLower(), NotificationPlatform.Fcm }
                };
            }
    
            public async Task<bool> CreateOrUpdateInstallationAsync(DeviceInstallation deviceInstallation, CancellationToken token)
            {
                if (string.IsNullOrWhiteSpace(deviceInstallation?.InstallationId) ||
                    string.IsNullOrWhiteSpace(deviceInstallation?.Platform) ||
                    string.IsNullOrWhiteSpace(deviceInstallation?.PushChannel))
                    return false;
    
                var installation = new Installation()
                {
                    InstallationId = deviceInstallation.InstallationId,
                    PushChannel = deviceInstallation.PushChannel,
                    Tags = deviceInstallation.Tags
                };
    
                if (_installationPlatform.TryGetValue(deviceInstallation.Platform, out var platform))
                    installation.Platform = platform;
                else
                    return false;
    
                try
                {
                    await _hub.CreateOrUpdateInstallationAsync(installation, token);
                }
                catch
                {
                    return false;
                }
    
                return true;
            }
    
            public async Task<bool> DeleteInstallationByIdAsync(string installationId, CancellationToken token)
            {
                if (string.IsNullOrWhiteSpace(installationId))
                    return false;
    
                try
                {
                    await _hub.DeleteInstallationAsync(installationId, token);
                }
                catch
                {
                    return false;
                }
    
                return true;
            }
    
            public async Task<bool> RequestNotificationAsync(NotificationRequest notificationRequest, CancellationToken token)
            {
                if ((notificationRequest.Silent &&
                    string.IsNullOrWhiteSpace(notificationRequest?.Action)) ||
                    (!notificationRequest.Silent &&
                    (string.IsNullOrWhiteSpace(notificationRequest?.Text)) ||
                    string.IsNullOrWhiteSpace(notificationRequest?.Action)))
                    return false;
    
                var androidPushTemplate = notificationRequest.Silent ?
                    PushTemplates.Silent.Android :
                    PushTemplates.Generic.Android;
    
                var iOSPushTemplate = notificationRequest.Silent ?
                    PushTemplates.Silent.iOS :
                    PushTemplates.Generic.iOS;
    
                var androidPayload = PrepareNotificationPayload(
                    androidPushTemplate,
                    notificationRequest.Text,
                    notificationRequest.Action);
    
                var iOSPayload = PrepareNotificationPayload(
                    iOSPushTemplate,
                    notificationRequest.Text,
                    notificationRequest.Action);
    
                try
                {
                    if (notificationRequest.Tags.Length == 0)
                    {
                        // This will broadcast to all users registered in the notification hub
                        await SendPlatformNotificationsAsync(androidPayload, iOSPayload, token);
                    }
                    else if (notificationRequest.Tags.Length <= 20)
                    {
                        await SendPlatformNotificationsAsync(androidPayload, iOSPayload, notificationRequest.Tags, token);
                    }
                    else
                    {
                        var notificationTasks = notificationRequest.Tags
                            .Select((value, index) => (value, index))
                            .GroupBy(g => g.index / 20, i => i.value)
                            .Select(tags => SendPlatformNotificationsAsync(androidPayload, iOSPayload, tags, token));
    
                        await Task.WhenAll(notificationTasks);
                    }
    
                    return true;
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Unexpected error sending notification");
                    return false;
                }
            }
    
            string PrepareNotificationPayload(string template, string text, string action) => template
                .Replace("$(alertMessage)", text, StringComparison.InvariantCulture)
                .Replace("$(alertAction)", action, StringComparison.InvariantCulture);
    
            Task SendPlatformNotificationsAsync(string androidPayload, string iOSPayload, CancellationToken token)
            {
                var sendTasks = new Task[]
                {
                    _hub.SendFcmNativeNotificationAsync(androidPayload, token),
                    _hub.SendAppleNativeNotificationAsync(iOSPayload, token)
                };
    
                return Task.WhenAll(sendTasks);
            }
    
            Task SendPlatformNotificationsAsync(string androidPayload, string iOSPayload, IEnumerable<string> tags, CancellationToken token)
            {
                var sendTasks = new Task[]
                {
                    _hub.SendFcmNativeNotificationAsync(androidPayload, tags, token),
                    _hub.SendAppleNativeNotificationAsync(iOSPayload, tags, token)
                };
    
                return Task.WhenAll(sendTasks);
            }
        }
    }
    

    Megjegyzés

    A SendTemplateNotificationAsync számára megadott címkekifejezés legfeljebb 20 címke lehet. A legtöbb operátor esetében 6-ra van korlátozva, de a kifejezés ebben az esetben csak ARS-eket (||) tartalmaz. Ha a kérelemben több mint 20 címke szerepel, akkor több kérelemre kell felosztani őket. További részletekért tekintse meg az Útválasztási és címkekifejezések dokumentációját.

  13. A Startup.cs frissítse a ConfigureServices metódust, hogy az INotificationService egyetlentonos implementációjaként adja hozzá a NotificationHubsService-t.

    
    using PushDemoApi.Models;
    using PushDemoApi.Services;
    
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    
        services.AddSingleton<INotificationService, NotificationHubService>();
    
        services.AddOptions<NotificationHubOptions>()
            .Configure(Configuration.GetSection("NotificationHub").Bind)
            .ValidateDataAnnotations();
    }
    

Az értesítések API létrehozása

  1. Ellenőrzés + Kattintson a Vezérlők mappára, majd válassza az Új fájl... lehetőséget a Hozzáadás menüben.

  2. Válassza a ASP.NET Core>Web API Controller Class (Api-vezérlőosztály) lehetőséget, írja be a Név mezőben a NotificationsController kifejezést, majd kattintson az Új gombra.

    Megjegyzés

    Ha a Visual Studio 2019-et használja, válassza ki az OLVASÁSI/írási műveleteket tartalmazó API-vezérlőt .

  3. Adja hozzá a következő névtereket a fájl elejéhez.

    using System.ComponentModel.DataAnnotations;
    using System.Net;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using PushDemoApi.Models;
    using PushDemoApi.Services;
    
  4. Frissítse a sablonos vezérlőt úgy, hogy a ControllerBase-ből származik, és az ApiController attribútummal van díszítve.

    [ApiController]
    [Route("api/[controller]")]
    public class NotificationsController : ControllerBase
    {
        // Templated methods here
    }
    

    Megjegyzés

    A Controller alaposztály támogatja a nézeteket, de erre ebben az esetben nincs szükség, ezért a ControllerBase használható helyette. Ha a Visual Studio 2019-et követi, kihagyhatja ezt a lépést.

  5. Ha úgy döntött, hogy befejezi az ügyfelek hitelesítése API-kulcs használatával szakaszt , akkor az NotificationsControllert is az Engedélyezés attribútummal kell díszítenie.

    [Authorize]
    
  6. Frissítse a konstruktort, hogy fogadja el az INotificationService regisztrált példányát argumentumként, és rendelje hozzá egy olvasható taghoz.

    readonly INotificationService _notificationService;
    
    public NotificationsController(INotificationService notificationService)
    {
        _notificationService = notificationService;
    }
    
  7. A launchSettings.json -ben (a Tulajdonságok mappában) módosítsa a launchUrl értéket api/notifications értékreweatherforecast, hogy megfeleljen a RegistrationsControllerRoute attribútumban megadott URL-címnek.

  8. Indítsa el a hibakeresést (Command + Enter) annak ellenőrzéséhez, hogy az alkalmazás működik-e az új NotificationsControllerrel , és 401 Jogosulatlan állapotot ad vissza.

    Megjegyzés

    Előfordulhat, hogy a Visual Studio nem indítja el automatikusan az alkalmazást a böngészőben. Mostantól a Postman használatával tesztelheti az API-t.

  9. Egy új Postman lapon állítsa a kérést GET értékre. Írja be az alábbi címet a helyőrző <applicationUrl> helyett a Tulajdonságok>launchSettings.json található https applicationUrl értékre.

    <applicationUrl>/api/notifications
    

    Megjegyzés

    Az applicationUrl értékének az alapértelmezett profilhoz "https://localhost:5001" értéknek kell lennie. Ha IIS-t használ (windowsos Visual Studio 2019-ben alapértelmezés szerint), az iisSettings elemben megadott applicationUrl parancsot kell használnia. Ha a cím helytelen, 404-et kap.

  10. Ha úgy döntött, hogy befejezi az ügyfelek hitelesítése API-kulcs használatával szakaszt , mindenképpen konfigurálja a kérésfejléceket úgy, hogy az tartalmazza az apikey értékét.

    Kulcs Value
    apikey <your_api_key>
  11. Kattintson a Küldés gombra.

    Megjegyzés

    200 OK állapotúnak kell lennie néhány JSON-tartalommal.

    Ha SSL-tanúsítvány-ellenőrzési figyelmeztetést kap, a beállítások között kikapcsolhatja az SSL-tanúsítvány-ellenőrzés Postman kérését.

  12. Cserélje le a NotificationsController.cs sablonalapú osztálymetszetét a következő kódra.

    [HttpPut]
    [Route("installations")]
    [ProducesResponseType((int)HttpStatusCode.OK)]
    [ProducesResponseType((int)HttpStatusCode.BadRequest)]
    [ProducesResponseType((int)HttpStatusCode.UnprocessableEntity)]
    public async Task<IActionResult> UpdateInstallation(
        [Required]DeviceInstallation deviceInstallation)
    {
        var success = await _notificationService
            .CreateOrUpdateInstallationAsync(deviceInstallation, HttpContext.RequestAborted);
    
        if (!success)
            return new UnprocessableEntityResult();
    
        return new OkResult();
    }
    
    [HttpDelete()]
    [Route("installations/{installationId}")]
    [ProducesResponseType((int)HttpStatusCode.OK)]
    [ProducesResponseType((int)HttpStatusCode.BadRequest)]
    [ProducesResponseType((int)HttpStatusCode.UnprocessableEntity)]
    public async Task<ActionResult> DeleteInstallation(
        [Required][FromRoute]string installationId)
    {
        var success = await _notificationService
            .DeleteInstallationByIdAsync(installationId, CancellationToken.None);
    
        if (!success)
            return new UnprocessableEntityResult();
    
        return new OkResult();
    }
    
    [HttpPost]
    [Route("requests")]
    [ProducesResponseType((int)HttpStatusCode.OK)]
    [ProducesResponseType((int)HttpStatusCode.BadRequest)]
    [ProducesResponseType((int)HttpStatusCode.UnprocessableEntity)]
    public async Task<IActionResult> RequestPush(
        [Required]NotificationRequest notificationRequest)
    {
        if ((notificationRequest.Silent &&
            string.IsNullOrWhiteSpace(notificationRequest?.Action)) ||
            (!notificationRequest.Silent &&
            string.IsNullOrWhiteSpace(notificationRequest?.Text)))
            return new BadRequestResult();
    
        var success = await _notificationService
            .RequestNotificationAsync(notificationRequest, HttpContext.RequestAborted);
    
        if (!success)
            return new UnprocessableEntityResult();
    
        return new OkResult();
    }
    

Az API-alkalmazás létrehozása

Most létrehoz egy API-alkalmazásta Azure App Service a háttérszolgáltatás üzemeltetéséhez.

  1. Jelentkezzen be az Azure Portalra.

  2. Kattintson az Erőforrás létrehozása elemre, keresse meg és válassza az API-alkalmazás lehetőséget, majd kattintson a Létrehozás gombra.

  3. Frissítse a következő mezőket, majd kattintson a Létrehozás gombra.

    Alkalmazás neve:
    Adja meg az API-alkalmazás globálisan egyedi nevét

    Előfizetés:
    Válassza ki ugyanazt a cél-előfizetést , amelyben létrehozta az értesítési központot.

    Erőforráscsoport:
    Válassza ki ugyanazt az erőforráscsoportot , amelyben létrehozta az értesítési központot.

    App Service csomag/hely:
    Új App Service-csomag létrehozása

    Megjegyzés

    Váltson az alapértelmezett beállításról az SSL-támogatást tartalmazó csomagra. Ellenkező esetben meg kell tennie a megfelelő lépéseket, amikor a mobilalkalmazással dolgozik, hogy megakadályozza a HTTP-kérések blokkolását.

    Application Insights:
    Tartsa meg a javasolt beállítást (új erőforrás jön létre ezzel a névvel), vagy válasszon ki egy meglévő erőforrást.

  4. Az API-alkalmazás kiépítése után keresse meg az erőforrást.

  5. Jegyezze fel az URL-tulajdonságot az Áttekintés tetején található Essentials-összefoglalásban. Ez az URL-cím a háttérbeli végpont , amelyet az oktatóanyag későbbi részében fogunk használni.

    Megjegyzés

    Az URL-cím a korábban megadott API-alkalmazásnevet használja a formátummal https://<app_name>.azurewebsites.net.

  6. Válassza a Konfiguráció lehetőséget a listából (a Beállítások területen).

  7. Az alábbi beállítások mindegyikéhez kattintson az Új alkalmazásbeállítás elemre a Név és az Érték megadásához, majd kattintson az OK gombra.

    Name (Név) Value
    Authentication:ApiKey <api_key_value>
    NotificationHub:Name <hub_name_value>
    NotificationHub:ConnectionString <hub_connection_string_value>

    Megjegyzés

    Ezek ugyanazok a beállítások, amelyeket korábban a felhasználói beállításokban definiált. Ezeket át kell tudnia másolni. A Hitelesítés:ApiKey beállítás csak akkor szükséges, ha az ügyfelek hitelesítése API-kulcs használatával szakaszt választotta. Éles forgatókönyvek esetén olyan lehetőségeket tekinthet meg, mint az Azure KeyVault. Ezek az egyszerűség kedvéért alkalmazásbeállításokként lettek hozzáadva ebben az esetben.

  8. Az összes alkalmazásbeállítás hozzáadása után kattintson a Mentés, majd a Folytatás gombra.

A háttérszolgáltatás közzététele

Ezután üzembe helyezi az alkalmazást az API-alkalmazásban, hogy minden eszközről elérhető legyen.

Megjegyzés

Az alábbi lépések a Visual Studio for Mac vonatkoznak. Ha windowsos Visual Studio 2019-et követ, a közzétételi folyamat eltérő lesz. Lásd: Közzététel Azure App Service Windows rendszeren.

  1. Ha még nem tette meg, módosítsa a konfigurációt HibakeresésrőlKiadásra .

  2. Ellenőrzés + Kattintson a PushDemoApi projektre, majd válassza a Közzététel az Azure-ban... lehetőséget a Közzététel menüben.

  3. Kövesse a hitelesítési folyamatot, ha a rendszer erre kéri. Használja az előző létrehozási API-alkalmazás szakaszban használt fiókot.

  4. Jelölje ki a közzétételi célként korábban létrehozott Azure App Service API-alkalmazást a listából, majd kattintson a Közzététel gombra.

A varázsló befejezése után közzéteszi az alkalmazást az Azure-ban, majd megnyitja az alkalmazást. Jegyezze fel az URL-címet , ha még nem tette meg. Ez az URL-cím az oktatóanyag későbbi részében használt háttérbeli végpont .

A közzétett API ellenőrzése

  1. A Postmanben nyisson meg egy új lapot, állítsa a kérést PUT értékre , és adja meg az alábbi címet. Cserélje le a helyőrzőt az előző közzétételi háttérszolgáltatás szakaszában jegyzett alapcímre.

    https://<app_name>.azurewebsites.net/api/notifications/installations
    

    Megjegyzés

    Az alapcím formátuma https://<app_name>.azurewebsites.net/

  2. Ha úgy döntött, hogy befejezi az ügyfelek hitelesítése API-kulcs használatával szakaszt , mindenképpen konfigurálja a kérésfejléceket úgy, hogy az tartalmazza az apikey értékét.

    Kulcs Value
    apikey <your_api_key>
  3. Válassza ki a törzs nyers beállítását, majd a formátumbeállítások listájában válassza a JSON lehetőséget, majd adjon meg néhány helyőrző JSON-tartalmat:

    {}
    
  4. Kattintson a küldése.

    Megjegyzés

    422 UnprocessableEntity állapotot kell kapnia a szolgáltatástól.

  5. Végezze el ismét az 1–4. lépést, de ezúttal adja meg a kérések végpontot annak ellenőrzéséhez, hogy 400 hibás kérésre adott válasz érkezik-e.

    https://<app_name>.azurewebsites.net/api/notifications/requests
    

Megjegyzés

Az API-t még nem lehet érvényes kérelemadatokkal tesztelni, mivel ehhez platformspecifikus információkra lesz szükség az ügyfél-mobilalkalmazásból.

Platformfüggetlen React Native-alkalmazás létrehozása

Ebben a szakaszban egy React Native mobilalkalmazást hoz létre, amely platformfüggetlen módon implementálja a leküldéses értesítéseket.

Lehetővé teszi, hogy regisztráljon és töröljön egy értesítési központból a létrehozott háttérszolgáltatáson keresztül.

Riasztás jelenik meg, ha egy művelet meg van adva, és az alkalmazás az előtérben van. Ellenkező esetben az értesítések megjelennek az Értesítési központban.

Megjegyzés

A regisztrációs (és deregisztrációs) műveleteket általában az alkalmazás életciklusának megfelelő pontján (vagy az első futtatási folyamat részeként) hajtaná végre explicit felhasználói regisztráció/regisztráció törlése nélkül. Ez a példa azonban explicit felhasználói bevitelt igényel, hogy a funkció könnyebben megvizsgálható és tesztelhető legyen.

A React Native megoldás létrehozása

  1. A fájlban Terminalfrissítse a környezeti eszközöket, és az alábbi parancsokkal kell együttműködnie React Native:

    # install node
    brew install node
    # or update
    brew update node
    # install watchman
    brew install watchman
    # or update
    brew upgrade watchman
    # install cocoapods
    sudo gem install cocoapods
    
  2. A fájlban Terminalfuttassa a következő parancsot, ha telepítve van React Native a parancssori felület az eltávolításához. A használatával npx automatikusan elérheti az elérhető legújabb React Native CLI-verziót:

    npm uninstall -g react-native-cli
    

    Megjegyzés

    React Native beépített parancssori felülettel rendelkezik. A parancssori felület egy adott verziójának globális telepítése és kezelése helyett azt javasoljuk, hogy a futtatókörnyezetben npxaz aktuális verziót használja, amely Node.js szállít. A paranccsal npx react-native <command>a parancssori felület aktuális stabil verziója lesz letöltve és végrehajtva a parancs futtatásakor.

  3. Lépjen a projektek mappájába, ahol létre szeretné hozni az új alkalmazást. Használja a Typescript-alapú sablont a --template paraméter megadásával:

    # init new project with npx
    npx react-native init PushDemo --template react-native-template-typescript
    
  4. Futtassa a metrókiszolgálót, amely JavaScript-csomagokat épít ki, és figyeli a kódfrissítéseket a csomagok valós idejű frissítéséhez:

    cd PushDemo
    npx react-native start
    
  5. Futtassa az iOS-alkalmazást a beállítás ellenőrzéséhez. A következő parancs végrehajtása előtt győződjön meg arról, hogy elindított egy iOS-szimulátort vagy csatlakoztatott egy iOS-eszközt:

    npx react-native run-ios
    
  6. Futtassa az Android alkalmazást a beállítás ellenőrzéséhez. Néhány további lépésre van szükség egy Android emulátor vagy eszköz konfigurálásához, hogy hozzáférhessen a React Native metrókiszolgálóhoz. Az alábbi parancsok létrehoznak egy kezdeti JavaScript-csomagot Androidhoz, és helyezik el az assets mappába.

    # create assets folder for the bundle
    mkdir android/app/scr/main/assets
    # build the bundle
    npx react-native bundle --platform android --dev true --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
    # enable ability for sim to access the localhost
    adb reverse tcp:8081 tcp:8081
    

    Ez a szkript az alkalmazás kezdeti verziójával lesz előre üzembe helyezve. Az üzembe helyezés után konfigurálja az emulátort vagy az eszközt a metrókiszolgáló eléréséhez a kiszolgáló IP-címének megadásával. Futtassa a következő parancsot az Android-alkalmazás létrehozásához és futtatásához:

    npx react-native run-android
    

    Az alkalmazásba való belépés után nyomja le CMD+M az (emulátort) vagy rázza meg az eszközt a fejlesztői beállítások feltöltéséhez, lépjenChange Bundle LocationSettings> a területre, és adja meg a metrókiszolgáló IP-címét az alapértelmezett porttal: . <metro-server-ip-address>:8081

  7. App.tsx A fájlban alkalmazzon bármilyen módosítást az oldalelrendezésre, mentse, és a módosítás automatikusan tükröződjön az iOS- és Android-alkalmazásokban is.

    Megjegyzés

    A fejlesztési környezet beállításának részletes útmutatója a hivatalos dokumentációban érhető el

Szükséges csomagok telepítése

A minta működéséhez a következő három csomagra van szüksége:

  1. leküldéses értesítések React Native iOS - Project GitHub

    Ez a csomag akkor jött létre, amikor a PushNotificationIOS a React Native magjából lett felosztva. A csomag natív módon implementálja az iOS leküldéses értesítéseit, és React Native felületet biztosít a hozzáféréshez. Futtassa a következő parancsot a csomag telepítéséhez:

    yarn add @react-native-community/push-notification-ios
    
  2. React Native leküldéses értesítések platformfüggetlen

    Ez a csomag platformfüggetlen módon valósítja meg a helyi és távoli értesítéseket iOS-en és Androidon. Futtassa a következő parancsot a csomag telepítéséhez:

    yarn add react-native-push-notification
    
  3. Eszközinformációs csomag A csomag információt nyújt egy futtatókörnyezetben lévő eszközről. Segítségével meghatározhat egy eszközazonosítót, amely a leküldéses értesítésre való regisztrációhoz használható. Futtassa a következő parancsot a csomag telepítéséhez:

    yarn add react-native-device-info
    

Platformfüggetlen összetevők implementálása

  1. Létrehozás és implementálás DemoNotificationHandler:

    import PushNotification from 'react-native-push-notification';
    
    class DemoNotificationHandler {
      private _onRegister: any;
      private _onNotification: any;
    
      onNotification(notification: any) {
        console.log('NotificationHandler:', notification);
    
        if (typeof this._onNotification === 'function') {
          this._onNotification(notification);
        }
      }
    
      onRegister(token: any) {
        console.log('NotificationHandler:', token);
    
        if (typeof this._onRegister === 'function') {
          this._onRegister(token);
        }
      }
    
      attachTokenReceived(handler: any) {
        this._onRegister = handler;
      }
    
      attachNotificationReceived(handler: any) {
        this._onNotification = handler;
      }
    }
    
    const handler = new DemoNotificationHandler();
    
    PushNotification.configure({
      onRegister: handler.onRegister.bind(handler),
      onNotification: handler.onNotification.bind(handler),
      permissions: {
        alert: true,
        badge: true,
        sound: true,
      },
      popInitialNotification: true,
      requestPermissions: true,
    });
    
    export default handler;
    
  2. Létrehozás és implementálás DemoNotificationService:

    import PushNotification from 'react-native-push-notification';
    import DemoNotificationHandler from './DemoNotificationHandler';
    
    export default class DemoNotificationService {
      constructor(onTokenReceived: any, onNotificationReceived: any) {
        DemoNotificationHandler.attachTokenReceived(onTokenReceived);
        DemoNotificationHandler.attachNotificationReceived(onNotificationReceived);
        PushNotification.getApplicationIconBadgeNumber(function(number: number) {
          if(number > 0) {
            PushNotification.setApplicationIconBadgeNumber(0);
          }
        });
      }
    
      checkPermissions(cbk: any) {
        return PushNotification.checkPermissions(cbk);
      }
    
      requestPermissions() {
        return PushNotification.requestPermissions();
      }
    
      cancelNotifications() {
        PushNotification.cancelLocalNotifications();
      }
    
      cancelAll() {
        PushNotification.cancelAllLocalNotifications();
      }
    
      abandonPermissions() {
        PushNotification.abandonPermissions();
      }
    }
    
  3. Létrehozás és implementálás DemoNotificationRegistrationService:

    export default class DemoNotificationService {
        constructor(
            readonly apiUrl: string,
            readonly apiKey: string) {
        }
    
    async registerAsync(request: any): Promise<Response> {
            const method = 'PUT';
            const registerApiUrl = `${this.apiUrl}/notifications/installations`;
            const result = await fetch(registerApiUrl, {
                method: method,
                headers: {
                    Accept: 'application/json',
                    'Content-Type': 'application/json',
                    'apiKey': this.apiKey
                },
                body: JSON.stringify(request)
            });
    
            this.validateResponse(registerApiUrl, method, request, result);
            return result;
        }
    
        async deregisterAsync(deviceId: string): Promise<Response> {
            const method = 'DELETE';
            const deregisterApiUrl = `${this.apiUrl}/notifications/installations/${deviceId}`;
            const result = await fetch(deregisterApiUrl, {
                method: method,
                headers: {
                    Accept: 'application/json',
                    'Content-Type': 'application/json',
                    'apiKey': this.apiKey
                }
            });
    
            this.validateResponse(deregisterApiUrl, method, null, result);
            return result;
        }
    
        private validateResponse(requestUrl: string, method: string, requestPayload: any, response: Response) {
            console.log(`Request: ${method} ${requestUrl} => ${JSON.stringify(requestPayload)}\nResponse: ${response.status}`);
            if (!response || response.status != 200) {
                throw `HTTP error ${response.status}: ${response.statusText}`;
            }
        }
    }
    
  4. Konfigurálja az alkalmazást. Nyissa meg package.json és adja hozzá a következő szkriptdefiníciót:

    "configure": "cp .app.config.tsx src/config/AppConfig.tsx"
    

    Ezután futtassa ezt a szkriptet, amely az alapértelmezett konfigurációt másolja a config mappába.

    yarn configure
    

    Az utolsó lépés az előző lépésben másolt konfigurációs fájl frissítése az API hozzáférési adataival. Adja meg apiKey és apiUrl paraméterek:

    module.exports = {
        appName: "PushDemo",
        env: "production",
        apiUrl: "https://<azure-push-notifications-api-url>/api/",
        apiKey: "<api-auth-key>",
    };
    

A platformfüggetlen felhasználói felület implementálása

  1. Oldalelrendezés definiálása

    <View style={styles.container}>
      {this.state.isBusy &&
        <ActivityIndicator></ActivityIndicator>
      }
      <View style={styles.button}>
        <Button title="Register" onPress={this.onRegisterButtonPress.bind(this)} disabled={this.state.isBusy} />
      </View>
      <View style={styles.button}>
        <Button title="Deregister" onPress={this.onDeregisterButtonPress.bind(this)} disabled={this.state.isBusy} />
      </View>
    </View>
    
  2. Stílusok alkalmazása

    const styles = StyleSheet.create({
      container: {
        flex: 1,
        alignItems: "center",
        justifyContent: 'flex-end',
        margin: 50,
      },
      button: {
        margin: 5,
        width: "100%",
      }
    });
    
  3. Az oldalösszetevő inicializálása

      state: IState;
      notificationService: DemoNotificationService;
      notificationRegistrationService: DemoNotificationRegistrationService;
      deviceId: string;
    
      constructor(props: any) {
        super(props);
        this.deviceId = DeviceInfo.getUniqueId();
        this.state = {
          status: "Push notifications registration status is unknown",
          registeredOS: "",
          registeredToken: "",
          isRegistered: false,
          isBusy: false,
        };
    
        this.notificationService = new DemoNotificationService(
          this.onTokenReceived.bind(this),
          this.onNotificationReceived.bind(this),
        );
    
        this.notificationRegistrationService = new DemoNotificationRegistrationService(
          Config.apiUrl,
          Config.apiKey,
        );
      }
    
  4. Kattintáskezelők definiálása gomb

      async onRegisterButtonPress() {
        if (!this.state.registeredToken || !this.state.registeredOS) {
          Alert.alert("The push notifications token wasn't received.");
          return;
        }
    
        let status: string = "Registering...";
        let isRegistered = this.state.isRegistered;
        try {
          this.setState({ isBusy: true, status });
          const pnPlatform = this.state.registeredOS == "ios" ? "apns" : "fcm";
          const pnToken = this.state.registeredToken;
          const request = {
            installationId: this.deviceId,
            platform: pnPlatform,
            pushChannel: pnToken,
            tags: []
          };
          const response = await this.notificationRegistrationService.registerAsync(request);
          status = `Registered for ${this.state.registeredOS} push notifications`;
          isRegistered = true;
        } catch (e) {
          status = `Registration failed: ${e}`;
        }
        finally {
          this.setState({ isBusy: false, status, isRegistered });
        }
      }
    
      async onDeregisterButtonPress() {
        if (!this.notificationService)
          return;
    
        let status: string = "Deregistering...";
        let isRegistered = this.state.isRegistered;
        try {
          this.setState({ isBusy: true, status });
          await this.notificationRegistrationService.deregisterAsync(this.deviceId);
          status = "Deregistered from push notifications";
          isRegistered = false;
        } catch (e) {
          status = `Deregistration failed: ${e}`;
        }
        finally {
          this.setState({ isBusy: false, status, isRegistered });
        }
      }
    
  5. Fogadott jogkivonat-regisztrációk és leküldéses értesítések kezelése

      onTokenReceived(token: any) {
        console.log(`Received a notification token on ${token.os}`);
        this.setState({ registeredToken: token.token, registeredOS: token.os, status: `The push notifications token has been received.` });
    
        if (this.state.isRegistered && this.state.registeredToken && this.state.registeredOS) {
          this.onRegisterButtonPress();
        }
      }
    
      onNotificationReceived(notification: any) {
        console.log(`Received a push notification on ${this.state.registeredOS}`);
        this.setState({ status: `Received a push notification...` });
    
        if (notification.data.message) {
          Alert.alert(AppConfig.appName, `${notification.data.action} action received`);
        }
      }
    };
    

A natív Android-projekt konfigurálása leküldéses értesítésekhez

Szükséges Android-csomagok konfigurálása

A csomag automatikusan csatolva lesz az alkalmazás létrehozásakor. A konfigurációs folyamat befejezéséhez alább talál néhány további lépést.

Android-jegyzék konfigurálása

Az "android/app/src/main/AndroidManifest.xml" lapon ellenőrizze a csomag nevét, az engedélyeket és a szükséges szolgáltatásokat. Győződjön meg arról, hogy regisztrált RNPushNotificationPublisher és RNPushNotificationBootEventReceiver fogadókat, és regisztrálta a RNPushNotificationListenerService szolgáltatást. Az értesítések metaadataival testre szabhatja a leküldéses értesítések megjelenését.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="YOUR_PACKAGE_NAME">

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.WAKE_LOCK" />
      <uses-permission android:name="android.permission.VIBRATE" />
      <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

      <application
        android:name=".MainApplication"
        android:label="@string/app_name"
        android:usesCleartextTraffic="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:allowBackup="false"
        android:theme="@style/AppTheme">

        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_channel_name"
                    android:value="PushDemo Channel"/>
        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_channel_description"
                    android:value="PushDemo Channel Description"/>
        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_foreground"
                    android:value="true"/>
        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_color"
                    android:resource="@android:color/white"/>

        <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" />
        <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <service
            android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <activity
          android:name=".MainActivity"
          android:label="@string/app_name"
          android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
          android:launchMode="singleTask"
          android:windowSoftInputMode="adjustResize">
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
        </activity>
        <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
      </application>

</manifest>

Google-szolgáltatások konfigurálása

Az "android/app/build.gradle" területen regisztrálja a Google Services szolgáltatást:

dependencies {
  ...
  implementation 'com.google.firebase:firebase-analytics:17.3.0'
  ...
}

apply plugin: 'com.google.gms.google-services'

Másolja az FCM beállítása során letöltött "google-services.json" fájlt az "android/app/" projektmappába.

Leküldéses értesítések kezelése Android rendszeren

Konfigurálta a meglévő RNPushNotificationListenerService szolgáltatást a bejövő Android leküldéses értesítések kezelésére. Ezt a szolgáltatást korábban regisztrálták az alkalmazásjegyzékben. Feldolgozza a bejövő értesítéseket, és a platformfüggetlen React Native részre űzi őket. Nincs szükség további lépésekre.

A natív iOS-projekt konfigurálása leküldéses értesítésekhez

Szükséges iOS-csomagok konfigurálása

A csomag automatikusan csatolva lesz az alkalmazás létrehozásakor. Mindössze annyit kell tennie, hogy telepíti a natív podokat:

npx pod-install

Az Info.plist és a Entitlements.plist konfigurálása

  1. Lépjen a "PushDemo/ios" mappába, és nyissa meg a "PushDemo.xcworkspace" munkaterületet, válassza ki a "PushDemo" felső projektet, és válassza az "Aláírási & képességek" lapot.

  2. Frissítse a csomagazonosítót, hogy megfeleljen a kiépítési profilban használt értéknek.

  3. Adjon hozzá két új képességet a - "+" gombbal:

    • A háttérmód képessége, és a Távoli értesítések jelölőnégyzet bejelölve.
    • Leküldéses értesítések képessége

Leküldéses értesítések kezelése iOS rendszeren

  1. Nyissa meg az "AppDelegate.h" fájlt, és adja hozzá a következő importálást:

    #import <UserNotifications/UNUserNotificationCenter.h>
    
  2. Frissítse az "AppDelegate" által támogatott protokollok listáját a következő hozzáadásával UNUserNotificationCenterDelegate:

    @interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate, UNUserNotificationCenterDelegate>
    
  3. Nyissa meg az AppDelegate.m fájlt, és konfigurálja az összes szükséges iOS-visszahívást:

    #import <UserNotifications/UserNotifications.h>
    #import <RNCPushNotificationIOS.h>
    
    ...
    
    // Required to register for notifications
    - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
    {
     [RNCPushNotificationIOS didRegisterUserNotificationSettings:notificationSettings];
    }
    
    // Required for the register event.
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
    {
     [RNCPushNotificationIOS didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
    }
    
    // Required for the notification event. You must call the completion handler after handling the remote notification.
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    {
      [RNCPushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
    }
    
    // Required for the registrationError event.
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
    {
     [RNCPushNotificationIOS didFailToRegisterForRemoteNotificationsWithError:error];
    }
    
    // IOS 10+ Required for localNotification event
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center
    didReceiveNotificationResponse:(UNNotificationResponse *)response
             withCompletionHandler:(void (^)(void))completionHandler
    {
      [RNCPushNotificationIOS didReceiveNotificationResponse:response];
      completionHandler();
    }
    
    // IOS 4-10 Required for the localNotification event.
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
    {
     [RNCPushNotificationIOS didReceiveLocalNotification:notification];
    }
    
    //Called when a notification is delivered to a foreground app.
    -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
    {
      completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
    }
    

A megoldás teszteléséhez

Mostantól tesztelheti az értesítések küldését a háttérszolgáltatáson keresztül.

Tesztértesítés küldése

  1. Nyisson meg egy új lapon Postman.

  2. A kérelem beállítása POST, és adja meg a következő címre:

    https://<app_name>.azurewebsites.net/api/notifications/requests
    
  3. Ha úgy döntött, hogy befejezi az ügyfelek hitelesítése API-kulcs használatával szakaszt , mindenképpen konfigurálja a kérésfejléceket úgy, hogy az tartalmazza az apikey értékét.

    Kulcs Value
    apikey <your_api_key>
  4. Válassza ki a törzs nyers beállítását, majd a formátumbeállítások listájában válassza a JSON lehetőséget, majd adjon meg néhány helyőrző JSON-tartalmat:

    {
        "text": "Message from Postman!",
        "action": "action_a"
    }
    
  5. Válassza a Kód gombot, amely az ablak jobb felső sarkában található Mentés gomb alatt található. A kérésnek az alábbi példához hasonlóan kell kinéznie a HTML-ben való megjelenítéskor (attól függően, hogy tartalmazott-e apikey fejlécet):

    POST /api/notifications/requests HTTP/1.1
    Host: https://<app_name>.azurewebsites.net
    apikey: <your_api_key>
    Content-Type: application/json
    
    {
        "text": "Message from backend service",
        "action": "action_a"
    }
    
  6. Futtassa a PushDemo alkalmazást az egyik vagy mindkét célplatformon (Android és iOS).

    Megjegyzés

    Ha Androidon teszteli, győződjön meg arról, hogy nem a Hibakeresésben fut, vagy ha az alkalmazást az alkalmazás futtatásával telepítették, kényszerítse be az alkalmazást, és indítsa újra a indítóból.

  7. A PushDemo alkalmazásban koppintson a Regisztráció gombra.

  8. A Postmanben zárja be a Kódrészletek létrehozása ablakot (ha még nem tette meg), majd kattintson a Küldés gombra.

  9. Ellenőrizze, hogy kap-e 200 OK-választ a Postmanben , és a riasztás megjelenik az alkalmazásban, amelyen az ActionA művelet érkezett.

  10. Zárja be a PushDemo alkalmazást, majd kattintson ismét a Küldés gombra a Postmanben.

  11. Ellenőrizze, hogy ismét 200 OK-választ kap-e a Postmanben . Ellenőrizze, hogy a megfelelő üzenettel jelenik-e meg egy értesítés a PushDemo alkalmazás értesítési területén.

  12. Koppintson az értesítésre annak megerősítéséhez, hogy megnyitja az alkalmazást, és megjeleníti a kapott ActionA művelet riasztását.

  13. A Postmanben módosítsa az előző kérelemtörzset úgy, hogy csendes értesítést küldjön, amely action_b a műveletértékaction_a helyett.

    {
        "action": "action_b",
        "silent": true
    }
    
  14. Ha az alkalmazás továbbra is nyitva van, kattintson a Küldés gombra a Postmanben.

  15. Ellenőrizze, hogy 200 OK-választ kap-e a Postmanben, és hogy a riasztás megjelenik-e az alkalmazásban, amely a kapott ActionA művelet helyett az ActionB-műveletet jeleníti meg.

  16. Zárja be a PushDemo alkalmazást, majd kattintson ismét a Küldés gombra a Postmanben.

  17. Ellenőrizze, hogy 200 OK-választ kap-e a Postmanben , és hogy a csendes értesítés nem jelenik-e meg az értesítési területen.

Hibaelhárítás

Nincs válasz a háttérszolgáltatástól

Helyi teszteléskor győződjön meg arról, hogy a háttérszolgáltatás fut, és a megfelelő portot használja.

Ha az Azure API-alkalmazáson tesztel, ellenőrizze, hogy a szolgáltatás fut-e, és üzembe lett-e helyezve, és hiba nélkül elindult-e.

Győződjön meg arról, hogy helyesen adta meg az alapcímet a Postmanben vagy a mobilalkalmazás konfigurációjában az ügyfélen keresztüli teszteléskor. Az alapcímnek indikatív módon vagy https://localhost:5001/ helyi teszteléskor kell lenniehttps://<api_name>.azurewebsites.net/.

Hibakeresési munkamenet indítása vagy leállítása után nem érkezik értesítés Androidon

Győződjön meg arról, hogy a hibakeresési munkamenet elindítása vagy leállítása után ismét regisztrál. A hibakereső új Firebase-jogkivonatot hoz létre. Az értesítési központ telepítését is frissíteni kell.

401-es állapotkód fogadása a háttérszolgáltatásból

Ellenőrizze, hogy az apikey-kérelem fejlécét állítja-e be, és ez az érték megegyezik a háttérszolgáltatáshoz konfigurált értékkel.

Ha ezt a hibát a helyi tesztelés során kapja, győződjön meg arról, hogy az ügyfélkonfigurálásban megadott kulcsérték megegyezik az API által használt Authentication:ApiKey felhasználóbeállítási értékkel.

Ha API-alkalmazással tesztel, győződjön meg arról, hogy az ügyfél konfigurációs fájljának kulcsértéke megegyezik az API-alkalmazásban használt Authentication:ApiKey alkalmazásbeállítással.

Megjegyzés

Ha ezt a beállítást a háttérszolgáltatás üzembe helyezése után hozta létre vagy módosította, a szolgáltatás érvénybe lépéséhez újra kell indítania a szolgáltatást.

Ha úgy döntött, hogy nem végzi el az ügyfelek hitelesítése API-kulcs használatával szakaszt , győződjön meg arról, hogy nem alkalmazta az Authorize attribútumot az NotificationsController osztályra.

404-es állapotkód fogadása a háttérszolgáltatásból

Ellenőrizze, hogy a végpont és a HTTP-kérelem metódusa helyes-e. A végpontoknak például a következőnek kell lenniük:

  • [PUT]https://<api_name>.azurewebsites.net/api/notifications/installations
  • [TÖRLÉS]https://<api_name>.azurewebsites.net/api/notifications/installations/<installation_id>
  • [POST]https://<api_name>.azurewebsites.net/api/notifications/requests

Vagy helyi tesztelés esetén:

  • [PUT]https://localhost:5001/api/notifications/installations
  • [TÖRLÉS]https://localhost:5001/api/notifications/installations/<installation_id>
  • [POST]https://localhost:5001/api/notifications/requests

Amikor megadja az alapcímet az ügyfélalkalmazásban, győződjön meg arról, hogy a végződése egy /. Az alapcímnek indikatív módon vagy https://localhost:5001/ helyi teszteléskor kell lenniehttps://<api_name>.azurewebsites.net/.

Nem lehet regisztrálni, és megjelenik egy értesítési központ hibaüzenete

Ellenőrizze, hogy a teszteszköz rendelkezik-e hálózati kapcsolattal. Ezután határozza meg a Http-válasz állapotkódját úgy, hogy beállít egy töréspontot a HttpResponseStatusCode tulajdonságértékének vizsgálatához.

Ha lehetséges, tekintse át az előző hibaelhárítási javaslatokat az állapotkód alapján.

Állítson be egy töréspontot azokra a sorokra, amelyek ezeket a konkrét állapotkódokat adják vissza a megfelelő API-hoz. Ezután próbálja meg meghívni a háttérszolgáltatást helyi hibakereséskor.

Ellenőrizze, hogy a háttérszolgáltatás a várt módon működik-e a Postmanen keresztül a megfelelő hasznos adatok használatával. Használja a szóban forgó platform ügyfélkódja által létrehozott tényleges hasznos adatokat.

Tekintse át a platformspecifikus konfigurációs szakaszokat, hogy biztosan ne maradjon le a lépésekről. Ellenőrizze, hogy a megfelelő értékek és token változók feloldása installation id folyamatban van-e a megfelelő platformon.

Nem sikerült feloldani az eszköz azonosítóját hibaüzenet jelenik meg

Tekintse át a platformspecifikus konfigurációs szakaszokat, hogy biztosan ne maradjon le a lépésekről.

További lépések

Most már rendelkeznie kell egy alapszintű React Native alkalmazással, amely egy háttérszolgáltatáson keresztül csatlakozik egy értesítési központhoz, és értesítéseket küldhet és fogadhat.

Az oktatóanyagban használt példát valószínűleg a saját forgatókönyvéhez kell igazítania. Robusztusabb hibakezelés, újrapróbálkozási logika és naplózás megvalósítása is ajánlott.

A Visual Studio App Center gyorsan beépíthető mobilalkalmazásokba , amelyek elemzést és diagnosztikát biztosítanak a hibaelhárításhoz.