通过Google搜索进行深层链接 - 它是如何工作的,以及在清单中放入什么内容?

and*_*per 5 android google-search deep-linking

背景

我需要研究如何与新的(?)Google搜索深层链接功能集成.

问题

这似乎是一个相对较新的功能,仍然不那么受欢迎,所以我找不到很多有关它如何工作以及如何正确配置的资源.

我试过的

我已经阅读了谷歌的一些网站并观看了一些视频:

根据我的理解,我需要注册应用程序,更改活动清单中的数据(意图处理),并更改活动的代码,但我不确定我是否理解它是如何工作的以及什么是配置它的最佳方式.

问题

即使经过这么多阅读,我仍然想问一些关于使用Google搜索进行深层链接的问题:

  1. 首先,基本问题,以验证我知道它的全部内容:它允许通过"Google搜索"应用程序索引应用程序,但这些应用程序也必须安装.用户点击"Google搜索"应用中的项目后,会转到您的应用并获得查询.它是否正确?除此之外还有什么吗?

  2. 他们写道,minSdkVersion应该是17或更低(这里).怎么来"或低于"而不是"或高于"?

  3. 出于某种原因,对示例的查询(如此)只是简单的文本,但应用程序显示在那里.它为什么显示?清单中的内容告诉Google-Search该应用可以处理此查询?代码示例显示了URL ...

  4. 是否可以通过Google搜索测试深层链接而无需注册(此处)?我发现的是如何通过adb测试它,但我不明白示例(这里)中用户输入的查询的位置.

  5. 深层链接是否需要用户可以通过Web浏览器访问的实际网站?我问这个是因为在注册服务时有一个名为"验证网站"的步骤(这里).

  6. 假设我想允许用户通过应用程序搜索电话号码.我应该把"电话:"在"方案"(如图所示这里)清单内的一部分?或者是其他东西(或更多)?谷歌搜索会确切知道何时展示应用程序(例如,当电话号码有效时)?

  7. 是否可以在未安装应用程序的情况下使用此功能,以便鼓励人们下载应用程序,和/或通过真实网站进行搜索?

  8. 即使在尝试测试时,我也失败了.表现:

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <!--should match to : https://somehost/search/?number=-->
            <data android:scheme="https"
                  android:host="somehost"
                  android:pathPrefix="/search/?" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    
    Run Code Online (Sandbox Code Playgroud)

码:

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
    Log.d("AppLog", "action:"+action+" data:"+data);
Run Code Online (Sandbox Code Playgroud)

adb命令(从这里):

adb shell am start -W
-a android.intent.action.VIEW -d "somehost/search/?050" com.example.user.myappli
cation
Starting: Intent { act=android.intent.action.VIEW dat=somehost/search/?050 pkg=c
om.example.user.myapplication }
Error: Activity not started, unable to resolve Intent { act=android.intent.actio
n.VIEW dat=somehost/search/?050 flg=0x10000000 pkg=com.example.user.myapplicatio
n }
Run Code Online (Sandbox Code Playgroud)

我甚至尝试了确切的样本,但是使用了不同的包名,但它仍然无效.

这有什么不对?

小智 3

  1. Chrome 中的 Google 搜索应用和 google.com 也是如此。用户需要登录。如果安装了应用程序,点击将深层链接到您的应用程序。

  2. 如果你的 minSdkVersion 是 15、16、17 就可以了。如果是18岁那就不行了。

  3. 如果您的应用已被 Google 编入索引,则指向您应用的深层链接可能会出现在安装了您的应用的用户的 Google 搜索结果中。当您通过网站标记、站点地图或连接您的网站向 Google 告知这些链接时,Google 就会了解您的应用程序支持的深层链接。在应用程序索引文档中查找“提供深层链接”。

  4. 为了查看您的内容可能会出现哪些查询,请转到新的搜索控制台 (g.co/searchconsole) 并登录。然后,您需要查看您的网站从 Google 获得的流量类型以及展示次数以及您的内容针对哪些查询而获得的点击次数。如果您的应用支持相同的链接,并且您已向 Google 提供了这些应用深层链接,那么这些就是您的应用深层链接应显示的相同查询。

  5. 对于应用程序索引,网站是必需的 - 需要通过站点地图、网站标记或验证您的网站告诉 Google 从 Web URL 到应用程序深层链接的映射。但如果您制作站点地图或标记,则无需验证您的网站。如果您只是谈论支持深度链接的应用程序,则不需要网站。

  6. 您可以使用任何您想要的深层链接方案,所以我猜 tel: 应该可以工作(尽管我自己还没有尝试过)。不过,在您提供网络内容的映射之前,Google 不会自动知道何时显示此电话号码。参见#3。

  7. 是的。截至 2015 年 4 月,这已成为可能。请参阅#1 答案中的链接。

  8. 一些建议:

    • 在清单文件中,将路径前缀设置为“/search”。
    • 对于 adb 命令,请尝试将链接指定为“ https://somehost/search

如果这不起作用,您可能需要输入主机的网站,即您需要一个域名。如果这不是您想要做的,只需创建一个用于测试目的的自定义方案,例如

    <data android:scheme="example"
          android:host="gizmos" />
Run Code Online (Sandbox Code Playgroud)