Skip to content

Commit b8425d0

Browse files
authored
Merge pull request #1421 from firebase/add_generate_link_to_quickstart
Adds create short link functionality to FDL quickstart
2 parents 40fdb2d + 5045dbb commit b8425d0

File tree

4 files changed

+171
-37
lines changed

4 files changed

+171
-37
lines changed

dynamiclinks/app/src/main/java/com/google/firebase/quickstart/deeplinks/java/MainActivity.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@
1919
import android.content.Intent;
2020
import android.net.Uri;
2121
import android.os.Bundle;
22+
import android.widget.Button;
2223
import androidx.annotation.NonNull;
2324
import androidx.annotation.VisibleForTesting;
25+
import com.google.android.gms.tasks.OnCompleteListener;
26+
import com.google.android.gms.tasks.Task;
2427
import com.google.android.material.snackbar.Snackbar;
2528
import androidx.appcompat.app.AlertDialog;
2629
import androidx.appcompat.app.AppCompatActivity;
@@ -31,8 +34,10 @@
3134
import com.google.android.gms.tasks.OnFailureListener;
3235
import com.google.android.gms.tasks.OnSuccessListener;
3336
import com.google.firebase.dynamiclinks.DynamicLink;
37+
import com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters;
3438
import com.google.firebase.dynamiclinks.FirebaseDynamicLinks;
3539
import com.google.firebase.dynamiclinks.PendingDynamicLinkData;
40+
import com.google.firebase.dynamiclinks.ShortDynamicLink;
3641
import com.google.firebase.quickstart.deeplinks.R;
3742
import com.google.firebase.quickstart.deeplinks.databinding.ActivityMainBinding;
3843

@@ -66,6 +71,24 @@ public void onClick(View v) {
6671
shareDeepLink(deepLink.toString());
6772
}
6873
});
74+
75+
// create a short link and display it in the UI
76+
binding.buttonShareShortLink.setOnClickListener(new View.OnClickListener() {
77+
@Override
78+
public void onClick(View v) {
79+
TextView shortLinkTextView = findViewById(R.id.shortLinkViewSend);
80+
String shortDynamicLink = shortLinkTextView.getText().toString();
81+
shareDeepLink(shortDynamicLink);
82+
}
83+
});
84+
85+
binding.buttonGenerateShortLink.setOnClickListener(new View.OnClickListener() {
86+
@Override
87+
public void onClick(View v) {
88+
Uri deepLink = Uri.parse(DEEP_LINK_URL);
89+
buildShortLinkFromParams(deepLink, 0);
90+
}
91+
});
6992
// [END_EXCLUDE]
7093

7194
// [START get_deep_link]
@@ -165,4 +188,42 @@ private void validateAppCode() {
165188
.create().show();
166189
}
167190
}
191+
192+
public void generateShortLink() {
193+
Uri deepLink = Uri.parse(DEEP_LINK_URL);
194+
buildShortLinkFromParams(deepLink, 0);
195+
}
196+
197+
@VisibleForTesting
198+
public void buildShortLinkFromParams(@NonNull Uri deepLink, int minVersion) {
199+
String uriPrefix = getString(R.string.dynamic_links_uri_prefix);
200+
201+
// Set dynamic link parameters:
202+
// * URI prefix (required)
203+
// * Android Parameters (required)
204+
// * Deep link
205+
FirebaseDynamicLinks.getInstance()
206+
.createDynamicLink()
207+
.setDomainUriPrefix(uriPrefix)
208+
.setAndroidParameters(
209+
new AndroidParameters.Builder()
210+
.setMinimumVersion(minVersion)
211+
.build())
212+
.setLink(deepLink)
213+
.buildShortDynamicLink()
214+
.addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
215+
@Override
216+
public void onComplete(@NonNull Task<ShortDynamicLink> task) {
217+
if (task.isSuccessful()) {
218+
// Short link created
219+
Uri shortDynamicLink = task.getResult().getShortLink();
220+
TextView shortLinkTextView = findViewById(R.id.shortLinkViewSend);
221+
shortLinkTextView.setText(shortDynamicLink.toString());
222+
} else {
223+
// Error
224+
Log.e(TAG, task.getException().getMessage());
225+
}
226+
}
227+
});
228+
}
168229
}

