Sdílet prostřednictvím


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: Tento 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.

  1. 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ě):

    Portál pro vytváření profilů pro iOS na webu Applu

  2. 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:

    Přejděte do části ID aplikací a vytvořte nové ID aplikace

  3. 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:

    Zadejte popis a identifikátor sady id aplikace

  4. 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.

  5. V části App Services vyberte Push oznámení:

    výběr push notifikací

  6. Stisknutím Odeslat potvrďte registraci nového ID aplikace:

    Potvrzení registrace nového ID aplikace

  7. 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.

    Vytvoření certifikátu pro ID aplikace

  8. Vyberte, jestli chcete použít vývojový nebo produkční certifikát:

    Výběr vývojového nebo produkčního certifikátu

  9. A pak vyberte nové ID aplikace, které jsme právě vytvořili:

    Vyberte nově vytvořené ID aplikace

  10. Zobrazí se pokyny, které vás provedou procesem vytvoření žádosti o podepsání certifikátu pomocí aplikace Keychain Access na macu.

  11. 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.

  12. 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.

  13. 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.
    Tento snímek obrazovky ukazuje příklad Organizéru s přidaným zřizovacím profilem

  14. 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.
    nakonfigurujte projekt Xamarin.iOS tak, aby používal tento nově vytvořený zřizovací profil

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:

  1. 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 .
  2. Open Keychain Access – toto je aplikace s grafickým uživatelským rozhraním pro systém správy hesel v OS X.
  3. 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.
  4. 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í:

Tento 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.