際際滷

際際滷Share a Scribd company logo
Deep links, App links
Mi辿rt? Hogyan?
Felhaszn叩l坦i szok叩sokat tekintve a vil叩g egyre ink叩bb a mobil eszk旦z旦k haszn叩lat叩nak
ir叩ny叩ba tend叩l. Az okos telefonok haszn叩l坦i egyre t旦bb 坦r叩t t旦ltenek el naponta k辿sz端l辿keik
nyomkod叩s叩val (k旦z旦ss辿gi oldalak, h鱈r port叩lok stb felkeres辿s辿vel). Ezt figyelembe v辿ve
szinte biztos, hogy minden felhaszn叩l坦 tal叩lkozik valamilyen form叩ban olyan hirdet辿ssel,
aj叩nl坦val stb amely egy m叩sik tartalomra mutat. P辿ld叩ul tegy端k fel hallgatunk egy zen辿t amit
nagyon megtetszett 辿s szeretn辿nk megosztani, vagy elk端ldeni egy ismers端nknek. Az
ismers端nk r叩kattint a linkre 辿s m叩r is el辿rheti az adott tartalmat, ugye ez a klasszikus eset.
Mi is pontosan a deep link?
Mi lenne ha tov叩bb menn辿nk 辿s nem egyszer撤en a b旦ng辿szben nyitn叩 meg a tartalmat,
hanem a k辿sz端l辿kre telep鱈tett nat鱈v alkalmaz叩sban egy m叩r j坦l ismert k旦rnyezetben. Ezzel a
feltev辿ssel ha sarkalatosan is de eljutottunk a fenti k辿rd辿s magyar叩zat叩hoz, hiszen abban
az esetben ha egy alkalmaz叩s valamely tartalm叩ra mutat坦 hivatkoz叩st haszn叩lunk,
val坦j叩ban mondhatjuk, hogy egy deep linkinket haszn叩lunk. A deep linkingre jellemz hogy
叩ltal叩ban minden olyan inform叩ci坦t tartalmaz amely sz端ks辿ges ahhoz hogy a tartalom
megnyithat坦 legyen az adott alkalmaz叩son bel端l. Fel辿p鱈t辿s辿t tekintve nem v辿letlen端l
indultam el egy webes megk旦zel鱈t辿sbl hiszen, haszn叩lhatjuk a j坦l megszokotott URL s辿m叩t
p辿ld叩ul.:
http://www.exampleconference.hu/program/1234
[schema] :// [host] / [path] / [params]
Amennyiben az alkalmaz叩sban enged辿lyezt端k a deep link kezel辿s辿t, akkor a linkre
kattint叩st k旦veten eg辿szen egyszer撤en megnyitja a tartalmat az alkalmaz叩son bel端l (pl.:
ebben az esetben a 1234-es tartalmat). Amennyiben az URL m旦g旦tt egy val坦s weboldal is
tal叩lhat坦 ad sz叩munkra valamif辿le biztons叩got, hiszen ha nincs az alkalmaz叩s telep鱈tve
egyszer撤en mintha mi sem t旦rt辿nt volna a b旦ng辿szben megnyitja a tartalmat.
M叩sik lehets辿g端nk egy olyan URI s辿ma haszn叩lata, amely szint辿n az alkalmaz叩son bel端li
tartalomra mutat, ez esetben viszont nincs semmilyen v辿d h叩l坦nk arra az esetre ha az
alkalmaz叩s nem lenne telep鱈tve az eszk旦zre.
exampleconference://program/1234
[schema] :// [path] / [params]
Azt hogy melyik megold叩st haszn叩ljuk igaz叩b坦l projekt 辿s fejleszt f端gg, viszont 辿rdemes
az URL-t 炭gy fel辿p鱈teni, hogy mind a s辿ma neve mind pedig az 炭tvonal param辿terei j坦l
辿rthetek legyenek 辿s lehetleg ne 端tk旦zzenek egy辿b alkalmaz叩sok linkjeivel sem.
Hogyan 叩ll鱈thatom be androidon?
Egyszer撤en vessz端k a projekt manifest xml 叩lom叩ny叩t 辿s hozz叩 adjuk a s辿m叩nak megfelel
intent filltert. Ez az intent filter fogja tartalmazni azokat az inform叩ci坦kat amelyek
sz端ks辿gesek az alkalmaz叩s 叩ltal kezelt deep linkek beazonos鱈t叩s叩ra. Az esem辿nyt 辿rtelem
szer撤en az az Activity fogja lekezelni amelyikhez bejegyezt端k az intent filltereket, ahogyan
az az al叩bbi k坦dr辿szletben is l叩taht坦 (ez lehet egy Activity-ben vagy t旦bben is ak叩r).
<activity
android:name="hu.exampleconference.MainActivity"
android:label="@string/title" >
<intent-filter android:label="@string/filter_title_view">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "exampleconference://program" -->
<data android:scheme="exampleconference"
android:host="program" />
</intent-filter>
<intent-filter android:label="@string/filter_title_view">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://exampleconference.hu/program"
-->
<data android:scheme="http"
android:host="exampleconference.hu"
android:pathPrefix="/program" />
</intent-filter>
</activity>
Az Activity ak叩r egyszerre t旦bb intent fillter-t is tartalmazhat, ebben az esetben ak叩r t旦bb
URL s辿m叩t is kezelni tud. Ahogy a p辿lda is mutatja adott url s辿ma (deep link) regisztr叩l叩sa
eset辿n 辿rdemes az al叩bb list叩zott tagekkel param辿teriz叩lni az intent filltert.
- action: Az action tagen kereszt端l jelezz端k az os fel辿, hogy ezen Activity fogja kezelni
a megadott URL s辿m叩t.
- data: Az URL s辿ma defini叩l叩s叩ra szolg叩l坦 tag. Intent fillter -enk辿nt csak egy data
taget adhatunk meg. Ahhoz hogy a deep link megfelelk辿ppen m撤k旦dj旦n az
android:scheme attributumot mindenk辿ppen tartalmaznia kell.
- category: BROWSABLE kateg坦ria eset辿n az alalmaz叩s b旦ng辿szbl is megnyithat坦
deep linken kereszt端l. A DEFAULT kateg坦ria igaz叩b坦l opcion叩lis, viszont n辿lk端le
csak k旦zvetlen端l ind鱈thatn叩nk el az alkalmaz叩st.
Hogyan kezelj端k le androidon az al叩bbi deep link
eset辿n?
exampleconference.hu://program?id=1234&data=Program1234
Az Activity ind鱈t叩sakor, le kell ellenrizn端nk, hogy kapott-e olyan intentet, amely valamilyen
inform叩ci坦t hordoz. ltal叩ban ezt a m撤veletet az Activity l辿trej旦ttekor v辿gezz端k el, viszont
gondolnunk kell arra az eshets辿gre is, hogy mi van ha az Activity m叩r l辿trej旦tt 辿s 炭gy kapja
meg az intentet. ppen ez辿rt az al叩bbi k坦d r辿szletet 辿rdemes az onNewIntent() met坦dusba
elhelyezni, ami akkor h鱈v坦dik meg, ha az Activity m叩r l叩that坦. Abban az esetre ha 辿ppen
nem fut az alkalmaz叩sunk az activity-ben megh鱈vjuk az onNewIntent() met坦dust, amivel
v辿g端l is lefedt端nk minden eshets辿get.
if (intent.getExtras() != null) {
Uri uri = intent.getData();
if (uri != null) {
int id= uri.getQueryParameter("id");
String data= uri.getQueryParameter("data");
}
}
Mi t旦rt辿nik ugyan ekkor iOS-en?
Az iOS projektek eset辿n a deep link enged辿lyez辿s辿hez az info.plist f叩jl tartalm叩t kell
m坦dos鱈tanunk, az al叩bbiak szerint.
- Hozz叩adunk egy 炭j sort: jobb klikk valamelyik lista elemen 辿s Add Row. A felugr坦
list叩b坦l pedig az URL types -ot v叩lasszuk ki.
- Nyissuk sz辿t az URL types sort, ami egy Dictionary elemet fog tartalmazni.
- Az Item 0 dictonary -t tov叩bb bontva eljutunk az URL Identifier objektumhoz. Ezen
kereszt端l 叩ll鱈thatunk be egy egyedi azonos鱈t坦t (aj叩nlott reverse domain form叩tum pl.:
hu.exampleconference.appname).
- Maradva az Item 0 dictonary-n叩l hozz叩adunk egy 炭j sort, ez炭ttal a felugr坦 list叩b坦l a
URL Schemes kiv叩lasztva. Az URL Shecmes egy t旦mb ami lehetv辿 teszi t旦bb
URL s辿ma defini叩l叩s叩t is egy alkalmaz叩son bel端l.
- Az URL Schemes gyerek辿nek Item 0 be叩ll鱈tjuk az egyedi s辿m叩t pl:
exampleconference. Ilyenkor a deep link URL: exampleconference://
Am鱈g az android a hagyom叩nyos URL s辿m叩t is t叩mogatja ezzel szemben az iOS eset辿n
alap esetben csak a [schema]:// form叩tum炭 deep linkek t叩mogatottak. Kisebb 端gyk旦d辿ssel
azonban r叩b鱈rhatjuk az iOS -es appunkat, hogy kezelni tudja a hagyom叩nyos url-eket is.
Hogyan reag叩l r叩 egy iOS App??
Az ApplicationDelegate openURL met坦dus叩t haszn叩ljuk fel arra, hogy kinyerj端k azokat az
inform叩ci坦kat amellyel az alkalmaz叩s a megfelel tartalomhoz tud navig叩lni. Az openURL url
param辿tere fogja tartalmazni 辿rtelem szer撤en a befut坦 url-t
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if([[url host] isEqualToString:@program"]) {
NSString * q = [url query];
NSArray * pairs = [q componentsSeparatedByString:@"&"];
NSMutableDictionary * kvPairs = [NSMutableDictionary dictionary];
for (NSString * pair in pairs) {
NSArray * bits = [pair componentsSeparatedByString:@"="];
NSString * key = [[bits objectAtIndex:0]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEnco
ding];
NSString * value = [[bits objectAtIndex:1]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEnco
ding];
[kvPairs setObject:value forKey:key];
}
...
}
return YES;
}
Platformok k端l旦nb旦zs辿g辿bl felmer端l probl辿m叩k.
Azt mondanom sem kell az elzek alapj叩n j坦l l叩that坦 hogy mind az android mind pedig az
iOS elt辿r abban hogy milyen URL s辿m叩kat tud kezelni, vagy 辿ppen milyen m坦don kezelje a
helyzetet ha nincs alkalmaz叩s telep鱈tve az eszk旦zre.. Mag叩ra a deep link kezel辿s辿re, illetve
egy辿b probl辿m叩k elh叩r鱈t叩s叩ra t旦bb szervezet is dolgozott ki megold叩sokat, szabv叩nyokat
mint p辿ld叩ul Facebook, Google, Twitter vagy m叩s start up szevezetek mint p辿ld叩ul a
deeplink.me, URX stb.
Facebook 辿s az App Links
Tavaly 叩prilisban mutatt叩k be 炭j fejleszt辿s端ket (App Links), mellyel azt a c辿lt t撤zt辿k ki, hogy
jelentsen megk旦nny鱈ts辿k a nat鱈v alkalmaz叩sok k旦z旦tti deep linkinket a fejlesztk sz叩m叩ra.
Haszn叩lat叩hoz els k旦rben sz端ks辿ges egy olyan HTML oldalra amely <head> elem辿t
kieg辿sz鱈tj端k a platformnak megfelel App Link metadat叩kkal. Ezek a meta adatok fogj叩k
tartalmazni azokat az adatokat, amely a navig叩ci坦hoz sz端ks辿gesek. rdemes be叩ll鱈tani egy
fallback url-t arra az esetre ha a c辿l alkalmaz叩s nincs telep鱈tve a k辿sz端l辿ken.
Hogy is n辿z ki ez a HTML pontosan android 辿s iOS eset辿n?
<html>
<head>
<!-- android specific part -->
<meta property="al:android:package" content="hu.exampleconference" />
<meta property="al:android:url" content="exampleconference://program" />
<meta property="al:android:app_name" content="Example Conference" />
<!-- iOS specific part -->
<meta property="al:ios:url" content="exampleconference://program" />
<meta property="al:ios:app_store_id" content="12345" />
<meta property="al:ios:app_name" content="Example Conference" />
<!-- common part -->
<meta property="al:web:should_fallback" content="false" />
<meta property="al:web:url"
content="http://www.exampleconference.hu/program" />
<!-- Other headers -->
</head>
<!-- Other HTML content -->
</html>
A tov叩bbiakban az erre a HTML oldalra mutat坦 URL-t haszn叩ljuk alkalmaz叩sok k旦z旦tti deep
linkre. A p辿lda k坦dban specifik叩lt HTML minden tov叩bbi n辿lk端l haszn叩lhat坦 iOS, 辿s android
platformon appok k旦z旦tti navig叩ci坦ra.
Extra adatok 叩tad叩sa App Links-en kereszt端l
Elfordulhat, hogy a m叩sik alkalmaz叩sra mutat坦 link mellet szeretn辿nk egy辿b inform叩ci坦kat
is 叩tvinni. Az App Links biztos鱈t erre egy al_applink_data objektumot, amelyen kereszt端l
叩tvihet端nk b叩rmilyen adatot, amely belef辿r egy JSON strukt炭r叩ba. Na de hogyan is n辿z ki ez a
gyakorlatban? Legyen p辿lda kedv辿辿rt a deep link端nk exampleconference://program amihez hozz叩
adjuk az al叩bbi al_applink_data objektumot.
{
"target_url": "exampleconference://program",
"extras": {
"id": "1234",
"data": "some data"
},
"user_agent": "Bolts iOS 1.1",
"version": "1.0"
}
V辿g端l a deep link URL az al叩bbiak szerint fog kin辿zni:
exampleconference://program?al_applink_data=%7B%0D%0A++%22target_url%22%3
A+%22exampleconference%3A%2F%2Fprogram%22%2C%0D%0A++%22extras%22%3A+
%7B%0D%0A++++%22id%22%3A+%221234%22%2C%0D%0A++++%22data%22%3A+%
22some+data%22%0D%0A++%7D%2C%0D%0A++%22user_agent%22%3A+%22Bolts+iO
S+1.1%22%2C%0D%0A++%22version%22%3A+%221.0%22%0D%0A%7D
App Links kezel辿se az app-ok oldal叩n
Felmer端l ism辿t egy k辿rd辿s, az alkalmaz叩sok mennyire fogj叩k 辿rteni a HTML <head> -ben
tal叩lhat坦 meta adatokat? A v叩lasz roppant egyszer撤 alap esetben sehogyan, ugyan is a
fejleszt dolga lesz lekezelni a meta adatokat 辿s a navig叩ci坦t. Szerencs辿re sem androidon
sem iOS -en nem kell saj叩t magunknak lekezeln端nk ezt, hiszen a Facebook el辿rhetv辿 tette
Bolts elnevez辿s撤 library -辿t, amely t旦bbek k旦z旦tt az App Linking kezel辿s辿t is tartalmazza.
Azok sz叩m叩ra akik nem rendelkeznek App Links metadat叩t tartalmaz坦 HTML oldallal, a
Facebook k辿sz鱈tett egy Mobile Hosting API elnevez辿s撤 szolg叩ltat叩st, amelyet a Facebook
hostingol, egyszer撤 be叩l鱈tani 辿s ugyan 炭gy param辿terezhet al_applink_data param辿terrel,
ahogyan azt kor叩bban az App Links -n辿l mutattam. Bvebb inform叩ci坦t az App Links vagy
Facebook fejleszti oldal叩n tal叩lsz.
Google 辿s a App indexing
A google olyan ir叩nyb坦l k旦zel鱈tette meg a probl辿m叩t, hogy mi lenne ha a keres辿s tal叩lati
list叩j叩t linkeln辿 旦ssze a k辿sz端l辿ken l辿v alkalmaz叩sokkal, m叩r ha van feltelep鱈tve olyan
amely kezelni is tudja. Sajnos ebbl ad坦d坦an, hogy konkr辿tan a keres辿si list叩ra koncentr叩l
nem nevezhet teljesen univerz叩lis megold叩snak. Ha viszont ennek ellen辿re szeretn辿l t旦bb
inform叩ci坦t az App indexingrl itt bvebb inform叩ci坦t is tal叩lhatsz.
Twitter 辿s az App cards
A twitter megold叩sa sem egy sz辿les k旦rben felhaszn叩lhat坦 szabv叩ny, ugyan is az App cards
konkr辿tan arra szolg叩l, hogy a tweeter oldal叩n megoszthatunk olyan k叩rty叩kat, amelyek az
alkalmaz叩sra mutat坦 deep linkek, vagy drive installok. A megval坦s鱈t叩s hasonl坦 az App
Linkshez, hiszen a k叩rtykhoz tartoz坦 deep linkeket meta adatokon kereszt端l 叩ll鱈thatjuk be.
Amennyiben 辿rdekel a megval坦s鱈t叩s bvebben olvashatsz a twitter fejleszti oldal叩n.
Deeplink.me
A v辿g辿re egy sz叩momra 辿rdekes start up megval坦s鱈t叩st hagytam a deeplink.me -t. Szem辿ly
szerint ez 叩ll a legk旦zelebb ahhoz a megval坦s鱈t叩shoz, amelyet hat辿konyan kezeli mind a
web 辿s app, valamint az app 辿s app k旦z旦tti linkel辿st. Regisztr叩ci坦t k旦veten a deeplink.me
hosztolja azokat az url-eket, amelyek kezelik a linkel辿seket, navig叩ci坦kat. T叩mogatja a k辿t
nagyobb plattformot (android, iOS). Sajnos az els 30 ezer klikkig ingyenes, de az alatt 炭gy
gondolom meg辿ri haszn叩lni. Bvebben.

