Sdílet prostřednictvím


Rozšířená oznámení uživatelů v Xamarin.iOS

Architektura oznámení uživatelů pro iOS 10 nově 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.

Informace o oznámeních uživatelů

Jak je uvedeno výše, nová 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í s iOSem uživatele.

Nová 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í při jejich prezentování uživateli.

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

  • Vizuální výstrahy – kde se oznámení v horní části obrazovky zobrazí jako banner.
  • Zvuk a vibrace – může být přidruženo k oznámení.
  • Ikona aplikace Badging – 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 Xamarin.iOS má dva typy oznámení uživatelů, které může odesílat:

  • Místní oznámení – Tyto zprávy posílají aplikace nainstalované místně na zařízení uživatelů.
  • Vzdálená oznámení – Odesílají se ze vzdáleného serveru a zobrazují se uživateli nebo aktivují aktualizaci obsahu aplikace na pozadí.

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

Místní oznámení, která může aplikace pro iOS odesílat, 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
  • Upozornění připomenutí
  • Aktivační události pro zjišťování polohy

Další informace najdete v dokumentaci k programování místních a vzdálených oznámení společnosti Apple.

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

Vzdálená oznámení, která může aplikace pro iOS 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 doručování vzdálených oznámení na zařízení uživatele z cloudových serverů vývojáře.
  • 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 pro iOS jsou k dispozici dva typy vzdálených oznámení:

  • Přístup uživatelů – Zobrazí se uživateli na zařízení.
  • Tiché Aktualizace – poskytují mechanismus pro aktualizaci obsahu aplikace pro iOS 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 programování místních a vzdálených oznámení společnosti Apple.

Informace o existujícím rozhraní API pro oznámení

Před iOSem 10 by aplikace pro iOS použila UIApplication k registraci oznámení v systému a k naplánování toho, jak se má oznámení aktivovat (buď podle času, nebo místa).

Při práci s existujícím rozhraním API pro oznámení může nastat několik problémů:

  • Pro místní nebo vzdálená oznámení byla vyžadována jiná zpětná volání, která by mohla vést k duplikaci kódu.
  • Aplikace měla omezenou kontrolu nad oznámením po naplánování v systému.
  • Ve všech existujících platformách Společnosti Apple došlo k různým úrovním podpory.

Informace o rozhraní Pro oznámení nového uživatele

V iOSu 10 společnost Apple zavedla novou architekturu oznámení uživatelů, která nahrazuje stávající UIApplication metodu uvedenou výše.

Architektura oznámení uživatele 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í se dají 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í.

Nové rozhraní User Notification Framework 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 odznáčku ikony aplikací pro místní a vzdálená oznámení.
  • watchOS – přidává možnost předávat oznámení z spárovaného zařízení s iOSem uživatele do apple Watch a poskytuje aplikacím kukátku možnost provádět místní oznámení přímo na samotném hodinkách.
  • macOS – úplná podpora pro správu a plánování oznámení

Další informace najdete v dokumentaci k rozhraní UserNotifications Framework společnosti Apple a dokumentaci UserNotificationsUI.

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

Než aplikace pro iOS může uživateli posílat oznámení, musí být aplikace zaregistrovaná v systému, a protože oznámení uživatele přeruší, musí aplikace před odesláním výslovně 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í.
  • Chybná ikona 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):

Poznámka:

UNUserNotificationCenter je k dispozici pouze v iOSu 10+. Proto je osvědčeným postupem před odesláním požadavku zkontrolovat verzi systému macOS.

using UserNotifications;
...

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

    return true;
}

Vzhledem k tomu, že toto rozhraní API je sjednocené a funguje také na Macu 10.14+, pokud cílíte na macOS, musíte také co nejdříve zkontrolovat oprávnění oznámení:

using UserNotifications;
...

public override void DidFinishLaunching (NSNotification notification)
{
    // Check we're at least v10.14
    if (NSProcessInfo.ProcessInfo.IsOperatingSystemAtLeastVersion (new NSOperatingSystemVersion (10, 14, 0))) {
        // Request notification permissions from the user
        UNUserNotificationCenter.Current.RequestAuthorization (UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound, (approved, err) => {
            // Handle approval
        });
    }
}

> [!NOTE]
> With MacOS apps, for the permission dialog to appear, you must sign your macOS app, even if building locally in DEBUG mode. Therefore, **Project->Options->Mac Signing->Sign the application bundle** must be checked.

Additionally, a user can always change the notification privileges for an app at any time using the **Settings** app on the device. The app should check for the user's requested notification privileges before presenting a notification using the following code:

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

Konfigurace prostředí vzdálených oznámení

