Sdílet prostřednictvím


Oznámení uživatelů

Architektura Oznámení uživatelů umožňuje doručování a zpracování místních a vzdálených oznámení. Pomocí této architektury může aplikace nebo rozšíření aplikace naplánovat doručování místních oznámení zadáním sady podmínek, jako je umístění nebo čas dne.

Kromě toho může aplikace nebo rozšíření přijímat (a potenciálně upravovat) místní i vzdálená oznámení, která se doručují do zařízení uživatele.

Architektura uživatelského rozhraní pro oznámení uživatelů umožňuje aplikaci nebo rozšíření aplikace přizpůsobit vzhled místních i vzdálených oznámení, když se uživateli zobrazí.

Tato architektura poskytuje následující způsoby, jak může aplikace poskytovat oznámení uživateli:

  • Vizuální upozornění: kde se oznámení v horní části obrazovky zobrazí jako banner.
  • Zvuk a vibrace: může být přidruženo k oznámení.
  • Odznáček na ikoně aplikace: kde ikona aplikace zobrazuje odznáček, který ukazuje, že je k dispozici nový obsah, například počet nepřečtených e-mailových zpráv.

Kromě toho v závislosti na aktuálním kontextu uživatele existují různé způsoby, jak se zobrazí oznámení:

  • Pokud je zařízení odemknuté, oznámení se zobrazí v horní části obrazovky jako banner.
  • Pokud je zařízení uzamčené, oznámení se zobrazí na zamykací obrazovce uživatele.
  • Pokud uživatel zmeškal oznámení, může otevřít Centrum oznámení a zobrazit všechna dostupná a čekající oznámení tam.

Aplikace může odesílat dva typy oznámení uživatelů:

  • Místní oznámení: Tyto oznámení posílají aplikace nainstalované místně na zařízení uživatelů.
  • Vzdálená oznámení: odesílají se ze vzdáleného serveru a buď se uživateli zobrazí, nebo aktivují aktualizaci obsahu aplikace na pozadí.

Informace o místních oznámeních

Místní oznámení, která může aplikace odeslat, mají následující funkce a atributy:

  • Posílají se aplikacemi, které jsou místní na zařízení uživatele.
  • Je možné je nakonfigurovat tak, aby používaly aktivační události založené na čase nebo umístění.
  • Aplikace naplánuje oznámení se zařízením uživatele a zobrazí se při splnění podmínky triggeru.
  • Když uživatel komunikuje s oznámením, aplikace obdrží zpětné volání.

Mezi příklady místních oznámení patří:

  • Upozornění kalendáře
  • Připomínací upozornění
  • Spouštěče aktivované podle polohy

Další informace najdete v dokumentaci k oznámením uživatelů společnosti Apple.

Informace o vzdálených oznámeních

Vzdálená oznámení, která může aplikace odesílat, mají následující funkce a atributy:

  • Aplikace má komponentu na straně serveru, se kterou komunikuje.
  • Služba Apple Push Notification Service (APNs) se používá k přenosu vzdálených oznámení na zařízení uživatele z cloudových serverů vývojářů s co nejlepší snahou o doručení.
  • Když aplikace obdrží vzdálené oznámení, zobrazí se uživateli.
  • Když uživatel s oznámením komunikuje, aplikace obdrží zpětné volání.

Mezi příklady vzdálených oznámení patří:

  • Upozornění na zprávy
  • Sportovní aktualizace.
  • Zasílání rychlých zpráv.

Pro aplikaci jsou k dispozici dva typy vzdálených oznámení:

  • Zobrazeno uživateli: Tyto jsou zobrazeny uživateli na zařízení.
  • Tiché aktualizace: Poskytují mechanismus pro aktualizaci obsahu aplikace na pozadí. Po přijetí tiché aktualizace se aplikace může spojit se vzdálenými servery a stáhnout nejnovější obsah.

Další informace najdete v dokumentaci k oznámením uživatelů společnosti Apple.

UIApplication API

