Android Deep Link在短信/WhatsApp等应用无法点击跳转问题咨询
实测异常现象
- 通过Intent调用系统短信发送
http://myApp/seeMore?id=123456格式链接时,链接可正常点击并跳转至应用指定页面;相同链接发送至WhatsApp、Messenger时,无法被识别为可点击状态。 - 按规范更新Manifest.xml配置后,测试自定义Scheme格式
myApp://seeMore?id=123456链接,该链接即使在短信中也无法点击。 - 仅
http://myApp.com/seeMore?id=123456格式的链接可在WhatsApp、Messenger中显示为可点击状态,但点击后会直接打开浏览器提示页面不存在;已知该方案需要关联网站与应用,但无搭建对应网站的计划。
待确认问题
- 是否存在可行方案,让自定义Scheme链接
myApp://seeMore?id=123456在短信、WhatsApp、Messenger中变为可点击状态?是否可通过代码强制将其标记为超链接,或有其他替代实现方案? - 是否可实现
http://myapp.com/seeMore?id=123456格式链接直接跳转至应用而非打开浏览器?是否为intent-filter配置错误导致?此前在Manifest中配置verifyAuto=true属性未生效。 - 是否可通过Intent向Messenger/WhatsApp发送可点击的非标准URL格式链接?
现有配置代码
基础AndroidManifest配置
<activity android:exported="true" android:name=".vue.activity.GraphActivity" android:screenOrientation="landscape" android:launchMode="singleTask" android:parentActivityName=".vue.activity.MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 匹配前缀为 "http://speedchyps/course" 的URI --> <data android:scheme="http" android:host="speedchyps" android:pathPrefix="/course" /> <!-- 注意:pathPrefix配置必须以"/"开头 --> </intent-filter> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".vue.activity.MainActivity" /> </activity>
自定义Scheme测试配置
测试maJolieAppli://seeMore?id=123456格式链接时使用的intent-filter配置如下:
<intent-filter android:label="@string/filter_view_example_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 匹配前缀为 "speedchyps://course" 的URI --> <data android:scheme="speedchyps" android:host="course" /> </intent-filter>
问题解答
自定义Scheme链接可点击性问题
自定义Scheme(如myApp://xxx)是否会被渲染为可点击链接,完全由承载内容的App(系统短信、WhatsApp、Messenger)自身的文本解析规则决定,开发者无法通过自身应用的代码,修改其他App的文本渲染逻辑。
主流IM、社交类App出于防钓鱼、防恶意跳转的安全考虑,默认仅将符合标准HTTP/HTTPS协议、带合法公网域名的文本识别为可点击链接,非系统认可的自定义Scheme会被直接过滤,不会渲染为超链接,该限制无通用绕过方案。HTTP链接默认打开浏览器问题
autoVerify=true配置不生效属于预期现象,该属性是Android App Links(应用链接)的校验开关,必须在对应域名的服务器根目录放置官方要求的校验文件,经系统联网校验通过后,对应域名的链接才会默认直接跳转至应用,跳过浏览器选择环节。如果不搭建对应网站部署校验文件,无法通过官方App Links方案实现默认直跳。
现有intent-filter配置无语法错误,但未完成域名校验的前提下,Android系统会默认将HTTP链接分发给浏览器处理,用户仅能在弹出的应用选择列表中手动选择你的应用完成跳转,不存在无域名、无校验前提下强制系统将对应HTTP链接直接分发给指定应用的方法。
补充说明:http://myApp/xxx这类无合法公网后缀host的HTTP链接,在WhatsApp、Messenger中无法识别为可点击链接,也是因为这类App的链接解析规则要求HTTP链接必须带符合公网域名格式的host,不符合规则的文本会被判定为普通字符串。第三方App发送非标准可点击链接问题
无法实现。通过Intent向Messenger、WhatsApp等第三方App传递文本内容时,第三方App只会按照自身内置的文本规则渲染内容,无法通过Intent参数强制第三方App将指定的非标准URL文本渲染为可点击超链接。所有自定义Scheme、非合法域名格式的HTTP链接,都会被这类IM App的安全规则过滤掉可点击属性。
内容的提问来源于stack exchange,提问作者user3603586