Novinkou v iOSu 10 je, že vývojář musí informovat operační systém, jaké prostředí nabízené oznámení běží jako vývoj nebo produkční prostředí. Pokud se tyto informace neposkytnou, aplikace se při odeslání do iTune 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. Poklikáním na Entitlements.plist soubor v oblasti řešení ho otevřete pro úpravy.

  2. Přepněte do zobrazení Zdroj :

    Zobrazení Zdroj

  3. Kliknutím na + tlačítko přidejte nový klíč.

  4. Zadejte aps-environment vlastnost, ponechte typ jako String a zadejte hodnotu development nebo production hodnotu:

    Vlastnost aps-environment

  5. Uložte změny souboru.

Registrace pro vzdálená oznámení

Pokud aplikace bude odesílat a přijímat vzdálená oznámení, bude stále muset provést registraci tokenu pomocí existujícího UIApplication rozhraní API. Tato registrace vyžaduje, aby zařízení mělo přístup k přístupovým sítím APN živého síťového připojení, které 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 programování místních a vzdálených oznámení společnosti Apple.

Doručování 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í

Nová verze iOS 10 obsahuje všechna oznámení název i podnadpis, které se vždy zobrazí s textem obsahu oznámení. Novinkou je také možnost přidat přílohy médií do obsahu oznámení.

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 tento 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. iOS 10 nabízí čtyři různé typy triggerů:

  • Nabízené oznámení – Používá se výhradně se vzdálenými oznámeními a aktivuje se, když služba APNs odešle balíček oznámení do aplikace spuštěné na zařízení.
  • Časový interval – Umožňuje naplánovat místní oznámení z časového intervalu, který začíná od této chvíle a končí nějaký budoucí bod. 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.
  • Na základě polohy – Umožňuje naplánovat místní oznámení, když zařízení s iOSem vstupuje nebo opouští konkrétní zeměpisné umístění nebo je v dané blízkosti jakékoli signály Bluetooth.

Jakmile je místní oznámení připravené, musí aplikace volat Add metodu objektu UNUserNotificationCenter , aby naplánovala 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 ukázkové místní oznámení:

using UserNotifications;
...

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 != null) {
        // Do something with error...
    }
});

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

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

using System;
using UserNotifications;

namespace MonkeyNotification
{
    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 výstupu aplikace a žádá systém, aby zobrazil standardní výstrahu pro oznámení.

Pokud aplikace chtěla zobrazit samotné oznámení, když byla v popředí, a nepoužívala výchozí hodnoty systému, předejte None obslužné rutině dokončení. 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 vlastní z UNUserNotificationCenterDelegate výše uvedeného k aktuálnímu UNUserNotificationCenter kódu, aby aplikace zvládla oznámení, když je aktivní a v popředí.

Správa oznámení

Správa oznámení pro iOS 10 nově poskytuje přístup k nevyřízeným i doručenými oznámeními a přidává možnost odebrat, aktualizovat nebo propagovat tato 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řazení prostřednictvím nového apps-collapse-id pole v hlavičce požadavku HTTP.

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

Odebírá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 žádosti 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 už ho uživatel přečetl.

Práce s akcemi oznámení

V iOSu 10 nejsou oznámení doručená uživateli statická a poskytují několik způsobů, jak s nimi uživatel může pracovat (z integrovaných akcí na vlastní akce).

Existují tři typy akcí, na které může aplikace pro iOS 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 byly přidány v iOSu 8 a poskytují uživateli rychlý způsob, jak provést vlastní úlohu přímo z oznámení, aniž by bylo nutné spustit aplikaci. 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). Vlastní akce jsou k dispozici v iOSu i watchOS.
  • Zavřít akci – tato akce se odešle do aplikace, když uživatel zavře dané oznámení.

Vytváření vlastních akcí

K vytvoření a registraci vlastní akce 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ého UNNotificationActionse přiřadí jedinečné ID 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 jako akce popředí).

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

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

Prezentace vlastních akcí

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

V případě vzdáleného oznámení nastavte category v datové části vzdáleného oznámení odpovídající jedné z výše vytvořených kategorií. Příklad:

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

V případě místních oznámení nastavte CategoryIdentifier vlastnost objektu UNMutableNotificationContent . Pří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";
...

Toto ID musí znovu odpovídat jedné z výše vytvořených kategorií.

Zpracování akcí zavření

Jak je uvedeno výše, akce zavřít 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 nutné při vytváření kategorie nastavit možnost. Pří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 komunikuje s vlastními akcemi a kategoriemi, které byly vytvořeny výše, musí aplikace splnit požadovaný úkol. To se provádí poskytnutím UNUserNotificationCenterDelegate a implementací UserNotificationCenter metody. Pří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í akce, nebo Zavřít akci. 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é zahrnuje požadavek s triggerem a obsahem oznámení. Aplikace se může rozhodnout, jestli se jedná o místní nebo vzdálené oznámení na základě typu triggeru.