Pomocí UIApplication je možné zaregistrovat oznámení v systému a naplánovat, jak se má oznámení aktivovat – buď podle času, nebo místa (původní rozhraní API poskytované applem).

Existuje však několik problémů, se kterými se vývojář může setkat při práci s existujícím oznámením, které poskytuje UIApplication:

  • Pro místní nebo vzdálená oznámení se vyžadují různá zpětná volání, která můžou vést k duplikaci kódu.
  • Aplikace má omezenou kontrolu nad oznámením po jeho naplánování v systému.
  • Na všech existujících platformách Společnosti Apple existují různé úrovně podpory.

O rozhraní Oznámení uživatelů

Pro zlepšení prostředí s oznámeními společnost Apple zavedla architekturu Oznámení uživatelů, která nahrazuje stávající metodu UIApplication uvedenou výše.

Architektura Oznámení uživatelů poskytuje následující:

  • Známé rozhraní API, které zahrnuje paritu funkcí s předchozími metodami, což usnadňuje portování kódu z existující architektury.
  • Obsahuje rozšířenou sadu možností obsahu, která uživateli umožňuje odesílat bohatší oznámení.
  • Místní i vzdálená oznámení je možné zpracovat stejným kódem a zpětnými voláními.
  • Zjednodušuje proces zpracování zpětných volání odesílaných do aplikace, když uživatel pracuje s oznámením.
  • Vylepšená správa čekajících i doručených oznámení, včetně možnosti odebrat nebo aktualizovat oznámení.
  • Přidá možnost prezentace oznámení v aplikaci.
  • Přidá možnost plánovat a zpracovávat oznámení z rozšíření aplikací.
  • Přidá nový bod rozšíření pro samotná oznámení.

Architektura Oznámení uživatelů poskytuje jednotné rozhraní API pro oznámení napříč několika platformami, které Apple podporuje, včetně:

  • iOS: Úplná podpora pro správu a plánování oznámení
  • tvOS: Přidá možnost označit ikonu aplikace pro lokální a vzdálená oznámení.
  • Mac Catalyst: Plná podpora pro správu a plánování oznámení.
  • macOS: Úplná podpora správy a plánování oznámení

Další informace najdete v dokumentaci společnosti Apple k uživatelským oznámením a uživatelskému rozhraní uživatelských oznámení.

Příprava na doručení oznámení

Aby aplikace mohl posílat oznámení uživateli, musí být aplikace zaregistrovaná v systému, a protože oznámení uživatele přeruší, musí aplikace před odesláním explicitně požádat o oprávnění.

Existují tři různé úrovně žádostí o oznámení, které může uživatel schválit pro aplikaci:

  • Banner se zobrazí.
  • Zvuková upozornění.
  • Označení ikony aplikace

Kromě toho musí být tyto úrovně schválení požadovány a nastaveny pro místní i vzdálená oznámení.

Po spuštění aplikace by se mělo požadovat oprávnění k oznámení přidáním následujícího kódu do FinishedLaunching metody a nastavením požadovaného AppDelegate typu oznámení (UNAuthorizationOptions):

using UserNotifications;

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
    // Request notification permissions from the user
    UNUserNotificationCenter.Current.RequestAuthorization (UNAuthorizationOptions.Alert, (approved, error) => {
        // Handle approval (or disapproval)
    });

    return true;
}

V systému macOS to uděláte v implementaci DidFinishLaunching :

using UserNotifications;

public override void DidFinishLaunching (NSNotification notification)
{
    // Request notification permissions from the user
    UNUserNotificationCenter.Current.RequestAuthorization (UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound, (approved, error) => {
        // Handle approval (or disapproval)
    });
}

Poznámka:

Aplikace macOS a Mac Catalyst musí být podepsané, aby se dialogové okno oprávnění zobrazilo, i když se sestavuje místně v režimu ladění. Nastavte vlastnost EnableCodeSigning v souboru projektu na true, abyste zajistili, že aplikace bude podepsána.

Kromě toho může uživatel kdykoli změnit oprávnění oznámení pro aplikaci pomocí aplikace Nastavení na zařízení. Aplikace by měla před předložením oznámení zkontrolovat požadovaná oprávnění uživatele k oznámení pomocí následujícího kódu:

// Get current notification settings
UNUserNotificationCenter.Current.GetNotificationSettings ((settings) => {
    var alertsAllowed = (settings.AlertSetting == UNNotificationSetting.Enabled);
});

Povolení oznámení na pozadí

Aby aplikace mohla přijímat oznámení na pozadí, musí být pro ni povolen režim oznámení na pozadí pro vzdálená oznámení.

To se provádí přidáním remote-notifications položky do UIBackgroundModes pole v souboru Info.plist projektu, například takto:

<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>

Konfigurace vzdáleného prostředí oznámení

Vývojář musí informovat operační systém, v jakém prostředí se push notifikace spouští, a to buď jako development nebo production. Pokud tyto informace neposkytnete, aplikace se při odeslání do App Storu zamítne s oznámením podobným následujícímu:

Chybějící nárok na nabízená oznámení – Vaše aplikace obsahuje rozhraní API pro službu nabízených oznámení společnosti Apple, ale aps-environment v podpisu aplikace chybí oprávnění.

Pokud chcete poskytnout požadovaný nárok, postupujte takto:

  1. Otevřete soubor projektu v textovém editoru podle vašeho výběru.

  2. Zadejte dvě CustomEntitlements položky, jako je tato:

    <ItemGroup>
        <CustomEntitlements Include="aps-environment" Type="String" Value="development" Condition="'$(Configuration)' != 'Release'" />
        <CustomEntitlements Include="aps-environment" Type="String" Value="production" Condition="'$(Configuration)' == 'Release'" />
    </ItemGroup>
    

    Poznámka: Pokud používáte jinou konfiguraci než Release k publikování do App Storu, aktualizujte podmínky odpovídajícím způsobem.

Poznámka:

Lze aps-environment také nastavit v souboru Entitlements.plist, což je historicky běžný postup. Výhodou používání souboru projektu je, že je snazší automaticky použít správnou hodnotu pro oprávnění, development nebo production, v závislosti na konfiguraci sestavení.

Zajišťování

Oprávnění aps-environment z předchozí části vyžaduje použití konfiguračního profilu se schopností Push Notifications.

  1. Přejděte na část Identifikátory webu Apple Developer :

    Oddíl Identifikátory

  2. Přidání nového identifikátoru (registrace nového identifikátoru):

    Registrace nového identifikátoru

  3. Vyberte typ Aplikace:

    Vyberte typ Aplikace.

  4. Zadejte identifikátor sady a popis nového identifikátoru aplikace:

    Registrace ID aplikace

  5. Push Notifications Povolte tuto funkci:

    Povolená funkce Push notifikací

  6. Kliknutím na tlačítko Register uložíte nový identifikátor aplikace.

Dalším krokem je vytvoření zřizovacího profilu pro nový identifikátor aplikace:

  1. Přejděte do části Profily na webu Apple Developer :

    Oddíl Profily

  2. Přidejte nový profil pro vývoj aplikací pro iOS:

    Registrace nového zřizovacího profilu

  3. Vyberte ID aplikace, které jsme právě vytvořili:

    Výběr ID aplikace

  4. Vyberte všechny certifikáty, které jsou součástí tohoto zřizovacího profilu (pokud ještě žádný certifikát nebyl vytvořen, musí být vytvořen nový certifikát):

    Výběr certifikátů

  5. Vyberte všechna zařízení, která jsou součástí tohoto zřizovacího profilu (aplikace se dá nainstalovat jenom na tato zařízení).

    Výběr zařízení

  6. Zvolte název zřizovacího profilu a zkontrolujte ho:

    Přezkoumat a pojmenovat

  7. Vygenerujte a stáhněte nový zřizovací profil.

    Generovat

  8. Otevřete stažený soubor zřizovacího profilu v Xcode (poklikáním na něj ve Finderu) ho nainstalujte do systému.

  9. Nakonfigurujte projekt tak, aby používal nově vytvořený zřizovací profil nastavením CodesignProvision vlastnosti na název zřizovacího profilu z kroku 6:

    <PropertyGroup>
        <CodesignProvision>User Notifications Profile</CodesignProvision>
    </PropertyGroup>
    

