5

因此,我期望在一些新的应用程序中实现应用程序链接,并且通过开发笔记非常详细地阅读,设置服务器,使用正确的json标题添加文件以及构建了一个测试应用。 Android M中引入的应用程序深层链接似乎正在工作,如果我给自己发送附带链接的电子邮件,但是当我在Chrome的示例页面上执行此操作时,它只是重新加载页面。我只是打在我的网络服务器上的根页面。 (https://www.EXAMPLE.com)。我最初在我的平板电脑上遇到了Chrome的一些证书问题,但是我添加了根证书,现在它变成了绿色Android M - 应用程序链接在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> 

我的Android清单:

<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”的应用程序显示始终状态。此状态之后的十六进制数字与Android系统的用户应用程序链接首选项记录相关。该值不表示验证是否成功。

回答

0

在您的网站中添加HTML标记如下。 <a href="http://domain.com" data-applink="domain.com">Link</a>

AndroidManifest.xml中

`

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

<intent-filter>     
    <data android:scheme="http" />  
    <!-- or you can use deep linking like -->    

    <data android:scheme="http" android:host="domain.com"/> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <category android:name="android.intent.category.DEFAULT"/> 

</intent-filter> 

`

+0

我试图添加data-applink,这看起来liek它的JQuery扩展虽然?我尝试了许多不同的变体,无论是否使用www。在域名中,无论是否带有尾部斜杠,在HTML和清单中,但Chrome仍然没有。 –

0

...但是当我做在镀铬的样本页面上,它只是重新加载 页

我假设你的意思是你刚刚进入Chrome并在浏览器栏中输入https://example.com

不幸的是,如果您在浏览器栏中键入URL,应用程序链接将不起作用。这听起来可能令人沮丧,但有一个很好的理由,为什么这不应该工作。正如保罗Kinlan,谷歌开发倡导者解释说这将是一个不好的用户体验:如果用户输入一个URL到系统的地址栏中

,那么 意向的用户是访问相关页面。我们不会 相信用户打算去应用程序。 Ergo将 用户重定向到应用程序是一种糟糕的用户体验。

link

这个答案只涉及到键入URL到浏览器地址栏。但是,如果用户单击网页中的链接,则同样(大部分)也适用。让我们来解释为什么事情不适用于每个示例链接。我将与中间的两个启动:

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

这些链接来启动应用程序,浏览器将不得不意图发送到系统action.VIEWcategory.DEFAULT **,category.BROWSABLE,并计划httphttps。您可以创建一个意图过滤器,将抓住这个意图(您的应用程序链接意图过滤器将工作):

<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将就该计划在这个URL和断火的意图:action.VIEWcategory.DEFAULT **,category.BROWSABLE,并计划EXAMPLE。根据您的意图筛选器设置,这将启动您的应用程序。你的第一反应可能是对EXAMPLE方案添加到您的应用程序链接意图过滤器:

<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在打开的应用程序。不过它现在会中断应用链接。亲的解决办法是让你的应用程序链接意图过滤器不变,并添加第二个意图过滤器能吸引您的自定义方案:

<!-- 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,但得到的根能理解为什么一切正常/不工作。

**请记住系统会将category.DEFAULT添加到任何隐含的意图。

============================================

更新: 我应该补充说,使用你自己的方案是不好的做法。一个完全更好的方法是记录here

相关问题