iOS
Deep Linking in iOS
Zoeken…
Opmerkingen
Handige Apple-documentatie met voorbeelden en verduidelijking.
Een app openen op basis van het URL-schema
Een app openen met een gedefinieerd URL-schema todolist://
:
Doelstelling C
NSURL *myURL = [NSURL URLWithString:@"todolist://there/is/something/to/do"];
[[UIApplication sharedApplication] openURL:myURL];
Snel
let stringURL = "todolist://there/is/something/to/do"
if let url = NSURL(string: stringURL) {
UIApplication.shared().openURL(url)
}
HTML
<a href="todolist://there/is/something/to/do">New SMS Message</a>
Opmerking: het is handig om te controleren of de link kan worden geopend om anders een passend bericht aan de gebruiker weer te geven. Dit kan met behulp van de methode
canOpenURL:
Een URL-schema toevoegen aan uw eigen app
Stel dat u werkt aan een app met de naam MyTasks
en dat u inkomende URL's wilt toestaan een nieuwe taak met een titel en een hoofdtekst te maken. De URL die u ontwerpt, kan er ongeveer zo uitzien:
mytasks://create?title=hello&body=world
(Natuurlijk, de text
en body
parameters worden gebruikt om onze taak die we creëren bevolken!)
Hier zijn de grote stappen om dit URL-schema aan uw project toe te voegen:
- Registreer een URL-schema in het
Info.plist
bestand van uw app, zodat het systeem weet wanneer een URL naar uw app moet worden geleid. - Voeg een functie toe aan uw
UIApplicationDelegate
die inkomende URL's accepteert en verwerkt. - Voer de taak uit die moet worden uitgevoerd wanneer die URL wordt geopend.
Stap één: Registreer een URL-schema in Info.plist:
Eerst moeten we een "URL-typen" -item toevoegen aan ons Info.plist-bestand. Klik hier op de knop (+):
... voer vervolgens een unieke identificatie voor uw app in, evenals het URL-schema dat u wilt gebruiken. Wees specifiek! U wilt niet dat het URL-schema conflicteert met de implementatie van een andere app. Het is beter om hier te lang te zijn dan te kort!
Stap twee: verwerk de URL in de UIApplicationDelegate
We moeten de toepassing implementeren application:openURL:options:
op onze UIApplicationDelegate
. We zullen de inkomende URL
inspecteren en kijken of we een actie kunnen ondernemen!
Een implementatie zou deze zijn:
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
if url.scheme == "mytasks" && url.host == "create" {
let title = // get the title out of the URL's query using a method of your choice
let body = // get the title out of the URL's query using a method of your choice
self.rootViewController.createTaskWithTitle(title, body: body)
return true
}
return false
}
Stap drie: Voer een taak uit, afhankelijk van de URL.
Wanneer een gebruiker uw app opent via een URL, verwachtte hij waarschijnlijk dat er iets zou gebeuren. Misschien is dat navigeren naar een deel van de inhoud, misschien is dat een nieuw item maken - in dit voorbeeld gaan we een nieuwe taak in de app maken!
In de bovenstaande code zien we een aanroep van self.rootViewController.createTaskWithTitle(:body:)
- dus ervan uitgaande dat uw AppDelegate
een aanwijzer heeft naar de AppDelegate
die de functie correct implementeert, bent u helemaal klaar!
Deeplink instellen voor uw app
Deep-linking instellen voor uw app is eenvoudig. U hebt alleen een kleine URL nodig waarmee u uw app wilt openen.
Volg de stappen om deeplinking in te stellen voor uw app.
Laten we een project maken en het DeepLinkPOC noemen.
Selecteer nu uw projectdoel.
Na het selecteren van het doel, selecteert u het tabblad 'info'.
Blader naar beneden tot u een optie met URL-typen ziet
Klik op de optie '+'.
U zult zien dat URL-schema's een string toevoegen waarmee u uw app wilt openen. Laten we " DeepLinking " toevoegen in URL-schema's.
Dus om uw app te openen, kunt u deze starten door "DeepLinking: //" in uw safari te typen. Uw deep-linking string heeft het volgende formaat.
[scheme]://[host]/[path] --> DeepLinking://path/Page1
waar, Schema: "DeepLinking" Host: "path" path: "Page1"
Opmerking : zelfs als u geen host en pad toevoegt, wordt de app gestart, dus geen zorgen, maar u kunt host en pad toevoegen om na het starten van de applicatie extra door te verwijzen naar een bepaalde pagina.
- Voeg nu de volgende methode toe aan uw appdelegate.
Snel:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
Doelstelling C:
-(BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
De bovenstaande methode wordt aangeroepen wanneer uw app wordt gestart met een deep-linking string die u instelt voor uw app.
- Nu is het tijd om uw app te installeren, maar wacht voordat u direct naar de knop Uitvoeren springt. Laten we een kleine wijziging aanbrengen in de app-startmethode van het schema.
- Selecteer en bewerk uw schema als
Klik nu op de knop Uitvoeren (als u wilt, kunt u breekpunt toevoegen aan uw didFinishLaunchingWithOptions en openURL-methoden om waarden te observeren)
U ziet het bericht "Wachten op DeepLinkPOC (of uw app-naam) om te starten".
Open safari en typ " DeepLinking: // " in de zoekbalk. Dit toont de prompt "open deze pagina in DeepLinkPOC" klik op open om uw app te starten.
Ik hoop dat je hebt leren kennen hoe je deep-links instelt voor je app :)