Poznámka:

iOS 12 umožňuje vlastnímu uživatelskému rozhraní oznámení upravit tlačítka akcí za běhu. Další informace najdete v dokumentaci k tlačítkům akcí dynamického oznámení.

Práce s rozšířeními služeb

Při práci se vzdálenými oznámeními poskytují rozšíření služby způsob, jak povolit komplexní šifrování v datové části oznámení. Rozšíření služby jsou rozšíření bez uživatelského rozhraní (dostupné v iOSu 10), které běží na pozadí s hlavním účelem rozšíření nebo nahrazení viditelného obsahu oznámení před tím, než se uživateli zobrazí.

Přehled rozšíření služby

Rozšíření služeb mají být spuštěna rychle a mají jen krátkou dobu ke spuštění systémem. V případě, že rozšíření služby nedokončí svou úlohu v přidělené době, bude volána záložní metoda. Pokud náhradní obsah selže, zobrazí se uživateli původní obsah oznámení.

Mezi potenciální využití rozšíření služeb patří:

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

Implementace rozšíření služby

Pokud chcete implementovat rozšíření služby v aplikaci Xamarin.iOS, postupujte takto:

  1. Otevřete řešení aplikace v Visual Studio pro Mac.

  2. Klikněte pravým tlačítkem na název řešení v oblasti řešení a vyberte Přidat>nový projekt.

  3. Vyberte rozšíření služby oznámení rozšíření pro iOS>>a klikněte na tlačítko Další:

    Výběr rozšíření služby oznámení

  4. Zadejte název rozšíření a klikněte na tlačítko Další:

    Zadejte název rozšíření.

  5. V případě potřeby upravte název projektu nebo název řešení a klikněte na tlačítko Vytvořit:

    Úprava názvu projektu nebo názvu řešení

Důležité

Identifikátor sady pro rozšíření služby by měl odpovídat identifikátoru sady hlavní aplikace s připojeným .appnameserviceextension na konec. Pokud například hlavní aplikace měla identifikátor com.xamarin.monkeynotifysady prostředků , rozšíření služby by mělo mít identifikátor com.xamarin.monkeynotify.monkeynotifyserviceextensionsady prostředků . Tato možnost by se měla automaticky nastavit při přidání rozšíření do řešení.

V rozšíření služby oznámení existuje jedna hlavní třída, která bude muset upravit tak, aby poskytovala požadované funkce. Příklad:

using System;
using Foundation;
using UIKit;
using UserNotifications;

namespace MonkeyChatServiceExtension
{
    [Register ("NotificationService")]
    public class NotificationService : UNNotificationServiceExtension
    {
        #region Computed Properties
        public Action<UNNotificationContent> ContentHandler { get; set; }
        public UNMutableNotificationContent BestAttemptContent { get; set; }
        #endregion

        #region Constructors
        protected NotificationService (IntPtr handle) : base (handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }
        #endregion

        #region Override Methods
        public override void DidReceiveNotificationRequest (UNNotificationRequest request, Action<UNNotificationContent> contentHandler)
        {
            ContentHandler = contentHandler;
            BestAttemptContent = (UNMutableNotificationContent)request.Content.MutableCopy ();

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

            ContentHandler (BestAttemptContent);
        }

        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.

            ContentHandler (BestAttemptContent);
        }
        #endregion
    }
}

První metoda, DidReceiveNotificationRequestbude předána Identifikátor oznámení a obsah oznámení prostřednictvím objektu request . contentHandler Předání bude potřeba volat, aby se uživateli zobrazilo oznámení.

Druhá metoda , TimeWillExpirebude volána těsně před uplynutím času, aby rozšíření služby zpracovat požadavek. Pokud se rozšíření služby nepodaří zavolat contentHandler v přiděleném čase, zobrazí se uživateli původní obsah.

Aktivace rozšíření služby

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

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

Nový mutable-content klíč určuje, že rozšíření služby bude potřeba spustit, aby se aktualizoval obsah vzdáleného oznámení. Klíč encrypted-content obsahuje šifrovaná data, která může rozšíření služby před prezentováním uživateli dešifrovat.

Podívejte se na následující příklad rozšíření služby:

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í Body vlastnost na dešifrovaný obsah a použije contentHandler k prezentaci oznámení uživateli.

Shrnutí

Tento článek se zabývá všemi způsoby, jak bylo oznámení uživatelů vylepšeno systémem iOS 10. Představila novou architekturu oznámení uživatelů a způsob jeho použití v aplikaci Xamarin.iOS nebo rozšíření aplikace.