Poznámka:

Pokud má aplikace nějaká rozšíření aplikací, která zpracovávají oznámení, musí se tento proces opakovat pro každý odpovídající projekt rozšíření aplikace – každý z nich musí mít svůj vlastní identifikátor aplikace a profil zřizování.

Registrace vzdálených oznámení

Pokud aplikace bude odesílat a přijímat vzdálená oznámení, bude stále muset provést registraci tokenů pomocí existujícího rozhraní UIApplication API. Tato registrace vyžaduje, aby zařízení mělo živé síťové připojení pro přístup k sítím APN, což vygeneruje potřebný token, který se odešle do aplikace. Aplikace pak musí tento token předat aplikaci na straně serveru vývojáře, aby se zaregistrovala pro vzdálená oznámení:

Přehled registrace tokenů

K inicializaci požadované registrace použijte následující kód:

UIApplication.SharedApplication.RegisterForRemoteNotifications ();

Token, který se odešle do aplikace na straně serveru vývojáře, bude potřeba zahrnout jako součást datové části oznámení, která se odesílají ze serveru do APN při odesílání vzdáleného oznámení:

Token zahrnutý jako součást datové části oznámení

Token funguje jako klíč, který spojuje oznámení a aplikaci použitou k otevření oznámení nebo odpovídání na ně.

Další informace najdete v dokumentaci k oznámením uživatelů společnosti Apple.

Doručení oznámení

Když je aplikace plně zaregistrovaná a požadovaná oprávnění požadovaná uživatelem a udělená uživateli, je teď připravená odesílat a přijímat oznámení.

Poskytování obsahu oznámení

Všechna oznámení obsahují nadpis i podnadpis , které se vždy zobrazí s textem obsahu oznámení. K obsahu oznámení je také možné přidat přílohy médií .

K vytvoření obsahu místního oznámení použijte následující kód:

var content = new UNMutableNotificationContent();
content.Title = "Notification Title";
content.Subtitle = "Notification Subtitle";
content.Body = "This is the message body of the notification.";
content.Badge = 1;

U vzdálených oznámení je proces podobný:

{
    "aps":{
        "alert":{
            "title":"Notification Title",
            "subtitle":"Notification Subtitle",
            "body":"This is the message body of the notification."
        },
        "badge":1
    }
}

Plánování při odeslání oznámení

Když je vytvořený obsah oznámení, musí aplikace naplánovat, kdy se oznámení uživateli zobrazí nastavením triggeru. Existují čtyři různé typy triggerů:

  • Push oznámení – Používá se výhradně s dálkovými oznámeními a aktivuje se, když APNs odešle balíček oznámení do aplikace spuštěné na zařízení.
  • Časový interval – Umožňuje naplánovat oznámení v zařízení z časového intervalu, který začíná od tohoto okamžiku a končí v budoucnu. Například:
    var trigger = UNTimeIntervalNotificationTrigger.CreateTrigger (5, false);
    
  • Datum kalendáře – Umožňuje naplánování místních oznámení pro konkrétní datum a čas.
  • Založené na poloze – Umožňuje naplánování místních oznámení při vstupu nebo opuštění konkrétní geografické polohy nebo je v dané blízkosti libovolného signálu Bluetooth.

Jakmile je místní oznámení připravené, musí aplikace volat UNUserNotificationCenter.AddNotificationRequest a naplánovat jeho zobrazení uživateli. U vzdálených oznámení odešle aplikace na straně serveru datovou část oznámení do služby APN, která pak paket odešle do zařízení uživatele.

Spojení všech částí dohromady může vypadat jako vzorek místního oznámení:

using UserNotifications;

