所以我想在一些新的应用程序中实现App Links,我已经通过开发笔记,设置服务器,使用正确的json标头添加文件并构建了一个测试应用程序。 Android M中引入的应用程序深度链接似乎可以正常工作,如果我给自己发送附带链接的电子邮件,但是当我在chrome的示例页面上执行此操作时,它只是重新加载页面。我只是在我的网络服务器上访问根页面。 (https://www.EXAMPLE.com)。我最初在我的平板电脑上有一些chrome问题,但我添加了根证书,现在它变成了绿色
我正在使用Nexus 7 2013,刚刚擦除并运行Android M和Chrome,已更新。
我正在服务器上提供一个HTML文件(就像我有一个后退页面一样)。
不知道这是我如何使用网页/退回,或者我配置错误。它在Gmail中运行良好,没有任务选择器,但在chrome中不行。
我尝试混合了几个例子,html看起来像这样,但都没有。
<a href="EXAMPLE://">Click HERE for schema</a>
<a href="https://www.EXAMPLE.com/">Click HERE for url with slash</a>
<a href="https://www.EXAMPLE.com">Click HERE for url, no slash</a>
<a href="#" onclick="window.location('https://www.EXAMPLE.com/')">Trying with onclick javascript</a>
我的机器人清单:
<activity
android:name=".deepActivity"
android:label="@string/title_activity_deep" >
<intent-filter android:autoVerify="true">
<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="www.EXAMPLE.com" />
<data android:scheme="https" android:host="www.MYDOMAIN.com" />
<!-- note that the leading "/" is required for pathPrefix-->
<!-- Accepts URIs that begin with "example://gizmos”-->
</intent-filter>
https://developer.android.com/training/app-links/index.html
编辑:
我一直在使用以下命令测试自动验证:
adb shell dumpsys package d | grep DOMAIN -ab5
我得到了结果:
230: Package: com.DOMAIN.deeplinkingtest
275: Domains: www.DOMAIN.com
308- Status: undefined
来自文档
显示此应用的当前链接处理设置。已通过验证并且其清单包含android:autoVerify =“true”的应用程序显示状态为always。此状态后的十六进制数与Android系统的用户应用程序链接首选项记录相关。该值不表示验证是否成功。
答案 0 :(得分:0)
在您的网站中添加以下HTML标记。
Option.toString()
<强>的AndroidManifest.xml 强>
`
<a href="http://domain.com" data-applink="domain.com">Link</a>
`
答案 1 :(得分:0)
...但是当我在chrome中的示例页面上执行它时,它只是重新加载 页
我认为您的意思是说您只是进入Chrome并在浏览器栏中输入https://example.com。
不幸的是,如果您在浏览器栏中输入网址,App Linking将无法使用。这可能听起来令人沮丧,但有充分的理由说明为什么它不应该起作用。正如Paul Devlan的Paul Kinlan所说,这将是一个糟糕的用户体验:
如果用户在系统的地址栏中输入了URL,那么 用户的意图是访问相关页面。我们没有 相信用户打算去应用程序。因此,重定向 用户使用该应用是一种糟糕的用户体验。
此答案仅与在Chrome网址栏中输入网址有关。但是,如果用户点击网页中的链接,则相同(大部分)都适用。让我们来解释为什么事情不适用于每个示例链接。我将从中间两个开始:
<a href="https://www.EXAMPLE.com/">Click HERE for url with slash</a>
<a href="https://www.EXAMPLE.com">Click HERE for url, no slash</a>
要启动应用程序的这些链接,Chrome必须使用action.VIEW
,category.DEFAULT
**,category.BROWSABLE
和方案http
向系统发送意图或https
。您可以创建一个捕获此意图的intent过滤器(您的App Linking intent过滤器将起作用):
<intent-filter android:autoVerify="true">
<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"/>
</intent-filter>
如果您检查日志(或只是按照您的方式进行测试),您会发现Chrome并未触发意图。他们选择处理内部链接(通过导航到新页面)。这是Chrome的功能,而非Android。没有办法改变这一点。但是,您可以在Chrome中尊重的网址中指定自定义方案。这让我想到了你的第一个网址:
<a href="EXAMPLE://">Click HERE for schema</a>
Chrome会尊重此网址中的方案并触发意图:action.VIEW
,category.DEFAULT
**,category.BROWSABLE
和方案EXAMPLE
。根据您的意图过滤器设置方式,这将启动您的应用程序。您的第一个冲动可能是将EXAMPLE
方案添加到App Linking意图过滤器:
<intent-filter android:autoVerify="true">
<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:scheme="EXAMPLE"/>
<data android:host="www.example.com"/>
</intent-filter>
这样您就可以点击Chrome中的链接,让Chrome打开您的应用。但是现在会破坏App Linking 。专业解决方案是保持App Linking意图过滤器不变,并添加第二个意图过滤器以捕获您的自定义方案:
<!-- EXAMPLE scheme intent filter -->
<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="EXAMPLE"/>
<data android:host="www.example.com"/>
</intent-filter>
<!-- App Linking intent filter -->
<intent-filter android:autoVerify="true">
<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"/>
</intent-filter>
这可能是TMI,但是到达root有助于理解为什么事情正在发挥作用/不起作用。
**请记住系统会将category.DEFAULT
添加到任何隐含的意图中。
============================================
更新: 我应该补充说,使用自己的方案是不好的做法。记录了一个更好的方法here