Instant App 未从开发轨道加载

Instant App not loading from development track

我有一个部署的即时应用程序,运行可以通过我的本地开发环境部署到模拟器或设备。事实上,我在生产中部署了一个旧版本,它工作得很好,但很长时间没有更新,而且自发布以来,许多 Instant Apps 工具都发生了变化。这当然意味着我也已经在网站上正确设置了我的 assetlinks 文件。

我可以将它上传并部署到我在 Google 上的开发轨道上播放而不会出错,但是当打开一个已处理的 URL 时,它会转到 Chrome 而不是即时应用程序。我已经阅读了 docs。 URL 在清单中(毕竟它在我的开发环境中工作)。

我 运行 几个 URL 并查看了日志以进行比较。这是我的删节版(我希望它能启动即时应用程序,但它只在 Chrome 上打开):

01-12 15:27:57.884 2887-4983/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 1017252)
01-12 15:27:57.933 926-2361/? I/ActivityManager: START u0 {act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://www.example.com/... flg=0x10000000 cmp=com.android.chrome/com.google.android.apps.chrome.IntentDispatcher} from uid 10143
01-12 15:27:57.983 4985-4985/? I/cr_InstantAppsHandler: Package manager handles intents on O+, not handling in Chrome
01-12 15:27:57.985 926-2363/? I/ActivityManager: START u0 {act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://www.example.com/... flg=0x14002000 cmp=com.android.chrome/org.chromium.chrome.browser.ChromeTabbedActivity (has extras)} from uid 10056

与 BuzzFeed 的对比(成功启动 IA):

01-12 14:36:37.688 927-9531/? I/ActivityManager: START u0 {act=android.intent.action.VIEW dat=https://www.buzzfeed.com/... cmp=com.buzzfeed.android/com.buzzfeed.showxlib.activity.ShowPageInstantActivity} from uid 10166
01-12 14:36:37.814 927-2593/? I/ActivityManager: Start proc 13156:com.buzzfeed.android/u0a249 for activity com.buzzfeed.android/com.buzzfeed.showxlib.activity.ShowPageInstantActivity

vs https://www.google.com(按预期开始 Chrome):

01-12 16:10:18.962 926-19253/? I/ActivityManager: START u0 {act=android.intent.action.VIEW dat=https://www.google.com/... cmp=com.android.chrome/com.google.android.apps.chrome.IntentDispatcher} from uid 10166
01-12 16:10:19.057 4985-4985/? I/cr_InstantAppsHandler: Package manager handles intents on O+, not handling in Chrome
01-12 16:10:19.060 926-3112/? I/ActivityManager: START u0 {act=android.intent.action.VIEW dat=https://www.google.com/... flg=0x14002000 cmp=com.android.chrome/org.chromium.chrome.browser.ChromeTabbedActivity (has extras)} from uid 10056

FAILED BINDER TRANSACTION 是唯一脱颖而出的东西。虽然很难真正将其归因于解决 IA 意图,但我已经 运行 多次并且每次都看到相同的行为。

有什么方法可以让我了解更多信息,了解发生了什么问题以及为什么它无法启动免安装应用程序?

另请注意,我已经检查了我的测试人员列表并已通过 URL 等选择加入。

这是我的意图过滤器的简化形式:

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

    <data android:host="www.example.com" />
    <data android:scheme="https" />
    <data android:scheme="http" />

    <data android:path="/k/keyword1" />
    <data android:path="/k/keyword2" />
    <data android:path="/k/keyword3" />
    ...
    <data android:path="/k/keyword1000" />

</intent-filter>

假设我不想匹配:

    <data android:path="/k/keyword1001" />
    ...
    <data android:path="/k/keyword2000" />

如果我只有几个 data/path 个元素,那么它似乎可以工作,但是当我的元素数量很大时,即时应用程序无法加载。

启动即时应用程序确实需要来自 Google Play 服务的进程间通信。 (确切的种类取决于您是否 运行 Android 奥利奥。)

我们正在努力消除一些开销,但需要很长时间才能推出。假设您在 Android N 或更早的时候观察到这个问题,您可以通过使用较短的 activity 名称来解决这个问题。例如,如果您有一个名为:

的 class
com.really_long_package.SearchActivity

我建议创建一个短名称的别名,例如

package shortn;
public class SA extends com.really_long_package.SearchActivity {}

然后参考AndroidManifest.xml中的shortn.SA