public void SendLocalNotification ()
{
    var content = new UNMutableNotificationContent ();
    content.Title = "Notification Title";
    content.Subtitle = "Notification Subtitle";
    content.Body = "This is the message body of the notification.";
    content.Badge = 1;

    var trigger =  UNTimeIntervalNotificationTrigger.CreateTrigger (5, false);

    var requestId = "sampleRequest";
    var request = UNNotificationRequest.FromIdentifier (requestId, content, trigger);

    UNUserNotificationCenter.Current.AddNotificationRequest (request, (err) => {
        if (err is not null) {
            // Do something with error
        }
    });
}

Aktivace vzdáleného oznámení

Během vývoje pro testování můžete aktivovat vzdálené oznámení několika způsoby:

Po vydání aplikace se vzdálená oznámení obvykle aktivují z aplikací na straně serveru.

Zpracování oznámení aplikací na popředí

Aplikace může zpracovávat oznámení jinak, když je v popředí a aktivuje se oznámení. Poskytnutím UNUserNotificationCenterDelegate a implementací metody WillPresentNotification může aplikace převzít odpovědnost za zobrazení oznámení. Například:

using System;
using UserNotifications;

public class UserNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
    #region Constructors
    public UserNotificationCenterDelegate ()
    {
    }
    #endregion

    #region Override Methods
    public override void WillPresentNotification (UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
    {
        // Do something with the notification
        Console.WriteLine ("Active notification: {0}", notification);

        // Tell system to display the notification anyway or use
        // `None` to say we have handled the display locally.
        completionHandler (UNNotificationPresentationOptions.Alert);
    }
    #endregion
}

Tento kód jednoduše zapisuje obsah UNNotification do výstupu aplikace a žádá systém, aby zobrazil standardní výstrahu pro oznámení.

Pokud aplikace chce zobrazit oznámení sama, když je v popředí, aniž by použila výchozí nastavení systému, předejte obslužné rutině dokončení hodnotu None. Příklad:

completionHandler (UNNotificationPresentationOptions.None);

S tímto kódem AppDelegate.cs otevřete soubor pro úpravy a změňte metodu FinishedLaunching tak, aby vypadala takto:

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
    // Request notification permissions from the user
    UNUserNotificationCenter.Current.RequestAuthorization (UNAuthorizationOptions.Alert, (approved, err) => {
        // Handle approval
    });

    // Watch for notifications while the app is active
    UNUserNotificationCenter.Current.Delegate = new UserNotificationCenterDelegate ();

    return true;
}

Tento kód připojuje výše uvedeného vlastního delegáta UNUserNotificationCenterDelegate k aktuálnímu UNUserNotificationCenter, aby aplikace mohla zpracovat oznámení, když je aktivní a v popředí.

Správa oznámení

Správa oznámení poskytuje přístup k čekajícími i doručenými oznámeními a přidává možnost odebrat, aktualizovat nebo zvýšit úroveň těchto oznámení.

Důležitou součástí správy oznámení je identifikátor požadavku , který byl přiřazen k oznámení při jeho vytvoření a naplánování v systému. U vzdálených oznámení je toto přiřazeno prostřednictvím pole apps-collapse-id v hlavičce požadavku HTTP.

Identifikátor požadavku slouží k výběru oznámení, nad kterými chce aplikace provádět správu těchto oznámení.

Odstraňování oznámení

Pokud chcete ze systému odebrat čekající oznámení, použijte následující kód:

var requests = new string [] { "sampleRequest" };
UNUserNotificationCenter.Current.RemovePendingNotificationRequests (requests);

Pokud chcete odebrat již doručené oznámení, použijte následující kód:

var requests = new string [] { "sampleRequest" };
UNUserNotificationCenter.Current.RemoveDeliveredNotifications (requests);

Aktualizace existujícího oznámení

Pokud chcete aktualizovat existující oznámení, jednoduše vytvořte nové oznámení s požadovanými parametry upravenými (například novým časem triggeru) a přidejte ho do systému se stejným identifikátorem požadavku jako oznámení, které je potřeba upravit. Příklad:

using UserNotifications;

// Rebuild notification
var content = new UNMutableNotificationContent ();
content.Title = "Notification Title";
content.Subtitle = "Notification Subtitle";
content.Body = "This is the message body of the notification.";
content.Badge = 1;

