I'm trying to launch my Android App, using deep linking. Basically, the users will receive emails with links, when the user clicked the link, the App should launch. I know how to do the basic deep linking, however, I want to launch the actual App not just a specific activity. My deep linking scheme is something like "mydeeplinking" and in the email is like "mydeeplinking://". I am looking for Something similar to the iOS deep linking, which launch the entire App. Any help would be appreciated. Thanks in advance.
-
You should launch the launcher activity, as if the user clicked on the icon – Chol Aug 04 '16 at 15:56
-
1What you are looking for is intent-filters https://stackoverflow.com/questions/1609573/intercepting-links-from-the-browser-to-open-my-android-app – kira_codes Aug 04 '16 at 15:56
-
1please consider accepting an answer if it helped you – SoroushA Aug 04 '16 at 19:19
2 Answers
Basically, all you need to do is use intent-filter
to tell Android what type of data should be routed to your app.
AndroidManifest.xml:
<activity android:name="com.example.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="www.example.com" />
<data android:path="/" />
<data android:path="/map" />
</intent-filter>
</activity>
This will launch your MainActivity when the user clicks any of these links:
http://www.example.com/
https://www.example.com/
http://www.example.com/map
https://www.example.com/map
-
What would happen if two APKs shares the same deelink Schema | Host | Path? Which Activity will pop up if that overlapping exists? – aDoN Sep 04 '20 at 11:23
-
Android will ask the user which app they want to handle it with. Either one time or always. – SoroushA Sep 05 '20 at 14:15
Deep linking is greatly enhanced by Firebase. It's a little hard to get started, but it works great! Check this link for an example.
Comparing this deep linking to iOS is where the confusion may come in, because theirs works differently. Android has always been able to push information from one app to another and even pull from the web, which is what iOS is doing. That isn't deep linking per-se. It can go MUCH further than that- it is meant to provide a personalized app experience even before a user creates a profile (or something similar). It's also important to note that deep linking holds onto this personalized info even through the installation of an app and opens the app with whatever that info was! It's not just an intent! Your question has to do with URI schemes. Maybe this will help if you still agree that you're looking for deep linking.
If you are simply looking to launch an app (already installed on the users device or not), intent filters are the way to go, and intents can pass information. If you are wanting a user to use an activity in an app without ever installing it, android instant apps is the right choice. If you're looking for a way to pass information "deeply" from the user's email or internet to your app, deep linking is advised.
Intent filters can be used to open some apps from web pages. When a link is selected that could be opened in a browser or in an app (or multiple apps), a box will pull up from the bottom of the phone's screen, asking for the user's preference for the default to open in on future clicks. (see image below) The web site's javascript may have to be altered to detect the user's operating system and send the proper URL call. iOS works a little differently.
Here is how to use an intent filter. It has some extra code that you may find useful..
public void startNewActivity(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent == null) {
// brings user to the market if app is not installed already
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + packageName));
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // opens a new "page" instead of overlapping the same app
context.startActivity(intent);
}
If you need to pass data at the same time, use intent.putExtra("name", "value");

- 3,267
- 1
- 19
- 27