当前位置: 首页 > 知识库问答 >
问题:

在深层链接中使用&号进行应用索引不工作

袁旻
2023-03-14

我们正在尝试实现谷歌的应用程序索引功能。我们已使用rel alternate标签以以下格式将深度链接添加到我们的网站:

android-app://id.of.the.app/scheme/?screen=Product&product=123456

现在我们得到了内容不匹配的爬行错误。如果我在这里使用二维码进行测试,一切正常。但是,如果我打开了一个爬行错误,点击“打开应用程序页面”,并使用adb命令进行测试,我可以看到从符号开始的所有内容都不会传递到应用程序,因此无法加载我的产品数据。我怀疑这就是爬虫程序检查应用程序内容的方式,这就是为什么我们会出现内容不匹配错误。

此外,如果我从搜索控制台使用“作为谷歌获取”,它看起来像是所有符号都被切断了。

我在易趣上查了一下,因为它正在使用他们的应用程序,这就是他们正在使用的链接:

android-app://com.ebay.mobile/ebay/link/?nav=item.view&id=221559043026&referrer=http%3A%2F%2Frover.ebay.com%2Froverns%2F1%2F711-13271-9788-0%3Fmpcl%3Dhttp%253A%252F%252Fwww.ebay.com%252Fitm%252FRoxy-Fairness-Backpack-Womens-Red-RPM6-%252F221559043026%253Fpt%253DLH_DefaultDomain_0

他们用

这些用户似乎有相同的问题,但他们没有共享解决方案(如果他们找到了):

https://productforums.google.com/forum/#!msg/webmasters/5r7KdetlECY/enYknTVkYU4Jhttps://productforums.google.com/forum/#!主题/网站管理员/lswyXKlS Ik

我很感激有任何想法。

更新1

这就是我解释Android应用程序内部深层链接的方式:

Uri data = getIntent().getData();
String scheme = data.getScheme();
if (scheme.equals("scheme")) {
    String screen = data.getQueryParameter("screen");
    if (screen.equals("Product")) {
        String product = data.getQueryParameter("product");
        // Open Product and give it product number as intent data
    }
}

更新2

以下是我们Manifest.xml的相关部分:

<activity
    android:name="id.of.the.app.StartActivity"
    android:configChanges="orientation|screenSize"
    android:label="@string/app_title"
    android:windowSoftInputMode="adjustPan|stateHidden">

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

        <intent-filter>
            <data android:scheme="scheme" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />                
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>

</activity>

共有3个答案

穆城
2023-03-14

Uri中带有查询参数的应用程序索引对我来说很好。请检查您是否正确遵循了所有步骤:

