Android Instant App - Play Console 发布/部署错误和 DAL(数字资产链接)未链接

Posted

技术标签:

【中文标题】Android Instant App - Play Console 发布/部署错误和 DAL(数字资产链接)未链接【英文标题】:Android Instant App - Play Console release/deploy error and DAL(digital Asset Link) not linked 【发布时间】:2018-02-03 18:15:38 【问题描述】:

我试图弄清楚为什么 Play 商店不接受我的即时应用程序构建。我已经成功地向测试人员部署了 Alpha 常规应用版本,因为它是发布免安装应用的先决条件。我正在尝试部署一个 development 发布的即时应用程序。我究竟做错了什么?我尝试添加尽可能多的细节。

我是否需要将以下链接中的数字资产链接 API 服务用于生产即时应用程序,还是用于其他用途? https://console.developers.google.com/apis/api/digitalassetlinks.googleapis.com/overview

将即时应用构建上传到播放控制台时出现以下错误:

您的网站“example.com”尚未通过数字链接 资产链接协议到您的应用程序。请通过以下链接链接您的网站 数字资产链接协议到您的应用程序。

我有点困惑的是,为什么当我单击 link 并验证 时会收到错误消息“Adding assets statements failed.”,如图所示下图: 我注意到当我单击 link and verify 按钮时,它会修改 base 中的 strings.xml 文件并添加以下字符串:<string name="asset_statements" translatable="false">[\n \"relation\": [\"delegate_permission/common.handle_all_urls\"],\n \"target\": \n \"namespace\": \"web\",\n \"site\": \"https://example.com\",\n \n]</string>

我在应用标签下的basechecklistadvisor的清单中有以下内容:<meta-data android:name="asset_statements" android:resource="@string/asset_statements"/>

项目描述和结构:

应用描述:这是一个概念验证应用。可安装的应用程序将使用两个按钮打开主要功能活动,单击这些按钮会将您带到清单或顾问活动。有两个免安装应用,instantapp-checklist 进入清单活动,instantapp(advisor) 进入顾问活动。

有 3 个功能模块:mainfeature、checklist、advisor 有 2 个免安装应用:instantapp-checklist、instantapp(advisor)

我的可安装应用程序包是:blah.blah1.blah2.myappname 我的清单免安装应用的捆绑 ID 是:blah.blah1.blah2.myappname.checklist 我的顾问即时应用程序的捆绑 ID 是:blah.blah1.blah2.myappname.advisor

我的assetlinks.json 是:

[
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": 
    "namespace": "android_app",
    "package_name": "blah.blah1.blah2.myappname.checklist",
    "sha256_cert_fingerprints":
    ["AA:...:53"]
  
,

  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": 
    "namespace": "android_app",
    "package_name": "blah.blah1.blah2.myappname.advisor",
    "sha256_cert_fingerprints":
    ["AA:...:53"]
  
]

在我的清单清单中,活动标签内如下:

        <meta-data
            android:name="default-url"
            android:value="https://example.com/checklist.html"/>

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

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        <intent-filter android:order="1"
                       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="example.com"
                android:pathPattern="/checklist.html"/>
            <data android:scheme="https"/>
        </intent-filter>

我已经完成了自我检查:

免安装应用是使用我的密钥库而不是调试密钥签名的。我检查以确保免安装应用和assetlinks.json 显示相同的sha256 指纹。 robots.txt 允许所有机器人搜索assetlinks.json assetlinks.json 确实有一个有效的证书并允许 https assetlinks.json header的content-type是application/json 我没有选择加入“Google Play 应用签名” 我使用以下站点测试了我的语句,它是成功的:https://developers.google.com/digital-asset-links/tools/generator

【问题讨论】:

您是否有机会在“[app] > 发布管理 > 应用签名”下选择“Google Play 应用签名”? (不,你不需要 Digital Asset Link API) 否则,您可以提交一个错误,然后在此处链接到它吗?对大家都有帮助,谢谢! issuetracker.google.com/issues/… @TWL 我没有选择加入 Google Play 应用签名 可能存在一些站点/密钥/清单不匹配,但如果不在这里公开此信息,将很难检查出来。我建议使用 Google 的问题跟踪器,因为调试可能涉及共享这些私人数据。 刚刚注意到!这是因为您的assetlinks.json 中的package_name。包名应该是应用本身的包名:blah.blah1.blah2.myappname 【参考方案1】:

assetlinks.json 文件中,字段 package_name 设置为 blah.blah1.blah2.myappname.checklist

不过,上面提到的是可安装应用的 idblah.blah1.blah2.myappname。这意味着 AndroidManifest.xml 中的 package_name 设置为 blah.blah1.blah2.myappname

它们应该匹配。 blah.blah1.blah2.myappname 必须添加到服务器上的 assetlinks.json 中。

strings.xml中,更改asset_statements:

<string name="asset_statements" translatable="false">[\n  \"relation\": [\"delegate_permission/common.handle_all_urls\"],\n  \"target\": \n    \"namespace\": \"web\",\n    \"site\": \"https://qaapps.cio.ny.gov/apps/sandbox/james/hesc/checklist.html\",\n  \n,\n  \"relation\": [\"delegate_permission/common.handle_all_urls\"],\n  \"target\": \n    \"namespace\": \"web\",\n    \"site\": \"https://qaapps.cio.ny.gov/apps/sandbox/james/hesc/advisor.html\",\n  \n]</string>

以下是帮助我找到解决方案的一些其他说明:

我使用以下命令行来测试即时应用程序是否工作:adb shell am start -a android.intent.action.VIEW -d "https://example.com/checklist/" 在设备上,我转到 Settings > Google > Instant Apps 并单击开关以卸载/关闭免安装应用,然后再次单击以将其重新打开。还转到 Chrome 设置(设置 > 隐私 > 清除浏览数据)以清除时间范围内的所有数据,所有时间。 在 Chrome 中输入免安装应用的 URL 时,它只会打开网站而不是免安装应用。如果我点击网站中免安装应用的链接,它会打开免安装应用而不是网站。

【讨论】:

为什么你在这里添加了不同的qaapps.cio.ny.gov/apps/sandbox/james/hesc/advisor.html URL?除了assetlink.json ? @olearyj234 对我来说也有同样的问题资产声明失败如何解决这个问题你能指导我清楚【参考方案2】:

这很奇怪,我遇到了同样的问题。解决方法很简单;

正如@olearyj234 提到的链接和验证按钮将字符串添加到 string.xml 的末尾。

我只是删除了 string.xml 中的新字符串,然后单击了“链接并验证”按钮。

【讨论】:

以上是关于Android Instant App - Play Console 发布/部署错误和 DAL(数字资产链接)未链接的主要内容,如果未能解决你的问题,请参考以下文章

关联网站未重定向到 Android Instant App

不同项目/分支中的 Android Instant App

如何访问和传递参数到 Android Instant App 的模块

如何访问和传递参数到 Android Instant App 的模块

如何在 google play 上制作没有“立即尝试”按钮的 Android Instant App?

Android Instant App - Play Console 发布/部署错误和 DAL(数字资产链接)未链接