使用深层链接启动Android App

时间:2016-08-04 15:53:38

标签: java android android-activity deep-linking

我尝试使用深层链接启动Android应用。基本上,用户将收到带链接的电子邮件,当用户点击链接时,应该启动应用程序。 我知道如何进行基本的深层链接,但是,我想要启动实际的App而不仅仅是一个特定的活动。我的深层链接方案类似于" mydeeplinking"在电子邮件中就像" mydeeplinking://"。 我正在寻找类似于iOS深层链接的东西,它推出了整个App。 任何帮助,将不胜感激。 提前致谢。

2 个答案:

答案 0 :(得分:3)

基本上,您只需使用intent-filter告诉Android应将哪种类型的数据路由到您的应用。

的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>

当用户点击以下任何链接时,这将启动您的MainActivity:

http://www.example.com/
https://www.example.com/
http://www.example.com/map
https://www.example.com/map

答案 1 :(得分:1)

Firebase大大增强了深层链接。它有点难以入手,但效果很好!请查看此link以获取示例。

将这种深层链接与iOS进行比较可能会产生混淆,因为它们的工作方式不同。 Android一直能够将信息从一个应用程序推送到另一个应用程序,甚至可以从网络中获取,这正是iOS正在做的事情。这不是深层链接本身。它可以比这更进一步 - 它甚至在用户创建配置文件(或类似的东西)之前提供个性化的应用程序体验。同样重要的是要注意,即使通过安装应用程序,深层链接也会保留此个性化信息,并打开应用程序,无论该信息是什么!这不仅仅是一个意图!您的问题与URI方案有关。如果你仍然同意你正在寻找深层链接,那么this可能会有所帮助。

如果您只是想要启动应用程序(已经安装在用户设备上),那么可以使用意图过滤器,并且意图可以传递信息。如果您希望用户在应用程序中使用活动而不安装它,那么Android即时应用程序是正确的选择。如果您正在寻找一种方法将信息从用户的电子邮件或互联网“深入”传递到您的应用,建议进行深层链接。

Intent过滤器可用于从网页打开某些应用。当选择可以在浏览器或应用程序(或多个应用程序)中打开的链接时,将从手机屏幕底部拉出一个框,询问用户偏好默认情况下在未来点击时打开。 (见下图)可能必须更改网站的javascript以检测用户的操作系统并发送正确的URL调用。 iOS的工作方式略有不同。

choose default app

以下是如何使用intent过滤器。它有一些你可能会觉得有用的额外代码..

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);
}

如果您需要同时传递数据,请使用intent.putExtra("name", "value");