dynamiclinks/app/src/main/java/com/google/firebase/quickstart/deeplinks/kotlin/MainActivity.kt

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@ import com.google.android.material.snackbar.Snackbar
88
import androidx.appcompat.app.AlertDialog
99
import androidx.appcompat.app.AppCompatActivity
1010
import android.util.Log
11+
import android.widget.TextView
1112
import com.google.firebase.dynamiclinks.PendingDynamicLinkData
1213
import com.google.firebase.dynamiclinks.ktx.androidParameters
1314
import com.google.firebase.dynamiclinks.ktx.dynamicLink
1415
import com.google.firebase.dynamiclinks.ktx.dynamicLinks
16+
import com.google.firebase.dynamiclinks.ktx.shortLinkAsync
17+
import com.google.firebase.dynamiclinks.ktx.component1
18+
import com.google.firebase.dynamiclinks.ktx.component2
1519
import com.google.firebase.ktx.Firebase
1620
import com.google.firebase.quickstart.deeplinks.R
1721
import com.google.firebase.quickstart.deeplinks.databinding.ActivityMainBinding
1822

1923
class MainActivity : AppCompatActivity() {
20-
2124
// [START on_create]
2225
override fun onCreate(savedInstanceState: Bundle?) {
2326
// [START_EXCLUDE]
@@ -39,6 +42,17 @@ class MainActivity : AppCompatActivity() {
3942
binding.buttonShare.setOnClickListener { shareDeepLink(newDeepLink.toString()) }
4043
// [END_EXCLUDE]
4144

45+
binding.buttonShareShortLink.setOnClickListener {
46+
val shortLinkTextView = findViewById<TextView>(R.id.shortLinkViewSend);
47+
val shortDynamicLink = shortLinkTextView.text;
48+
shareDeepLink(shortDynamicLink.toString());
49+
}
50+
51+
binding.buttonGenerateShortLink.setOnClickListener {
52+
val deepLink = Uri.parse(DEEP_LINK_URL);
53+
buildShortLinkFromParams(deepLink, 0);
54+
}
55+
4256
// [START get_deep_link]
4357
Firebase.dynamicLinks
4458
.getDynamicLink(intent)
@@ -106,6 +120,28 @@ class MainActivity : AppCompatActivity() {
106120
return link.uri
107121
}
108122

123+
@VisibleForTesting
124+
fun buildShortLinkFromParams(deepLink: Uri, minVersion: Int) {
125+
val uriPrefix = getString(R.string.dynamic_links_uri_prefix)
126+
127+
// Set dynamic link parameters:
128+
// * URI prefix (required)
129+
// * Android Parameters (required)
130+
// * Deep link
131+
Firebase.dynamicLinks.shortLinkAsync {
132+
link = deepLink
133+
domainUriPrefix = uriPrefix
134+
androidParameters {
135+
minimumVersion = minVersion
136+
}
137+
}.addOnSuccessListener { (shortLink, flowchartLink) ->
138+
val shortLinkTextView = findViewById<TextView>(R.id.shortLinkViewSend);
139+
shortLinkTextView.text = shortLink.toString();
140+
}.addOnFailureListener(this) { e ->
141+
Log.e(TAG, e.toString());
142+
}
143+
}
144+
109145
private fun shareDeepLink(deepLink: String) {
110146
val intent = Intent(Intent.ACTION_SEND)
111147
intent.type = "text/plain"

dynamiclinks/app/src/main/res/layout/activity_main.xml

Lines changed: 67 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,37 +16,71 @@
1616
android:layout_marginBottom="16dp"
1717
android:src="@drawable/firebase_lockup_400"/>
1818

19-
<TextView
20-
style="@style/TextAppearance.AppCompat.Medium"
21-
android:layout_width="wrap_content"
22-
android:layout_height="wrap_content"
23-
android:layout_marginBottom="8dp"
24-
android:text="@string/title_receive"/>
25-
26-
<TextView
27-
android:id="@+id/linkViewReceive"
28-
android:layout_width="wrap_content"
29-
android:layout_height="wrap_content"
30-
android:autoLink="web"
31-
android:text="@string/msg_no_deep_link"/>
32-
33-
<TextView
34-
style="@style/TextAppearance.AppCompat.Medium"
35-
android:layout_width="wrap_content"
36-
android:layout_height="wrap_content"
37-
android:layout_marginBottom="8dp"
38-
android:layout_marginTop="24dp"
39-
android:text="@string/title_send"/>
40-
41-
<TextView
42-
android:id="@+id/linkViewSend"
43-
android:layout_width="wrap_content"
44-
android:layout_height="wrap_content"
45-
tools:text="https://abc.xyz/foo"/>
46-
47-
<Button
48-
android:id="@+id/buttonShare"
49-
android:layout_width="@dimen/standard_field_width"
50-
android:layout_height="wrap_content"
51-
android:text="@string/share" />
19+
<LinearLayout
20+
android:layout_width="match_parent"
21+
android:layout_height="80dp"
22+
android:orientation="vertical">
23+
<TextView
24+
style="@style/TextAppearance.AppCompat.Medium"
25+
android:layout_width="wrap_content"
26+
android:layout_height="wrap_content"
27+
android:layout_marginBottom="8dp"
28+
android:text="@string/title_receive" />
29+
<TextView
30+
android:id="@+id/linkViewReceive"
31+
android:layout_width="wrap_content"
32+
android:layout_height="wrap_content"
33+
android:autoLink="web"
34+
android:text="@string/msg_no_deep_link" />
35+
</LinearLayout>
36+
<LinearLayout
37+
android:layout_width="match_parent"
38+
android:layout_height="164dp"
39+
android:orientation="vertical">
40+
<TextView
41+
style="@style/TextAppearance.AppCompat.Medium"
42+
android:layout_width="wrap_content"
43+
android:layout_height="wrap_content"
44+
android:layout_marginTop="24dp"
45+
android:layout_marginBottom="8dp"
46+
android:text="@string/dynamic_link" />
47+
<TextView
48+
android:id="@+id/linkViewSend"
49+
android:layout_width="wrap_content"
50+
android:layout_height="wrap_content"
51+
tools:text="https://abc.xyz/foo" />
52+
<Button
53+
android:id="@+id/buttonShare"
54+
android:layout_width="match_parent"
55+
android:layout_height="wrap_content"
56+
android:text="@string/share_dynamic_link" />
57+
</LinearLayout>
58+
<LinearLayout
59+
android:layout_width="match_parent"
60+
android:layout_height="298dp"
61+
android:orientation="vertical">
62+
<TextView
63+
android:id="@+id/textView"
64+
style="@style/TextAppearance.AppCompat.Medium"
65+
android:layout_width="match_parent"
66+
android:layout_height="wrap_content"
67+
android:layout_marginTop="24dp"
68+
android:layout_marginBottom="8dp"
69+
android:text="@string/short_dynamic_link" />
70+
<TextView
71+
android:id="@+id/shortLinkViewSend"
72+
android:layout_width="match_parent"
73+
android:layout_height="wrap_content"
74+
tools:text="https://abc.xyz/foo" />
75+
<Button
76+
android:id="@+id/buttonGenerateShortLink"
77+
android:layout_width="match_parent"
78+
android:layout_height="wrap_content"
79+
android:text="@string/generate_short_link" />
80+
<Button
81+
android:id="@+id/buttonShareShortLink"
82+
android:layout_width="match_parent"
83+
android:layout_height="wrap_content"
84+
android:text="@string/share_short_link" />
85+
</LinearLayout>
5286
</LinearLayout>
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
<resources>
22
<string name="app_name">Firebase Dynamic Links</string>
33

4-
<string name="share">Share</string>
5-
<string name="title_receive">Receive</string>
6-
<string name="title_send">Send</string>
4+
<string name="share_dynamic_link">Share Dynamic Link</string>
5+
<string name="share_short_link">Share Short Dynamic Link</string>
6+
<string name="generate_short_link">Generate Short Dynamic Link</string>
7+
<string name="dynamic_link">Dynamic Link</string>
8+
<string name="short_dynamic_link">Short Dynamic Link</string>
9+
<string name="title_receive">Deeplink Received</string>
710
<string name="msg_no_deep_link">No deep link received.</string>
811
</resources>

0 commit comments

Comments
 (0)