// New trigger time
var trigger = UNTimeIntervalNotificationTrigger.CreateTrigger (10, false);

// Id of notification to be updated
var requestId = "sampleRequest";
var request = UNNotificationRequest.FromIdentifier (requestId, content, trigger);

// Add to system to modify existing Notification
UNUserNotificationCenter.Current.AddNotificationRequest (request, (err) => {
    if (err != null) {
        // Do something with error...
    }
});

U oznámení, která už byla doručena, se stávající oznámení aktualizuje a zvýší na začátek seznamu na domovské a zamykací obrazovce a v Centru oznámení, pokud ho uživatel už přečetl.

Práce na akcích oznámení

Oznámení doručovaná uživateli nejsou statická a poskytují několik způsobů, jak s nimi uživatel může pracovat (od integrovaných po vlastní akce).

Existují tři typy akcí, na které může aplikace reagovat:

  • Výchozí akce – Když uživatel klepne na oznámení, otevře aplikaci a zobrazí podrobnosti daného oznámení.
  • Vlastní akce – Tyto akce poskytují uživateli rychlý způsob, jak provést vlastní úlohu přímo z oznámení, aniž by bylo nutné aplikaci spustit. Dají se zobrazit jako seznam tlačítek s přizpůsobitelnými názvy nebo textovým vstupním polem, které může běžet buď na pozadí (kde má aplikace malou dobu pro splnění požadavku) nebo popředí (kde se aplikace spustí v popředí, aby žádost splnila).
  • Akce Zavřít – Tato akce se odešle do aplikace, když uživatel zavře dané oznámení.

Vytvoření vlastních akcí

Pokud chcete vytvořit a zaregistrovat vlastní akci v systému, použijte následující kód:

// Create action
var actionId = "reply";
var title = "Reply";
var action = UNNotificationAction.FromIdentifier (actionId, title, UNNotificationActionOptions.None);

// Create category
var categoryId = "message";
var actions = new UNNotificationAction [] { action };
var intentIds = new string [] { };
var categoryOptions = new UNNotificationCategoryOptions [] { };
var category = UNNotificationCategory.FromIdentifier (categoryId, actions, intentIds, UNNotificationCategoryOptions.None);
    
// Register category
var categories = new UNNotificationCategory [] { category };
UNUserNotificationCenter.Current.SetNotificationCategories (new NSSet<UNNotificationCategory>(categories)); 

Při vytváření nové akce UNNotificationAction je přiřazen jedinečný identifikátor a název, který se zobrazí na tlačítku. Ve výchozím nastavení se akce vytvoří jako akce na pozadí, ale dají se zadat možnosti pro úpravu chování akce (například nastavení akce na popředí).

Každá z vytvořených akcí musí být přidružená k kategorii. Při vytváření nové unNotificationCategory je přiřazen jedinečný identifikátor, seznam akcí, které může provést, seznam identifikátorů záměru, který poskytuje další informace o záměru akcí v kategorii a některé možnosti řízení chování kategorie.

Nakonec jsou všechny kategorie registrovány v systému pomocí SetNotificationCategories metoda.

Prezentace vlastních akcí

Po vytvoření a registraci sady vlastních akcí a kategorií v systému je možné je prezentovat z místních nebo vzdálených oznámení.

U vzdálených oznámení nastavte datovou category část vzdáleného oznámení, která odpovídá jedné z výše vytvořených kategorií. Například:

{
    aps: {
        alert:"Hello world!",
        category:"message"
    }
}

U místních oznámení nastavte CategoryIdentifier vlastnost objektu UNMutableNotificationContent . Například:

var content = new UNMutableNotificationContent ();
content.Title = "Notification Title";
content.Subtitle = "Notification Subtitle";
content.Body = "This is the message body of the notification.";
content.Badge = 1;
content.CategoryIdentifier = "message";

Tento identifikátor musí znovu odpovídat jedné z výše vytvořených kategorií.

Zpracování akcí odmítnutí

