Android深入链接到应用程序

sko*_*lis 15 android android-intent

我正在尝试创建一个可以通过电子邮件发送的链接,当安装了我的应用程序的Android设备上打开时,将自动在我的应用程序中打开正确的页面.

我已经通过几种不同的方式部分地工作,但发现了一些问题,我想知道是否有人有解决方案.

尝试1:使用自定义方案:myapp:// someItem.这有效,但有些电子邮件应用程序不会将此视为链接,因为它不是http.有没有办法强制应用程序将其视为有效链接?例如gmail.

尝试2:使用与主机的http链接:http://com.myapp/someItem.这也可以,但我的应用程序最终注册处理所有不理想的http链接.

尝试3:使用带主机和端口的http链接:http://com.myapp:2345/someItem.这是我目前的解决方案,唯一的缺点是当链接打开时,它仍然提供在浏览器中打开链接的选项.有没有办法阻止浏览器尝试打开我的链接?

有没有人有办法制作所有应用程序都会被视为链接的链接,打开它们时浏览器也会忽略这些链接?

bit*_*bhi 5

要回答您的问题,下面是清单中的示例意图过滤器.

<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:host="www.example.com"
        android:pathPrefix="/home"
        android:scheme="https"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

所以基本上,当有人点击任何以http://www.example.com/home开头的链接时,他/她将可以选择使用您的应用程序和浏览器应用程序打开它.您必须处理活动中的意图

该方案也可以是任何方案,但谷歌推荐使用http方案,这样您的应用和浏览器应用都可以收听深度链接网址上的点击.

注意:如果您想要应用程序链接,请不要忘记在您的网页中添加android-app:// yourpackage name/http/www.example.com/home/....


Ash*_*ava 5

1-设置自定义URL方案,例如http://example.com

例如,URL http://example.com/?id=95将打开相关的FAQ,URL URL http://example.com/?sectionid=8(其中sectionid是任何Section的发布ID) ,将打开相关部分。

2-在您AndroidManifest.xmlDeepLinkActivity(中定义将接收URL数据的那一个:

<activity android:name="com.example.shilpi.deeplinkingsample.DeepLinkActivity">
            <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" android:host="example.com"/>
             </intent-filter>
        </activity>
Run Code Online (Sandbox Code Playgroud)

3-覆盖onResume()您的DeepLinkActivity类的方法:

@Override
protected void onResume() {
    super.onResume();

    Intent in = getIntent();
    Uri data = in.getData();
    System.out.println("deeplinkingcallback   :- "+data);
}
Run Code Online (Sandbox Code Playgroud)

  • 尽管此答案在技术上可能是正确的,但值得解释一下它的作用来补充您的答案。这将为OP和未来的访客提供帮助。就目前而言,这只是一个代码转储。 (3认同)

mik*_*ehl 4

据我所知,这项技术实际上似乎在 Android 上有效:

http://mobile.dzone.com/news/custom-url-schemes-phonegap

我还没有在真正的生产应用程序中尝试过它,所以你的里程可能会有所不同。我所做的是使用创建隐藏 iframe 的技术并尝试将位置设置为自定义 url 方案,并从文档的 onload 调用该函数。到目前为止我所看到的(我只在 2.2 和 2.3 设备上测试过)是,如果我安装了一个处理自定义方案的应用程序,该应用程序将启动,如果没有,页面将呈现。

相对干净的单个 URL 可以涵盖这两种情况,并且不会破坏 URL 的 Twitter 分享等内容。如果请求来自看起来可能支持应用程序以降低不兼容桌面行为风险的平台,则真正的生产版本可能只会执行隐藏的 iframe 探测。