>

  • 声明在Android idManifest.xml中的id.of.the.app.StartActive的方案

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </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="my_custom_scheme"/>
            </intent-filter>
    

    解析深度链接

    假设我们有以下deeplinkmy_custom_scheme://test_authority/product_screen/?product=123456

        public void parseDeeplikUrl(Uri uri) {
            if (uri == null) {
               // fallback: open home screen
            }
            String autority = uri.getAuthority();
            String path = uri.getPath();
            String query = uri.getQuery();
    
            // authority = "test_authority"
            // path = "products_screen"
            // query = "product=123456&test_param=0000&utm_source=google&utm_medium=organic&utm_campaign=appindexing"
        }
    

    >

    adb shell 'am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "my_custom_scheme://test_authority/product_screen/?product=123456&test_param=0000&utm_source=google&utm_medium=organic&utm_campaign=appindexing" -e android.intent.extra.REFERRER_NAME android-app://com.google.appcrawler/https/www.google.com id.of.the.app'
    

    使用这个adb命令,我们模拟了GoogleBot调用。

    >

    android-app://id.of.the.app/my_custom_scheme/test_authority/product_screen/?product=123456&test_param=0000&utm_source=google&utm_medium=organic&utm_campaign=appindexing
    

    注意:有时候,GoogleBot无法正确呈现屏幕。我有几个空屏幕和正确的深度链接。在这种情况下,尝试再次执行相同的深度链接。这对我很管用。

  • 龙飞
    2023-03-14

    尝试用&

    问题在于平台工具版本21中存在缺陷

    东方华荣
    2023-03-14

    更新3
    我仍在努力了解是否有可能避免对清单进行更改并重新提交应用程序。对于已发布的AndroidManifest,您是否尝试只更改rel alternate标记以包含主机(如果清单中未包含主机,则为事件)?例如,你试过使用Android系统吗-app://id.of.the.app/scheme/fakehost/?screen=Product

    更新2
    发布清单后,我猜您的意图过滤器的数据标记中缺少了必需的“主机”。

    获取此作为参考:

    <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="myapp" android:host="link"/>
        <data android:scheme="myapp" android:host="link/"/>
    </intent-filter>
    

    html中的元数据应该是(android)-app://package-name/scheme/host)

    <html>
    <head>   
    <link rel="alternate"
          href="android-app://it.test.testdeeplink/myapp/link/?p1=1&p2=2" />
    ...
    </head>
    

    您可能需要更新您的应用程序,因为您的清单必须得到修复。

    首先,感谢所有澄清。我想关于deep link(你正在实现的功能)和Chrome Intent(你作为评论提供的链接)有一些混淆。所以,我决定实施一个小项目,你可以通过我的dropbox文件夹下载。该项目非常简单,只有一个活动,可以为Intent data接收到的每个参数打印一行(当然,如果你用app launcher启动应用程序,你什么都看不到)。该活动支持两种意图过滤器模式(我的android应用程序和http),并在MainActivity的末尾。您可以找到的java(作为注释)

    1. 针对adb和第一个模式测试深度链接的行
    2. 针对adb和第二个模式测试深度链接的行
    3. 使用浏览器测试深层链接的简单html页面-最后两个href由Chrome正确管理。

    由于我无法访问您的代码,也看不出是否存在任何问题,我想这是帮助您并让我的答案被接受的最佳方式:)

     类似资料:
    • 我将在我的框架中支持深度链接。我分析了很多教程,都详细介绍了通用链接和URL方案。 对于通用链接,我需要在关联域中托管apple应用程序站点关联文件。apple app site association文件包含team ID Bundle ID。它在框架中不可扩展。 对于URL方案,我们需要重定向到自定义URI方案。 除此之外,我正在寻找一个类似Android应用程序链接的解决方案。 有没有办法不

    • 如果应用程序已由Deep link打开,则Deep link不起作用。 但是,如果我不是通过触发深度链接来打开应用程序,比如单击应用程序图标来打开应用程序。之后触发deeplink将一直有效。 详情如下: 所以我在AndroidManifest中设置了这样的活动,即LaunchActivity。 在LaunchActive中,我将打印一个日志,以表明它已经在那里。 我用了 测试深层链接。 应用程序

    • 我想用Java在RHEL5中创建一个符号链接。在java6中,createSymbolicLink只有两个参数。但是在Java7的情况下,FileAttribute与参数一起包含,即总共有三个参数。 我不明白我应该给出什么作为第三个参数。我需要做的就是创建一个SymbolicLink。 问题是我不知道应该在第三个参数中给出什么,而且我对接口也不太了解。请帮帮忙。 对于不投票者,请评论不投票的理由。

    • 我在我的应用程序中以编程方式创建了一些Firebase动态链接,当它们是长ULR时可以正常工作,我的意思是,Firebase创建的默认动态链接。如果用户没有安装应用程序,则打开Play store,安装应用程序后打开深度链接。另一方面,如果用户安装了app,则直接打开深度链接。 嗯,在那之后,我尝试创建一个简短的动态链接版本,因为URL太长了,看起来不“漂亮”,并且隐藏了一些出现在链接中的信息。

    • 我在Android上使用了一个用Ionic构建的应用程序中的deep link。当我点击链接时,应用程序打开了,但仅仅一秒钟后就崩溃了。如何调试此问题? 这是AndroidManifest.xml中的意图代码: 更新 通过使用Android Studio,我有以下日志:

    • 我正在尝试将应用程序深入链接到我的网站,但我不知道如何让它进入计算机上的常规旧Instagram,然后再进入Android或iOS设备上的应用程序。我知道这些链接有效,因为我单独尝试过。