Android深入链接到应用程序

问题描述:

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

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

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

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

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

有没有人有办法使链接被所有的应用程序视为链接,并且在打开它们时也被浏览器忽略?

+0

能否请你点我的一些资源,帮助我 - “如何启用应用内容的深层链接” - 深层链接可直接用户的内容,没有任何提示,插页式网页,或登录。 – user2056563 2015-08-31 10:36:15

这种技术实际上似乎是工作在Android从我可以告诉:

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

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

相对干净的单个URL来覆盖这两种情况,并且不会毁掉像URL的Twitter分享之类的东西。如果请求来自看起来像可能支持应用程序的平台,以减少不兼容的桌面行为的风险,则实际生产版本可能只会执行隐藏的iframe探测。

+1

我已经完成了90%的工作。我唯一不喜欢的是它在浏览器中留下一页。我希望它能够成功返回1页,并保持它无法显示下载链接的地方。你有没有找到方法来检查重定向是否有效? – skorulis 2011-02-10 22:31:31

如果你可以使用服务器端的东西,也许你可以有一个普通的页面,当访问时从浏览器跳转到自定义方案链接?这具有可能分辨应用程序是否未安装并提示安装的附加优点。

虽然它并没有解决在浏览器中打开链接的问题。我能想到的唯一真正的解决方案就是跳转到相应应用程序的链接处理程序。那么问题是,允许用户更改首选浏览器...

+0

如果应用程序已安装,我将如何从浏览器中检查? – skorulis 2011-02-10 03:46:29

+0

哦,我没有想到这一点。我不知道是否有一个简单的方法来做到这一点。至少,点击页面是可能的。 ;编辑:也许你可以在应用程序上运行HTTP服务器服务,然后使用它来检测应用程序的存在?这就是我现在可以提出的一切。 – 2011-02-10 03:48:45

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

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

因此,基本上,当开始http://www.example.com/home任何链接有人点击,他/她将获得与您的应用程序打开它与浏览器的应用程序一起的选项。 你必须处理活动的意图

此外,该计划可能是任何东西,但谷歌建议http方案,以便您的应用程序和浏览器应用程序可以听深度链接的网址上的点击。

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

1:-set Custom URL schemes like http://example.com. 
    For example, the URL http://example.com/?id=95 , 
    will open up the relevant FAQ and the URL 
    http://example.com/?sectionid=8 
    (where sectionid is the publish id of any Section), 
    will open up relevant section. 
2:- <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:-   @Override 
      protected void onResume() { 
       super.onResume(); 

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