【问题标题】:Launch the Android App using deep linking使用深度链接启动 Android 应用
【发布时间】:2016-08-04 15:53:38
【问题描述】:

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

【问题讨论】:

  • 你应该启动启动器活动,就像用户点击图标一样
  • 你要找的是intent-filters *.com/questions/1609573/…
  • 如果对您有帮助,请考虑接受答案

标签: java android android-activity deep-linking


【解决方案1】:

基本上,您需要做的就是使用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

【讨论】:

  • 如果两个 APK 共享同一个 deelink Schema 会发生什么 |主持人 |小路?如果存在重叠,会弹出哪个 Activity?
  • Android 会询问用户他们想用哪个应用来处理它。一次或总是。
【解决方案2】:

Firebase 极大地增强了深度链接。开始有点难,但效果很好!以link 为例。

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

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

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

这里是如何使用意图过滤器。它有一些你可能会觉得有用的额外代码..

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

【讨论】:

  • 感谢您的贡献和有用的信息。
最近更新 更多