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:
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í:
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 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 UNNotificationAction
se 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 UNNotificationCategory
objektu 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 UNNotificationResponse
má ActionIdentifier
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í.
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:
Otevřete řešení aplikace v Visual Studio pro Mac.
Klikněte pravým tlačítkem na název řešení v oblasti řešení a vyberte Přidat>nový projekt.
Vyberte rozšíření služby oznámení rozšíření pro iOS>>a klikněte na tlačítko Další:
Zadejte název rozšíření a klikněte na tlačítko Další:
V případě potřeby upravte název projektu nebo název řešení a klikněte na tlačítko Vytvořit:
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.monkeynotify
sady prostředků , rozšíření služby by mělo mít identifikátor com.xamarin.monkeynotify.monkeynotifyserviceextension
sady 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, DidReceiveNotificationRequest
bude 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 , TimeWillExpire
bude 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.