Zkratka proSoftware Development Kites dé káTakéSDK pro mobilní aplikace, Software Development Kit, iOS SDK, Android SDK, Klientská knihovna pro mobilPokročilý

Definice

Mobilní SDK je balík hotového kódu, nástrojů a dokumentace, který vývojář vloží do iOS nebo Android aplikace, aby v ní zprovoznil cizí službu bez psaní vlastní integrace. Typicky obsahuje knihovnu s API voláními, ukázkové projekty a konfiguraci závislostí. Používají ho platební brány, analytika, mapy, push notifikace nebo přihlašování přes sociální sítě.

Kategorie: Mobilní vývojAktualizováno

Nezaměňujte: Zkratka SDK obecně označuje jakýkoli vývojářský balík (například AWS SDK pro backend); mobilní SDK je jeho podmnožina určená pro klientské aplikace na iOS a Androidu.

Než se na to spolehnete: Wikidata ID pro „software development kit“ jsem uvedl podle paměti, prosím ověřit. Konkrétní čísla ve druhém příkladu jsou ilustrativní scénář, ne měření z konkrétního projektu.

<h2>Co mobilní SDK obsahuje</h2> <p>Mobilní SDK není jen jedna knihovna. Obvyklý balík má čtyři vrstvy: zkompilovaný kód (na Androidu AAR nebo JAR, na iOS XCFramework či Swift Package), veřejné rozhraní tříd a metod, konfigurační soubory s klíči a oprávněními, a ukázkovou aplikaci, na které si integraci ověříte dřív, než sáhnete do produkčního projektu. K tomu patří dokumentace a changelog, protože bez nich se nedá bezpečně povýšit verze.</p> <p>Rozdíl proti přímému volání <a href="/slovnik/api">API</a> je v tom, co si SDK bere na starost samo: podepisování požadavků, obnovu tokenů, opakování při výpadku sítě, frontu událostí na disku, ukládání do mezipaměti a často i hotové obrazovky. Integrace platební brány přes REST znamená týdny práce s hraničními stavy; přes SDK jde o pár set řádků.</p> <h2>Co za pohodlí zaplatíte</h2> <p>Každé SDK vstupuje do vašeho procesu. To má konkrétní důsledky, které se projeví až po nasazení.</p> <h3>Velikost a start aplikace</h3> <p>Knihovna zvětší instalační balíček a mnoho SDK se inicializuje při startu aplikace. Pět analytických a marketingových SDK dokáže přidat k času do prvního vykreslení stovky milisekund, což se projeví na odinstalacích. Řešením je odložená inicializace a měření startu před integrací i po ní.</p> <h3>Pády a stabilita</h3> <p>Chyba v cizím kódu shodí celou aplikaci, ne jen tu jednu funkci, a v reportu z Crashlytics vidíte svůj název balíčku. Opravu nemáte ve svých rukou: čekáte na vydání nové verze třetí stranou. Proto se volání SDK obaluje vlastní tenkou vrstvou, aby se dalo vypnout přepínačem na serveru.</p> <h3>Oprávnění a soukromí</h3> <p>SDK často vyžaduje oprávnění nebo sbírá identifikátory zařízení. Apple i Google dnes chtějí deklarovat, jaká data která knihovna odesílá; na iOS k tomu slouží privacy manifest, který dodává sám autor SDK. Nedeklarovaný sběr je běžný důvod zamítnutí při schvalování.</p> <h2>Jak SDK do projektu přibude</h2> <p>Distribuce jde přes správce závislostí: Gradle na Androidu, Swift Package Manager nebo CocoaPods na iOS. Verze se zapisuje do manifestu projektu a zamyká se lock souborem, aby build byl reprodukovatelný. U <a href="/slovnik/hybridni-aplikace">hybridních aplikací</a> přibývá mezivrstva: nativní SDK zabalí plugin, který jeho metody zpřístupní JavaScriptu, takže při aktualizaci řešíte dvě kompatibility místo jedné.</p> <p>Před nasazením se vyplatí projít čtyři věci: licenci (některá SDK jsou zdarma jen do určitého objemu), četnost vydávání verzí, chování při offline režimu a to, zda knihovna nabízí vlastní UI, nebo jen datové rozhraní. Poslední bod rozhoduje, jestli udržíte konzistenci se svým <a href="/slovnik/design-system">design systemem</a>.</p>

