Skip to content

Commit 7668f84

Browse files
committed
dynamic links post added
1 parent 9c2756e commit 7668f84

File tree

4 files changed

+92
-0
lines changed

4 files changed

+92
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
---
2+
layout: post
3+
title: "Dynamic Links"
4+
date: 2019-05-06
5+
categories: ["Firebase"]
6+
image: firebase/dynamic_links
7+
github: firebase/tree/master/dynamic_links
8+
description: "Firebase"
9+
version: Firebase-Dynamic-Links 16.1
10+
keywords: "firebase, link, łącze, internetowe, odnośnik, dynamiczne, dynamic, deep, web, udostępnianie, share, android, programowanie, programming"
11+
---
12+
13+
## Przeznaczenie
14+
`Dynamic Links` jest sposobem na generowanie i przetwarzanie dynamicznych łączy internetowych działających w dowolnie zaprojektowany sposób niezależnie od platformy. W przypadku uruchomienia łącza na urządzeniu z systemem `Android` i zainstalowaną aplikacją obsługującą ustalony format Dynamic Links otwierany jest oczekiwany ekran z podaną zawartością. Gdy urządzenie nie posiada wskazanej aplikacji lub usług `Play Services` wówczas użytkownik może zostać przekierowany do właściwej strony `Play Store` w celu zainstalowania brakującej aplikacji. Jeśli łącze zostanie otworzone w przeglądarce urządzenia bądź komputera nastąpi wyświetlenie strony internetowej. Dynamic Links mogą zostać wykorzystane m.in. w zadaniu konwersji użytkowników z internetowej do mobilnej wersji aplikacji, przeprowadzaniu kampanii marketingowej czy też dzieleniu treści z innym użytkownikami. Tworzenie łączy może odbywać się z poziomu `konsoli Firebase`, ręczne formowanie `URL` z parametrami, programowo z kodzie aplikacji przy użyciu `Android API` czy `REST API`.
15+
16+
## Tworzenie
17+
Generowania łącza z poziomu konsoli Firebase pozwala na wybranie niestandardowego linku oraz śledzenia skuteczności co z uwagi na łatwą konfiguracje jest przydatne przede wszystkim w sytuacji tworzenia odnośnika promocyjnego do udostępnienia w mediach społecznościowych. Korzystanie z `Dynamic Link Builder API` po stronie kodu aplikacji jest preferowanym sposobem w większości sytuacji, a przede wszystkim w zadaniach udostępniania i przesyłania treści między użytkownikami oraz tam gdzie potrzebne jest wiele linków. Jeśli projekt nie wymaga śledzenia i analizy danych, łącza mogą zostać stworzone także ręcznie przy wykorzystaniu parametrów w adresie URL co pozwala na minimalizacje ruchu sieciowego.
18+
19+
## Budowniczy
20+
Aby utworzyć obiekt dynamicznego łącza `DynamicLink` przy użyciu API budowniczego należy wywołać metodę `createDynamicLink`, dokonać konfiguracji dla wybranych platform i następnie wywołać `buildDynamicLink`.
21+
22+
{% highlight kotlin %}
23+
private fun prepareDynamicLink() {
24+
val dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
25+
.setLink(Uri.parse("http://www.androidcode.pl/"))
26+
.setDomainUriPrefix("http://androidcode.page.link")
27+
//set parameters for target platforms like Android, iOS, GoogleAnalytics or provide social media metatags
28+
.setAndroidParameters(DynamicLink.AndroidParameters.Builder("pl.androidcode")
29+
.setMinimumVersion(2) //only for apps with version 2 code
30+
.build())
31+
.setSocialMetaTagParameters(DynamicLink.SocialMetaTagParameters.Builder()
32+
.setTitle("Title")
33+
.setDescription("Description")
34+
.build())
35+
.buildDynamicLink()
36+
37+
val dynamicLinkUri = dynamicLink.uri
38+
39+
//the link could be like below:
40+
//http://androidcode.page.link/?link=http://www.androidcode.pl&apn=pl.androidcode&amv=2&st=title&sd=description
41+
}
42+
{% endhighlight %}
43+
44+
Skrócona wersja odnośnika składa się domyślnie 17 znakowego unikalnego sufiksu co wymaga zapytania sieciowego oraz obiektu słuchacza i tworzona jest przy użyciu metody `buildShortDynamicLink`.
45+
46+
{% highlight kotlin %}
47+
private fun prepareShortDynamicLink() {
48+
val shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
49+
.setLink(Uri.parse("http://www.androidcode.pl/"))
50+
.setDomainUriPrefix("http://androidcode.page.link")
51+
.setAndroidParameters(DynamicLink.AndroidParameters.Builder("pl.androidcode").build())
52+
.buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT) //pass this arg to get shorten sufix
53+
.addOnSuccessListener { result ->
54+
val shortLink = result.shortLink
55+
val previewLink = result.previewLink
56+
}.addOnFailureListener {
57+
//some action
58+
}
59+
60+
//the link could be like below:
61+
//http://androidcode.page.link/abcd
62+
}
63+
{% endhighlight %}
64+
65+
## Odbieranie
66+
Aby odebrać i przetworzyć otrzymany `DynamicLink` należy dodać w `AndroidManifest` poniższy wpis konfiguracyjny `intent-filter` do aktywności odpowiedzialnej za przechwytywanie linków (`Deep Link` i `App Link`), wywołać metodę `getDynamicLink` oraz wykonać akcję na podstawie odebranych danych. Należy mieć na uwadzę, że wykonanie metody `getDynamicLink` czyści przekazane dane więc jej użycie jest jednorazowe. Ponadto dodanie w `AndroidManifest` obsługi `Android App Links` umożliwia pominięcie dialogu wyboru aplikacji która ma obsłużyć odnośnik i bezpośrednie skierowanie do wyznaczonej aplikacji (co w przypadku `Deep Links` może nie być możliwe).
67+
68+
{% highlight xml %}
69+
<!-- autoVerify flags is responsible for handling Dynamic Links using App Links -->
70+
<intent-filter android:autoVerify="true">
71+
<action android:name="android.intent.action.VIEW"/>
72+
<category android:name="android.intent.category.DEFAULT"/>
73+
<category android:name="android.intent.category.BROWSABLE"/>
74+
<data android:host="androidcode.pl" android:scheme="http"/>
75+
</intent-filter>
76+
{% endhighlight %}
77+
78+
{% highlight kotlin %}
79+
private fun receiveDynamicLink() {
80+
FirebaseDynamicLinks.getInstance()
81+
.getDynamicLink(intent)
82+
.addOnSuccessListener(this) { pendingDynamicLinkData ->
83+
// Get deep link from result (may be null if no link is found)
84+
var deepLink: Uri? = null
85+
if (pendingDynamicLinkData != null) {
86+
deepLink = pendingDynamicLinkData.link
87+
}
88+
}.addOnFailureListener {
89+
//some action
90+
}
91+
}
92+
{% endhighlight %}
303 KB
Loading
12 KB
Loading
30.8 KB
Loading

0 commit comments

Comments
 (0)