Jak je uvedeno výše, akce zamítnutí může být odeslána do aplikace, když uživatel zavře oznámení. Vzhledem k tomu, že se nejedná o standardní akci, bude potřeba nastavit možnost při vytvoření kategorie. Například:

var categoryId = "message";
var actions = new UNNotificationAction [] { action };
var intentIds = new string [] { };
var categoryOptions = new UNNotificationCategoryOptions [] { };
var category = UNNotificationCategory.FromIdentifier (categoryId, actions, intentIds, UNNotificationCategoryOptions.CustomDismissAction);

Zpracování odpovědí na akce

Když uživatel pracuje s vlastními akcemi a kategoriemi, které byly vytvořeny výše, musí aplikace splnit požadovaný úkol. To se provádí tím, že poskytujete [UNUserNotificationCenterDelegate][unnsernotificationcenterdelegate] a implementujete metodu DidReceiveNotificationResponse. Například:

using System;
using UserNotifications;

namespace MonkeyNotification
{
    public class UserNotificationCenterDelegate : UNUserNotificationCenterDelegate
    {
        ...

        #region Override methods
        public override void DidReceiveNotificationResponse (UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
        {
            // Take action based on Action ID
            switch (response.ActionIdentifier) {
            case "reply":
                // Do something
                break;
            default:
                // Take action based on identifier
                if (response.IsDefaultAction) {
                    // Handle default action...
                } else if (response.IsDismissAction) {
                    // Handle dismiss action
                }
                break;
            }

            // Inform caller it has been handled
            completionHandler();
        }
        #endregion
    }
}

Předaná třída UNNotificationResponseActionIdentifier vlastnost, která může být buď výchozí akcí, nebo akce zavřít. Slouží response.Notification.Request.Identifier k testování pro všechny vlastní akce.

Vlastnost UserText obsahuje hodnotu libovolného textového vstupu uživatele. Vlastnost Notification obsahuje původní oznámení, které obsahuje požadavek s obsahem triggeru a oznámení. Aplikace se může rozhodnout, jestli se jedná o místní nebo vzdálené oznámení na základě typu triggeru.

Práce s rozšířeními Služby oznámení

Při práci se vzdálenými oznámeními poskytuje rozšíření služby oznámení způsob, jak povolit komplexní šifrování v datové části oznámení. Rozšíření Služby oznámení je rozšíření bez uživatelského rozhraní, které běží na pozadí s hlavním účelem rozšíření nebo nahrazení viditelného obsahu oznámení před jeho zobrazením uživateli.

Přehled rozšíření Služby oznámení

Rozšíření služby Notification Service jsou určená k rychlému spuštění a mají jen krátkou dobu, kterou má systém spustit. V případě, že rozšíření Notification Service nedokončí svou úlohu v přiděleném čase, bude volána náhradní metoda. Pokud se náhradní verze nezdaří, zobrazí se uživateli původní obsah oznámení.

Mezi potenciální využití rozšíření Služby oznámení patří:

  • Poskytuje kompletní šifrování vzdáleného obsahu oznámení.
  • Přidáním příloh do vzdálených oznámení je můžete rozšířit.

Implementace rozšíření Notification Service

Pokud chcete v aplikaci implementovat rozšíření Služby oznámení, postupujte takto:

  1. Vytvořte novou složku pro projekt rozšíření vedle složky hlavního projektu. Následující pokyny předpokládají, že nová složka má název MyNotificationServiceExtension.

  2. Otevřete terminál a spusťte:

    dotnet new ios-notification-service-extension
    
  3. Otevřete soubor projektu hlavního projektu a přidejte:

    <ItemGroup>
        <ProjectReference Include="..\MyNotificationServiceExtension\MyNotificationServiceExtension.csproj">
            <IsAppExtension>true</IsAppExtension>
        </ProjectReference>
    </ItemGroup>
    
