Android应用程序链接多个意图过滤器主机和清单合并不起作用

时间:2017-02-20 15:16:25

标签: android android-intent deep-linking

我正在使用构建变体,并希望根据变体捕获其他链接。我希望所有变体都能从主机1中捕获链接,因此我在主intent-filter文件中声明了AndroidManifest.xml,如下所示:

<activity android:name=".activity.DeepLinkActivity"
android:noHistory="true">
    <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="hostOne.com" android:path="/page.aspx" android:scheme="http"/>

    </intent-filter>
</activity> 

我也为其他变体生成部分清单,例如hostTwo.com,如下所示:

<?xml version="1.0" encoding="UTF-8"?><manifest package="com.package.my.domain">
  <application xmlns:android="http://schemas.android.com/apk/res/android" android:name="AlarmMobile">
    <activity android:name=".activity.DeepLinkActivity">
      <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:scheme="http://" android:host="hostTwo.com" android:path="/page.aspx"/>
      </intent-filter>
    </activity>
  </application>
</manifest>

根据构建变体(based upon the documentation here)将其放置在适当命名的文件夹中,Android studio的合并清单视图显示主机2的intent-filter已添加到最终合并清单中但是,模拟器或实际设备无法捕获针对第二个主机的意图。

我在命令提示符中生成这样的意图:

adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "http://hostone.com/page.aspx"

适用于hostone,但正在执行

adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "http://hosttwo.com/page.aspx"

将启动浏览器,因为该应用无法捕获它。

Android应用链接仅适用于一个主机名吗?还有什么我可以尝试的吗?

1 个答案:

答案 0 :(得分:1)

我发现部分清单不正确。在intent-filter的{​​{1}}代码中,data因尾随android:scheme="http://"而无效。

根据google's documentation,Android会像://一样构建intent-filter URI,因此在声明中包含它是不必要的。

将声明更改为<scheme>://<host>:<port>/<path>后,合并继续成功,操作系统会尝试验证部分清单中定义的链接!

更正了部分清单:

android:scheme="http"