Push notifikace v iOSu
Důležitý
Informace v této části se týkají iOSu 9 a předchozích verzí, které zde zůstaly, aby podporovaly starší verze iOS. Informace o iOSu 10 a novějších najdete v průvodci rozhraním User Notification Framework pro podporu místního i vzdáleného oznámení na zařízení s iOSem.
Nabízená oznámení by měla být stručná a obsahovat jenom dostatek dat, aby mobilní aplikaci oznámila, že by měla kontaktovat serverovou aplikaci pro aktualizaci. Například když přijde nový e-mail, serverová aplikace upozorní jenom mobilní aplikaci, že přišel nový e-mail. Oznámení by neobsahovalo samotný nový e-mail. Mobilní aplikace pak načte nové e-maily ze serveru, když je to vhodné.
Centrem push notifikací v iOSu je Apple Push Notification Gateway Service (APNS). Jedná se o službu poskytovanou společností Apple, která zodpovídá za směrování oznámení z aplikačního serveru na zařízení s iOSem.
Následující obrázek znázorňuje topologii nabízených oznámení pro iOS:
Samotná vzdálená oznámení jsou formátované řetězce JSON, které odpovídají formátu a protokolům zadaným v části Datová část oznámení průvodce programováním místních a nabízených oznámení v dokumentaci pro vývojáře pro iOS.
Společnost Apple udržuje dvě prostředí služby APNS: Sandbox a produkční prostředí. Sandboxové prostředí je určené pro testování během vývojové fáze a najdete ho na gateway.sandbox.push.apple.com
na portu TCP 2195. Produkční prostředí je určené k použití v aplikacích, které byly nasazeny, a najdete je na gateway.push.apple.com
na portu TCP 2195.
Požadavky
Push oznámení musí dodržovat následující pravidla, která jsou diktována architekturou APNS:
- 256 bajtů limit zpráv – celá velikost zprávy oznámení nesmí překročit 256 bajtů.
- Žádné potvrzení – APNS neposkytuje odesílateli žádné oznámení, že zpráva byla doručena zamýšlenému příjemci. Pokud je zařízení nedostupné a odešle se několik sekvenčních oznámení, všechna oznámení s výjimkou nejnovějších se ztratí. Do zařízení se doručí jenom nejnovější oznámení.
- Každá aplikace vyžaduje zabezpečený certifikát – Komunikace s APNS se musí provádět přes PROTOKOL SSL.
Vytváření a používání certifikátů
Každé z prostředí uvedených v předchozí části vyžaduje vlastní certifikát. V této části se dozvíte, jak vytvořit certifikát, přidružit ho ke zřizovacímu profilu a pak získat certifikát Personal Information Exchange pro použití s PushSharp.
Pokud chcete vytvořit certifikáty, přejděte na portál zřizování pro iOS na webu Společnosti Apple, jak je znázorněno na následujícím snímku obrazovky (všimněte si položky nabídky ID aplikací na levé straně):
Dále přejděte do části ID aplikace a vytvořte nové ID aplikace, jak je znázorněno na následujícím snímku obrazovky:
Když kliknete na tlačítko +, budete moct zadat popis a identifikátor sady pro ID aplikace, jak je znázorněno na následujícím snímku obrazovky:
Nezapomeňte vybrat explicitní ID aplikace a ujistěte se, že identifikátor balíku nekončí
*
. Tím se vytvoří identifikátor, který je vhodný pro více aplikací, a certifikáty nabízených oznámení musí být pro jednu aplikaci.V části App Services vyberte Push oznámení:
Stisknutím Odeslat potvrďte registraci nového ID aplikace:
Dále musíte vytvořit certifikát pro ID aplikace. V levém navigačním panelu přejděte na Certifikáty > Všechny a vyberte tlačítko
+
, jak je ukázáno na následujícím snímku obrazovky.Vyberte, jestli chcete použít vývojový nebo produkční certifikát:
A pak vyberte nové ID aplikace, které jsme právě vytvořili:
Zobrazí se pokyny, které vás provedou procesem vytvoření žádosti o podepsání certifikátu pomocí aplikace Keychain Access na macu.
Teď, když je certifikát vytvořený, je nutné ho použít jako součást procesu sestavení k podepsání aplikace, aby se mohla zaregistrovat v APN. To vyžaduje vytvoření a instalaci zřizovacího profilu, který používá certifikát.
Pokud chcete vytvořit profil zřizování pro vývoj, přejděte do části Zřizovací profily a podle pokynů ho vytvořte pomocí ID aplikace, které jsme právě vytvořili.
Po vytvoření zřizovacího profilu otevřete Organizátor Xcode a aktualizujte ho. Pokud se vytvořený profil zřizování nezobrazí, může být nutné profil stáhnout z portálu zřizování pro iOS a ručně ho importovat. Následující snímek obrazovky ukazuje příklad Organizátoru s přidaným konfiguračním profilem.
V tuto chvíli musíme nakonfigurovat projekt Xamarin.iOS tak, aby používal tento nově vytvořený zřizovací profil. Toto se provádí v dialogovém okně Možnosti projektu na kartě podepisování balíčků iOS, jak je znázorněno na následujícím snímku obrazovky.
V tomto okamžiku je aplikace nakonfigurovaná tak, aby fungovala s push notifikacemi. U certifikátu je ale ještě potřeba provést několik dalších kroků. Tento certifikát je ve formátu DER, který není kompatibilní s PushSharpem, který vyžaduje certifikát PKCS12 (Personal Information Exchange). Chcete-li převést certifikát tak, aby byl použitelný pomocí PushSharp, proveďte tyto poslední kroky:
- Stáhnout soubor certifikátu – Přihlaste se k portálu zřizování pro iOS, zvolte kartu Certifikáty, vyberte certifikát přidružený ke správnému zřizovacímu profilu a zvolte Stáhnout .
- Open Keychain Access – toto je aplikace s grafickým uživatelským rozhraním pro systém správy hesel v OS X.
- Import certifikátu – Pokud certifikát ještě není nainstalovaný, soubor... Importovat položky z nabídky Přístup ke klíčence. Přejděte na certifikát, který exportoval výše, a vyberte ho.
- Export certifikátu – Rozbalte certifikát tak, aby byl přidružený privátní klíč viditelný, klikněte pravým tlačítkem myši na klíč a zvolte Exportovat. Zobrazí se výzva k zadání názvu souboru a hesla pro exportovaný soubor.
V tuto chvíli jsme hotovi s certifikáty. Vytvořili jsme certifikát, který se použije k podepisování aplikací pro iOS a převede tento certifikát do formátu, který lze použít s PushSharp v serverové aplikaci. Teď se podíváme, jak aplikace pro iOS komunikují s APNS.
Registrace v APNS
Než může aplikace pro iOS přijímat vzdálená oznámení, musí se zaregistrovat v APNS. APNS vygeneruje jedinečný token zařízení a vrátí ho do aplikace pro iOS. Aplikace pro iOS pak převezme token zařízení a pak se zaregistruje na aplikačním serveru. Po dokončení všech těchto kroků bude registrace dokončena a aplikační server může odesílat oznámení mobilnímu zařízení.
Token zařízení se teoreticky může změnit pokaždé, když se aplikace pro iOS zaregistruje v APNS, ale v praxi k tomu často nedojde. Při optimalizaci může aplikace ukládat nejnovější token zařízení do mezipaměti a aktualizovat pouze aplikační server, když se změní. Následující diagram znázorňuje proces registrace a získání tokenu zařízení:
Registrace pomocí APNS je zpracovávána v metodě FinishedLaunching
delegáta třídy aplikace voláním RegisterForRemoteNotificationTypes
na aktuálním objektu UIApplication
. Když se aplikace pro iOS zaregistruje ve službě APNS, musí také určit, jaké typy vzdálených oznámení chcete dostávat. Tyto vzdálené typy oznámení jsou deklarovány ve výčtu UIRemoteNotificationType
. Následující fragment kódu je příkladem toho, jak se aplikace pro iOS může zaregistrovat, aby dostávala oznámení o vzdáleném upozornění a odznáček:
if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
new NSSet ());
UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}
Požadavek na registraci APNS se provádí na pozadí – když se přijme odpověď, iOS zavolá metodu RegisteredForRemoteNotifications
ve třídě AppDelegate
a předá registrovaný token zařízení. Token bude obsažen v objektu NSData
. Následující fragment kódu ukazuje, jak načíst token zařízení, který poskytuje služba APNS:
public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
// Get current device token
var DeviceToken = deviceToken.Description;
if (!string.IsNullOrWhiteSpace(DeviceToken)) {
DeviceToken = DeviceToken.Trim('<').Trim('>');
}
// Get previous device token
var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");
// Has the token changed?
if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
{
//TODO: Put your own logic here to notify your server that the device token has changed/been created!
}
// Save new device token
NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}
Pokud se registrace z nějakého důvodu nezdaří (například zařízení není připojené k internetu), bude iOS volat FailedToRegisterForRemoteNotifications
ve třídě delegáta aplikace. Následující fragment kódu ukazuje, jak uživateli zobrazit upozornění informující o tom, že registrace selhala:
public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}
Správa tokenů zařízení
Platnost tokenů zařízení vyprší nebo se v průběhu času změní. Vzhledem k tomuto faktu budou muset serverové aplikace provést údržbu a vyprázdnění těchto tokenů s vypršenou platností nebo změněné tokeny. Když aplikace odešle push oznámení do zařízení, které má vypršelý token, služba APNS zaznamená a uloží tento vypršelý token. Servery se pak můžou dotazovat na APNS a zjistit, jaké tokeny vypršely.
APNS dříve poskytovala službu Feedback Service - koncový bod HTTPS, který se ověřuje prostřednictvím certifikátu vytvořeného pro odesílání push oznámení a zpětně zasílá data o tom, které tokeny vypršely. Apple ho přestal používat a odebral.
Místo toho existuje nový stavový kód HTTP pro případ, který dříve oznámila služba Feedback Service:
410 – Token zařízení už není pro dané téma aktivní.
Nový datový klíč JSON timestamp
bude navíc v textu odpovědi:
Pokud je hodnota v hlavičce :status 410, hodnota tohoto klíče je poslední doba, kdy APNs potvrdily, že token zařízení již pro dané téma není platný.
Zastavte nabízená oznámení, dokud zařízení nezaregistruje token s pozdějším časovým razítkem u vašeho poskytovatele.
Shrnutí
Tato část představuje klíčové koncepty týkající se nabízených oznámení v iOSu. Vysvětlila roli služby Apple Push Notification Gateway (APNS). Pak se zabýval vytvářením a používáním certifikátů zabezpečení, které jsou nezbytné pro službu APNS. Nakonec tento dokument dokončil diskuzi o tom, jak můžou aplikační servery používat Feedback Services k zastavení sledování tokenů zařízení, jejichž platnost vypršela.