Příklady z praxe

  1. Platební SDK místo vlastní integrace

    E-shop potřebuje v aplikaci přijímat karty. Vlastní implementace by znamenala řešit tokenizaci karty, 3-D Secure přesměrování a Apple Pay zvlášť. SDK platební brány dodá hotový formulář, zvládne ověřovací tok i návrat do aplikace a citlivá data se nikdy nedostanou na vlastní server, což výrazně zjednodušuje rozsah PCI DSS.

    // Android, Kotlin: spuštění platebního toku ze SDK
    val config = PaymentConfiguration(publishableKey = BuildConfig.PAY_PUBLIC_KEY)
    paymentSheet.presentWithPaymentIntent(
        paymentIntentClientSecret = secretFromBackend,
        configuration = config
    )
  2. Analytické SDK zpomalilo start

    Tým přidal do aplikace tři marketingová SDK najednou a čas studeného startu vzrostl z 1,2 na 1,9 sekundy, protože se všechna inicializovala synchronně v Application.onCreate. Přesun inicializace na pozadí a odložení dvou z nich až za první vykreslení obrazovky vrátil start pod 1,4 sekundy. Bez měření před integrací by nikdo nevěděl, které SDK je viník.

Časté omyly

MýtusSDK je jen jiné slovo pro API.
Ve skutečnostiAPI je popis rozhraní, tedy dohoda o tom, co se volá a co se vrátí. Mobilní SDK je konkrétní balík kódu, který to rozhraní za vás volá a přidává k němu logiku, například obnovu tokenu, frontu offline událostí a hotové obrazovky.
MýtusKdyž použijeme oficiální SDK, máme integraci hotovou a nemusíme se o ni starat.
Ve skutečnostiVerze SDK stárnou spolu s požadavky obchodů. Apple i Google pravidelně mění pravidla cílového SDK a soukromí, takže neaktualizovaná knihovna může zablokovat vydání celé aplikace, i když funguje bez chyby.
MýtusSDK třetí strany nemůže vidět data mimo svou funkci.
Ve skutečnostiSDK běží ve stejném procesu jako aplikace a má stejná oprávnění. Technicky může číst to, k čemu má aplikace přístup, proto je namístě prověřit vydavatele, licenci i deklarovaný sběr dat.

Časté dotazy

Kolik SDK je v mobilní aplikaci ještě rozumné množství?
Pevné číslo neexistuje, ale platí praktické pravidlo: každé SDK musí mít jasného vlastníka v týmu a měřitelný přínos. V praxi si aplikace vystačí s jedním analytickým, jedním pro hlášení pádů, případně platebním a jedním marketingovým. Jakmile jich je víc než pět, roste velikost balíčku, prodlužuje se studený start a při každé velké aktualizaci systému musíte čekat na kompatibilní verze od více dodavatelů najednou. Duplicitní SDK, která měří totéž, jsou nejčastější zbytečnou zátěží.
Jak bezpečně aktualizovat verzi mobilního SDK?
Aktualizace mobilního SDK patří do samostatného commitu, nikdy do stejného vydání jako velká funkční změna. Postup je přečíst changelog kvůli změnám v rozhraní, zvýšit verzi ve správci závislostí, spustit ukázkovou aplikaci dodavatele a pak vlastní testy. Následuje postupné vydání menší části uživatelů a sledování míry pádů. Zvláštní pozor si zaslouží velké verzové skoky, protože ty často mění minimální podporovanou verzi systému nebo požadavky na oprávnění.
Kdy se vyplatí volat API přímo místo SDK?
Přímé volání API dává smysl tam, kde potřebujete jen jeden nebo dva endpointy, kde vám vadí velikost knihovny nebo kde SDK přináší závislosti, jež kolidují se zbytkem projektu. Vlastní tenký klient také dává plnou kontrolu nad tím, jaká data odcházejí, což ocení aplikace s přísnými požadavky na soukromí. Cenou je, že si sami musíte vyřešit obnovu tokenů, opakování požadavků, chování offline a udržování kompatibility při změnách na straně služby.
Funguje nativní mobilní SDK i v React Native nebo Flutteru?
Nativní mobilní SDK samo o sobě v React Native ani Flutteru volat nelze, protože jeho rozhraní je v Kotlinu nebo Swiftu. Potřebujete most, tedy plugin, který nativní metody vystaví do JavaScriptu či Dartu. Většina velkých dodavatelů takový oficiální plugin vydává, ale bývá o jednu až dvě verze pozadu za nativní knihovnou a nemusí pokrývat celé rozhraní. Pokud oficiální plugin neexistuje, zbývá napsat vlastní nativní modul, což je práce pro vývojáře znalého obou platforem.

Zdroje

  1. Software development kit(otevře se v novém okně)Wikipedia
  2. OWASP Mobile Application Security(otevře se v novém okně)OWASP
  3. Stripe Documentation(otevře se v novém okně)Stripe

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.