  4. Teď sestavte hlavní projekt a projekt rozšíření se také sestaví a zahrne do konečné sady aplikací.

Důležité

Vzhledem ke změnám způsobu, jakým interakce mezi Macem a všemi připojenými zařízeními zpracovává Mac, není v současné době možné ladit rozšíření aplikace pomocí ladicího programu. Podívejte se také na https://github.com/xamarin/xamarin-macios/issues/19484 pro další informace o up-to-date.

To znamená, že nejspolehlivějším způsobem ladění rozšíření aplikace je bohužel přidání příkazů Console.WriteLine do kódu a následné vyhledání těchto příkazů v protokolu zařízení.

Důležité

Identifikátor balíčku (ApplicationId) pro rozšíření služby musí být předponou identifikátoru balíčku hlavní aplikace. Pokud například hlavní aplikace měla identifikátor balíčku com.xamarin.monkeynotify, rozšíření služby by mělo mít identifikátor balíčku com.xamarin.monkeynotify.monkeynotifyserviceextension.

V rozšíření Notification Service existuje jedna hlavní třída, která bude muset upravit tak, aby poskytovala požadované funkce. Například:

using System;

using Foundation;
using UIKit;
using UserNotifications;

namespace MonkeyChatServiceExtension
{
    [Register ("NotificationService")]
    public class NotificationService : UNNotificationServiceExtension
    {
        protected NotificationServiceClass (NativeHandle handle) : base (handle)
        {
            // Note: this .ctor should not contain any initialization logic,
            // it only exists so that the OS can instantiate an instance of this class.
        }

        public override void DidReceiveNotificationRequest (UNNotificationRequest request, Action<UNNotificationContent> contentHandler)
        {
            // Called when the OS receives a notification that can be muteated

            // Create a mutable copy of the notification
            var mutableRequest = (UNMutableNotificationContent) request.Content.MutableCopy ();

            // Modify the notification content here...
            mutableRequest.Title = $"[modified] {mutableRequest.Title}";

            // Call the contentHandler callback to let the OS know about the modified notification.
            contentHandler (mutableRequest);
        }

        public override void TimeWillExpire ()
        {
            // Called just before the extension will be terminated by the system.
            // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
        }
    }
}

První metoda DidReceiveNotificationRequest, bude předán identifikátor oznámení a obsah oznámení prostřednictvím objektu request . contentHandler bude potřeba zavolat, aby se uživateli zobrazilo oznámení.

Druhá metoda TimeWillExpire bude volána těsně před tím, než rozšíření Notification Service bude muset zpracovat požadavek. Pokud se rozšíření Notification Service nepodaří volat contentHandler v přiděleném čase, zobrazí se uživateli původní obsah.

Aktivace rozšíření služby oznámení

Když je rozšíření Notification Service vytvořené a doručené s aplikací, může se aktivovat úpravou datové části vzdáleného oznámení odeslaného do zařízení. Například:

{
    aps : {
        alert : "New Message Available",
        mutable-content: 1
    },
    encrypted-content : "#theencryptedcontent"
}

Nový mutable-content klíč určuje, že rozšíření Služby oznámení bude nutné spustit, aby bylo možné aktualizovat obsah vzdáleného oznámení. Klíč encrypted-content obsahuje šifrovaná data, která rozšíření Notification Service může před prezentováním uživateli dešifrovat.

Podívejte se na následující příklad rozšíření Notification Service:

using UserNotification;

namespace myApp {
    public class NotificationService : UNNotificationServiceExtension {
    
        public override void DidReceiveNotificationRequest(UNNotificationRequest request, contentHandler) {
            // Decrypt payload
            var decryptedBody = Decrypt(Request.Content.UserInfo["encrypted-content"]);
            
            // Modify notification body
            var newContent = new UNMutableNotificationContent();
            newContent.Body = decryptedBody;
            
            // Present to user
            contentHandler(newContent);
        }
        
        public override void TimeWillExpire() {
            // Handle out-of-time fallback event
        }
        
    }
}

Tento kód dešifruje šifrovaný obsah z encrypted-content klíče, vytvoří novou UNMutableNotificationContent, nastaví vlastnost Body na dešifrovaný obsah a použije contentHandler k prezentaci oznámení uživateli.

Viz také