我正在尝试创建一个可以通过电子邮件发送的链接,当安装了我的应用程序的Android设备上打开时,会自动在我的应用程序中打开正确的页面。
我已经通过几种不同的方式部分地工作,但发现了一些问题,我想知道是否有人有解决方案。
尝试1:使用自定义方案:myapp:// someItem。这有效,但有些电子邮件应用程序不会将此视为链接,因为它不是http。有没有办法强制应用程序将其视为有效链接?例如gmail。
尝试2 :使用与主持人{http:3}}的http链接。这也可以,但我的应用程序最终注册处理所有不理想的http链接。
尝试3:使用带主机和端口的http链接:http://com.myapp/someItem。这是我目前的解决方案,唯一的缺点是当链接打开时,它仍然提供在浏览器中打开链接的选项。有没有办法阻止浏览器尝试打开我的链接?
有没有人有办法制作所有应用程序都会被视为链接的链接,打开浏览器时会被浏览器忽略?
答案 0 :(得分: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>
所以基本上,当有人点击以http://www.example.com/home开头的任何链接时,他/她将可以选择使用您的应用程序和浏览器应用程序打开它。 您必须处理活动中的意图
该方案也可以是任何方案,但谷歌推荐使用http方案,这样您的应用和浏览器应用都可以收听深度链接网址的点击次数。
注意:如果您想要应用链接,请不要忘记在您的网页中添加android-app:// yourpackage name / http / www.example.com / home / ....
答案 1 :(得分:5)
1 - 设置自定义网址方案,例如http://example.com
例如,网址http://example.com/?id=95会打开相关的常见问题解答和网址http://example.com/?sectionid=8(其中sectionid是任何部分的发布ID),会打开相关部分。
2 - 在您的AndroidManifest.xml
DeepLinkActivity
中定义(将收到网址数据的那个:
<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 - 覆盖onResume()
课程的DeepLinkActivity
方法:
@Override
protected void onResume() {
super.onResume();
Intent in = getIntent();
Uri data = in.getData();
System.out.println("deeplinkingcallback :- "+data);
}
答案 2 :(得分:4)
这个技术实际上似乎可以在我的Android上工作:
http://mobile.dzone.com/news/custom-url-schemes-phonegap
我还没有在真正的制作应用程序中尝试过,所以你的里程可能会有所不同。我所做的是使用这种创建隐藏iframe的技术,并尝试将位置设置为自定义url方案,并从onload调用该文件的函数。到目前为止我所看到的(我只在2.2和2.3设备上测试过)是,如果我安装了一个处理自定义方案的应用程序,应用程序将启动,如果没有,页面将呈现。
相对干净的单个URL可以覆盖这两种情况,并且不会破坏Twitter共享URL等内容。如果请求来自看似可能支持应用程序的平台,以降低不兼容桌面行为的风险,那么真正的生产版本可能只会执行隐藏的iframe探测。
答案 3 :(得分:0)
如果你可以使用服务器端的东西,也许你可以有一个常规页面,当访问时从浏览器跳转到自定义方案链接?这样做的另一个好处是可以判断应用程序是否未安装并提示安装。
但它并没有解决浏览器中链接打开的问题。我能想到的唯一真正的解决方案是跳转到适当的应用程序的链接处理程序。然后问题是允许用户更改首选浏览器......