English 中文(简体)
Android深度链接到应用程序
原标题:Android deep linking into an app

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

我已经以几种不同的方式完成了部分工作,但发现了一些问题,我想知道是否有人能解决这些问题。

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

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

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

是否有人有办法创建链接,这些链接将被所有应用程序视为链接,并且在打开时也会被浏览器忽略?

最佳回答

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

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

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

相对干净的单一URL涵盖了这两种情况,并且不会破坏Twitter共享URL之类的东西。如果请求来自某个平台,而该平台可能支持应用程序以降低不兼容桌面行为的风险,那么真正的生产版本可能只会执行隐藏的iframe探测。

问题回答

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

例如,URLhttp://example.com/?id=95,将打开相关的常见问题解答和URLhttp://example.com/?sectionid=8(其中sectionid是任何节的发布id),将打开相关节。

2-在AndroidManifest.xml中定义DeepLinkActivity(将接收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>

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

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

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

为了回答您的问题,下面是清单中的意向过滤器示例。

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

So basically, when some one clicks on any link starting with http://www.example.com/home, he/she will be given the option to open it with your app along with the Browser apps. You have to handle the intent in the activity

此外,该方案可以是任何方案,但http方案是谷歌推荐的,这样你的应用程序和浏览器应用程序都可以监听深度链接url上的点击。

注意:不要忘记添加android-app://yourpackagename/http://www.example.com/home/…,如果您想要应用程序链接的话。

如果你可以使用服务器端的东西,也许你可以有一个常规页面,在访问时从浏览器跳转到自定义方案链接?这还有一个额外的优点,即可以判断应用程序是否未安装并提示安装。

不过,它并不能解决在浏览器中打开链接的问题。我能想到的唯一真正的解决方案是一个跳转到适当应用程序的链接处理程序。那么问题将是允许用户更改首选浏览器。。。





相关问题
Android - ListView fling gesture triggers context menu

I m relatively new to Android development. I m developing an app with a ListView. I ve followed the info in #1338475 and have my app recognizing the fling gesture, but after the gesture is complete, ...

AsyncTask and error handling on Android

I m converting my code from using Handler to AsyncTask. The latter is great at what it does - asynchronous updates and handling of results in the main UI thread. What s unclear to me is how to handle ...

Android intent filter for a particular file extension?

I want to be able to download a file with a particular extension from the net, and have it passed to my application to deal with it, but I haven t been able to figure out the intent filter. The ...

Android & Web: What is the equivalent style for the web?

I am quite impressed by the workflow I follow when developing Android applications: Define a layout in an xml file and then write all the code in a code-behind style. Is there an equivalent style for ...

TiledLayer equivalent in Android [duplicate]

To draw landscapes, backgrounds with patterns etc, we used TiledLayer in J2ME. Is there an android counterpart for that. Does android provide an option to set such tiled patterns in the layout XML?

Using Repo with Msysgit

When following the Android Open Source Project instructions on installing repo for use with Git, after running the repo init command, I run into this error: /c/Users/Andrew Rabon/bin/repo: line ...

Android "single top" launch mode and onNewIntent method

I read in the Android documentation that by setting my Activity s launchMode property to singleTop OR by adding the FLAG_ACTIVITY_SINGLE_TOP flag to my Intent, that calling startActivity(intent) would ...

From Web Development to Android Development

I have pretty good skills in PHP , Mysql and Javascript for a junior developer. If I wanted to try my hand as Android Development do you think I might find it tough ? Also what new languages would I ...

热门标签