Sdílet prostřednictvím


Nabízená oznámení 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. V případě iOSu 10 a novějšího najdete pokyny k uživatelskému rozhraní pro oznámení o podpoře místních i vzdálených 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 nabízených oznámení v iOSu je služba APNS (Apple Push Notification Gateway Service). 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 řetězce ve formátu JSON, které odpovídají formátu a protokolům zadaným v části Datová část oznámení v Průvodci programováním místních a nabízených oznámení v dokumentaci pro vývojáře pro iOS.

Apple udržuje dvě prostředí APNS: sandbox a produkční prostředí. Sandboxové prostředí je určené pro testování během fáze vývoje a najdete ho na gateway.sandbox.push.apple.com 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 portu TCP 2195.

Požadavky

Nabízené oznámení musí dodržovat následující pravidla, která jsou diktována architekturou služby APNS:

  • Limit zprávy 256 bajtů – celá velikost zprávy oznámení nesmí překročit 256 bajtů.
  • Bez potvrzení 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 zřizování pro iOS na webu Apples

  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. Po kliknutí na + toto tlačítko budete moct zadat popis a identifikátor sady id aplikace, jak je znázorněno na následujícím snímku obrazovky:

    Zadejte popis a identifikátor sady pro ID aplikace.

  4. Nezapomeňte vybrat explicitní ID aplikace a že identifikátor sady nekončí na * . 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 Nabízená oznámení:

    Výběr nabízených oznámení

  6. Stisknutím klávesy Submit 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 do části Certifikáty > vše a vyberte + tlačítko, jak je znázorně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 právě vytvořené nové ID aplikace.

  10. Zobrazí se pokyny, které vás provedou procesem vytvoření žádosti o podepsání certifikátu pomocí aplikace Přístup ke klíčence na počítači Mac.

  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 kroků ho vytvořte pomocí ID aplikace, které jsme právě vytvořili.

  13. Po vytvoření zřizovacího profilu otevřete organizátora 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átora s přidaným zřizovacím profilem:
    Tento snímek obrazovky ukazuje příklad organizátora 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. To se provádí v dialogovém okně Možnosti projektu na kartě Podepsání sady prostředků 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 nabízenými oznámeními. 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áhněte si 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 rozhraní grafického uživatelského rozhraní pro systém správy hesel v OS X.
  3. Import certifikátu – Pokud certifikát ještě není nainstalovaný, soubor... Import položek 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 máme 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í registrace se dokončí registrace a aplikační server může odesílat nabízená 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 se zpracovává v FinishedLaunching metodě třídy delegáta aplikace voláním RegisterForRemoteNotificationTypes aktuálního UIApplication objektu. 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);
}

Žádost o registraci APNS probíhá na pozadí – když se přijme odpověď, iOS zavolá metodu RegisteredForRemoteNotificationsAppDelegate ve třídě 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 třídu 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 tomu, že serverové aplikace budou muset provést čištění a vyprázdnění těchto tokenů s vypršenou platností nebo změněnými tokeny. Když aplikace odešle jako nabízené oznámení zařízení, jehož platnost vypršela, služba APNS zaznamená a uloží tento token s vypršenou platností. Servery se pak můžou dotazovat na APNS a zjistit, jaké tokeny vypršely.

Služba APNS používaná k poskytování služby Feedback – koncový bod HTTPS, který se ověřuje prostřednictvím certifikátu vytvořeného k odesílání nabízených oznámení a posílá zpět data o tom, jaké 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í.

timestamp Nový datový klíč JSON bude navíc v textu odpovědi:

Pokud je hodnota v hlavičce :status 410, hodnota tohoto klíče je poslední čas, kdy apNs potvrdil, že token zařízení už 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 skončil diskuzí o tom, jak můžou aplikační servery používat služby Feedback Services k zastavení sledování tokenů zařízení, jejichž platnost vypršela.