More Related Content

Applink / deeplink

  • 1. Deep links, App links Mi辿rt? Hogyan? Felhaszn叩l坦i szok叩sokat tekintve a vil叩g egyre ink叩bb a mobil eszk旦z旦k haszn叩lat叩nak ir叩ny叩ba tend叩l. Az okos telefonok haszn叩l坦i egyre t旦bb 坦r叩t t旦ltenek el naponta k辿sz端l辿keik nyomkod叩s叩val (k旦z旦ss辿gi oldalak, h鱈r port叩lok stb felkeres辿s辿vel). Ezt figyelembe v辿ve szinte biztos, hogy minden felhaszn叩l坦 tal叩lkozik valamilyen form叩ban olyan hirdet辿ssel, aj叩nl坦val stb amely egy m叩sik tartalomra mutat. P辿ld叩ul tegy端k fel hallgatunk egy zen辿t amit nagyon megtetszett 辿s szeretn辿nk megosztani, vagy elk端ldeni egy ismers端nknek. Az ismers端nk r叩kattint a linkre 辿s m叩r is el辿rheti az adott tartalmat, ugye ez a klasszikus eset. Mi is pontosan a deep link? Mi lenne ha tov叩bb menn辿nk 辿s nem egyszer撤en a b旦ng辿szben nyitn叩 meg a tartalmat, hanem a k辿sz端l辿kre telep鱈tett nat鱈v alkalmaz叩sban egy m叩r j坦l ismert k旦rnyezetben. Ezzel a feltev辿ssel ha sarkalatosan is de eljutottunk a fenti k辿rd辿s magyar叩zat叩hoz, hiszen abban az esetben ha egy alkalmaz叩s valamely tartalm叩ra mutat坦 hivatkoz叩st haszn叩lunk, val坦j叩ban mondhatjuk, hogy egy deep linkinket haszn叩lunk. A deep linkingre jellemz hogy 叩ltal叩ban minden olyan inform叩ci坦t tartalmaz amely sz端ks辿ges ahhoz hogy a tartalom megnyithat坦 legyen az adott alkalmaz叩son bel端l. Fel辿p鱈t辿s辿t tekintve nem v辿letlen端l indultam el egy webes megk旦zel鱈t辿sbl hiszen, haszn叩lhatjuk a j坦l megszokotott URL s辿m叩t p辿ld叩ul.: http://www.exampleconference.hu/program/1234 [schema] :// [host] / [path] / [params] Amennyiben az alkalmaz叩sban enged辿lyezt端k a deep link kezel辿s辿t, akkor a linkre kattint叩st k旦veten eg辿szen egyszer撤en megnyitja a tartalmat az alkalmaz叩son bel端l (pl.: ebben az esetben a 1234-es tartalmat). Amennyiben az URL m旦g旦tt egy val坦s weboldal is tal叩lhat坦 ad sz叩munkra valamif辿le biztons叩got, hiszen ha nincs az alkalmaz叩s telep鱈tve egyszer撤en mintha mi sem t旦rt辿nt volna a b旦ng辿szben megnyitja a tartalmat. M叩sik lehets辿g端nk egy olyan URI s辿ma haszn叩lata, amely szint辿n az alkalmaz叩son bel端li tartalomra mutat, ez esetben viszont nincs semmilyen v辿d h叩l坦nk arra az esetre ha az alkalmaz叩s nem lenne telep鱈tve az eszk旦zre. exampleconference://program/1234 [schema] :// [path] / [params] Azt hogy melyik megold叩st haszn叩ljuk igaz叩b坦l projekt 辿s fejleszt f端gg, viszont 辿rdemes az URL-t 炭gy fel辿p鱈teni, hogy mind a s辿ma neve mind pedig az 炭tvonal param辿terei j坦l 辿rthetek legyenek 辿s lehetleg ne 端tk旦zzenek egy辿b alkalmaz叩sok linkjeivel sem. Hogyan 叩ll鱈thatom be androidon?
  • 2. Egyszer撤en vessz端k a projekt manifest xml 叩lom叩ny叩t 辿s hozz叩 adjuk a s辿m叩nak megfelel intent filltert. Ez az intent filter fogja tartalmazni azokat az inform叩ci坦kat amelyek sz端ks辿gesek az alkalmaz叩s 叩ltal kezelt deep linkek beazonos鱈t叩s叩ra. Az esem辿nyt 辿rtelem szer撤en az az Activity fogja lekezelni amelyikhez bejegyezt端k az intent filltereket, ahogyan az az al叩bbi k坦dr辿szletben is l叩taht坦 (ez lehet egy Activity-ben vagy t旦bben is ak叩r). <activity android:name="hu.exampleconference.MainActivity" android:label="@string/title" > <intent-filter android:label="@string/filter_title_view"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "exampleconference://program" --> <data android:scheme="exampleconference" android:host="program" /> </intent-filter> <intent-filter android:label="@string/filter_title_view"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "http://exampleconference.hu/program" --> <data android:scheme="http" android:host="exampleconference.hu" android:pathPrefix="/program" /> </intent-filter> </activity> Az Activity ak叩r egyszerre t旦bb intent fillter-t is tartalmazhat, ebben az esetben ak叩r t旦bb URL s辿m叩t is kezelni tud. Ahogy a p辿lda is mutatja adott url s辿ma (deep link) regisztr叩l叩sa eset辿n 辿rdemes az al叩bb list叩zott tagekkel param辿teriz叩lni az intent filltert. - action: Az action tagen kereszt端l jelezz端k az os fel辿, hogy ezen Activity fogja kezelni a megadott URL s辿m叩t. - data: Az URL s辿ma defini叩l叩s叩ra szolg叩l坦 tag. Intent fillter -enk辿nt csak egy data taget adhatunk meg. Ahhoz hogy a deep link megfelelk辿ppen m撤k旦dj旦n az android:scheme attributumot mindenk辿ppen tartalmaznia kell. - category: BROWSABLE kateg坦ria eset辿n az alalmaz叩s b旦ng辿szbl is megnyithat坦 deep linken kereszt端l. A DEFAULT kateg坦ria igaz叩b坦l opcion叩lis, viszont n辿lk端le csak k旦zvetlen端l ind鱈thatn叩nk el az alkalmaz叩st. Hogyan kezelj端k le androidon az al叩bbi deep link eset辿n?
  • 3. exampleconference.hu://program?id=1234&data=Program1234 Az Activity ind鱈t叩sakor, le kell ellenrizn端nk, hogy kapott-e olyan intentet, amely valamilyen inform叩ci坦t hordoz. ltal叩ban ezt a m撤veletet az Activity l辿trej旦ttekor v辿gezz端k el, viszont gondolnunk kell arra az eshets辿gre is, hogy mi van ha az Activity m叩r l辿trej旦tt 辿s 炭gy kapja meg az intentet. ppen ez辿rt az al叩bbi k坦d r辿szletet 辿rdemes az onNewIntent() met坦dusba elhelyezni, ami akkor h鱈v坦dik meg, ha az Activity m叩r l叩that坦. Abban az esetre ha 辿ppen nem fut az alkalmaz叩sunk az activity-ben megh鱈vjuk az onNewIntent() met坦dust, amivel v辿g端l is lefedt端nk minden eshets辿get. if (intent.getExtras() != null) { Uri uri = intent.getData(); if (uri != null) { int id= uri.getQueryParameter("id"); String data= uri.getQueryParameter("data"); } } Mi t旦rt辿nik ugyan ekkor iOS-en? Az iOS projektek eset辿n a deep link enged辿lyez辿s辿hez az info.plist f叩jl tartalm叩t kell m坦dos鱈tanunk, az al叩bbiak szerint. - Hozz叩adunk egy 炭j sort: jobb klikk valamelyik lista elemen 辿s Add Row. A felugr坦 list叩b坦l pedig az URL types -ot v叩lasszuk ki. - Nyissuk sz辿t az URL types sort, ami egy Dictionary elemet fog tartalmazni. - Az Item 0 dictonary -t tov叩bb bontva eljutunk az URL Identifier objektumhoz. Ezen kereszt端l 叩ll鱈thatunk be egy egyedi azonos鱈t坦t (aj叩nlott reverse domain form叩tum pl.: hu.exampleconference.appname). - Maradva az Item 0 dictonary-n叩l hozz叩adunk egy 炭j sort, ez炭ttal a felugr坦 list叩b坦l a URL Schemes kiv叩lasztva. Az URL Shecmes egy t旦mb ami lehetv辿 teszi t旦bb URL s辿ma defini叩l叩s叩t is egy alkalmaz叩son bel端l. - Az URL Schemes gyerek辿nek Item 0 be叩ll鱈tjuk az egyedi s辿m叩t pl: exampleconference. Ilyenkor a deep link URL: exampleconference:// Am鱈g az android a hagyom叩nyos URL s辿m叩t is t叩mogatja ezzel szemben az iOS eset辿n alap esetben csak a [schema]:// form叩tum炭 deep linkek t叩mogatottak. Kisebb 端gyk旦d辿ssel azonban r叩b鱈rhatjuk az iOS -es appunkat, hogy kezelni tudja a hagyom叩nyos url-eket is. Hogyan reag叩l r叩 egy iOS App??
  • 4. Az ApplicationDelegate openURL met坦dus叩t haszn叩ljuk fel arra, hogy kinyerj端k azokat az inform叩ci坦kat amellyel az alkalmaz叩s a megfelel tartalomhoz tud navig叩lni. Az openURL url param辿tere fogja tartalmazni 辿rtelem szer撤en a befut坦 url-t -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if([[url host] isEqualToString:@program"]) { NSString * q = [url query]; NSArray * pairs = [q componentsSeparatedByString:@"&"]; NSMutableDictionary * kvPairs = [NSMutableDictionary dictionary]; for (NSString * pair in pairs) { NSArray * bits = [pair componentsSeparatedByString:@"="]; NSString * key = [[bits objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEnco ding]; NSString * value = [[bits objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEnco ding]; [kvPairs setObject:value forKey:key]; } ... } return YES; } Platformok k端l旦nb旦zs辿g辿bl felmer端l probl辿m叩k. Azt mondanom sem kell az elzek alapj叩n j坦l l叩that坦 hogy mind az android mind pedig az iOS elt辿r abban hogy milyen URL s辿m叩kat tud kezelni, vagy 辿ppen milyen m坦don kezelje a helyzetet ha nincs alkalmaz叩s telep鱈tve az eszk旦zre.. Mag叩ra a deep link kezel辿s辿re, illetve egy辿b probl辿m叩k elh叩r鱈t叩s叩ra t旦bb szervezet is dolgozott ki megold叩sokat, szabv叩nyokat mint p辿ld叩ul Facebook, Google, Twitter vagy m叩s start up szevezetek mint p辿ld叩ul a deeplink.me, URX stb. Facebook 辿s az App Links Tavaly 叩prilisban mutatt叩k be 炭j fejleszt辿s端ket (App Links), mellyel azt a c辿lt t撤zt辿k ki, hogy jelentsen megk旦nny鱈ts辿k a nat鱈v alkalmaz叩sok k旦z旦tti deep linkinket a fejlesztk sz叩m叩ra.
  • 5. Haszn叩lat叩hoz els k旦rben sz端ks辿ges egy olyan HTML oldalra amely <head> elem辿t kieg辿sz鱈tj端k a platformnak megfelel App Link metadat叩kkal. Ezek a meta adatok fogj叩k tartalmazni azokat az adatokat, amely a navig叩ci坦hoz sz端ks辿gesek. rdemes be叩ll鱈tani egy fallback url-t arra az esetre ha a c辿l alkalmaz叩s nincs telep鱈tve a k辿sz端l辿ken. Hogy is n辿z ki ez a HTML pontosan android 辿s iOS eset辿n? <html> <head> <!-- android specific part --> <meta property="al:android:package" content="hu.exampleconference" /> <meta property="al:android:url" content="exampleconference://program" /> <meta property="al:android:app_name" content="Example Conference" /> <!-- iOS specific part --> <meta property="al:ios:url" content="exampleconference://program" /> <meta property="al:ios:app_store_id" content="12345" /> <meta property="al:ios:app_name" content="Example Conference" /> <!-- common part --> <meta property="al:web:should_fallback" content="false" /> <meta property="al:web:url" content="http://www.exampleconference.hu/program" /> <!-- Other headers --> </head> <!-- Other HTML content --> </html> A tov叩bbiakban az erre a HTML oldalra mutat坦 URL-t haszn叩ljuk alkalmaz叩sok k旦z旦tti deep linkre. A p辿lda k坦dban specifik叩lt HTML minden tov叩bbi n辿lk端l haszn叩lhat坦 iOS, 辿s android platformon appok k旦z旦tti navig叩ci坦ra. Extra adatok 叩tad叩sa App Links-en kereszt端l Elfordulhat, hogy a m叩sik alkalmaz叩sra mutat坦 link mellet szeretn辿nk egy辿b inform叩ci坦kat is 叩tvinni. Az App Links biztos鱈t erre egy al_applink_data objektumot, amelyen kereszt端l 叩tvihet端nk b叩rmilyen adatot, amely belef辿r egy JSON strukt炭r叩ba. Na de hogyan is n辿z ki ez a gyakorlatban? Legyen p辿lda kedv辿辿rt a deep link端nk exampleconference://program amihez hozz叩 adjuk az al叩bbi al_applink_data objektumot. { "target_url": "exampleconference://program", "extras": { "id": "1234", "data": "some data" },
  • 6. "user_agent": "Bolts iOS 1.1", "version": "1.0" } V辿g端l a deep link URL az al叩bbiak szerint fog kin辿zni: exampleconference://program?al_applink_data=%7B%0D%0A++%22target_url%22%3 A+%22exampleconference%3A%2F%2Fprogram%22%2C%0D%0A++%22extras%22%3A+ %7B%0D%0A++++%22id%22%3A+%221234%22%2C%0D%0A++++%22data%22%3A+% 22some+data%22%0D%0A++%7D%2C%0D%0A++%22user_agent%22%3A+%22Bolts+iO S+1.1%22%2C%0D%0A++%22version%22%3A+%221.0%22%0D%0A%7D App Links kezel辿se az app-ok oldal叩n Felmer端l ism辿t egy k辿rd辿s, az alkalmaz叩sok mennyire fogj叩k 辿rteni a HTML <head> -ben tal叩lhat坦 meta adatokat? A v叩lasz roppant egyszer撤 alap esetben sehogyan, ugyan is a fejleszt dolga lesz lekezelni a meta adatokat 辿s a navig叩ci坦t. Szerencs辿re sem androidon sem iOS -en nem kell saj叩t magunknak lekezeln端nk ezt, hiszen a Facebook el辿rhetv辿 tette Bolts elnevez辿s撤 library -辿t, amely t旦bbek k旦z旦tt az App Linking kezel辿s辿t is tartalmazza. Azok sz叩m叩ra akik nem rendelkeznek App Links metadat叩t tartalmaz坦 HTML oldallal, a Facebook k辿sz鱈tett egy Mobile Hosting API elnevez辿s撤 szolg叩ltat叩st, amelyet a Facebook hostingol, egyszer撤 be叩l鱈tani 辿s ugyan 炭gy param辿terezhet al_applink_data param辿terrel, ahogyan azt kor叩bban az App Links -n辿l mutattam. Bvebb inform叩ci坦t az App Links vagy Facebook fejleszti oldal叩n tal叩lsz. Google 辿s a App indexing A google olyan ir叩nyb坦l k旦zel鱈tette meg a probl辿m叩t, hogy mi lenne ha a keres辿s tal叩lati list叩j叩t linkeln辿 旦ssze a k辿sz端l辿ken l辿v alkalmaz叩sokkal, m叩r ha van feltelep鱈tve olyan amely kezelni is tudja. Sajnos ebbl ad坦d坦an, hogy konkr辿tan a keres辿si list叩ra koncentr叩l nem nevezhet teljesen univerz叩lis megold叩snak. Ha viszont ennek ellen辿re szeretn辿l t旦bb inform叩ci坦t az App indexingrl itt bvebb inform叩ci坦t is tal叩lhatsz. Twitter 辿s az App cards A twitter megold叩sa sem egy sz辿les k旦rben felhaszn叩lhat坦 szabv叩ny, ugyan is az App cards konkr辿tan arra szolg叩l, hogy a tweeter oldal叩n megoszthatunk olyan k叩rty叩kat, amelyek az alkalmaz叩sra mutat坦 deep linkek, vagy drive installok. A megval坦s鱈t叩s hasonl坦 az App Linkshez, hiszen a k叩rtykhoz tartoz坦 deep linkeket meta adatokon kereszt端l 叩ll鱈thatjuk be. Amennyiben 辿rdekel a megval坦s鱈t叩s bvebben olvashatsz a twitter fejleszti oldal叩n. Deeplink.me
  • 7. A v辿g辿re egy sz叩momra 辿rdekes start up megval坦s鱈t叩st hagytam a deeplink.me -t. Szem辿ly szerint ez 叩ll a legk旦zelebb ahhoz a megval坦s鱈t叩shoz, amelyet hat辿konyan kezeli mind a web 辿s app, valamint az app 辿s app k旦z旦tti linkel辿st. Regisztr叩ci坦t k旦veten a deeplink.me hosztolja azokat az url-eket, amelyek kezelik a linkel辿seket, navig叩ci坦kat. T叩mogatja a k辿t nagyobb plattformot (android, iOS). Sajnos az els 30 ezer klikkig ingyenes, de az alatt 炭gy gondolom meg辿ri haszn叩lni. Bvebben.