Android深度链接无法从浏览器唤起,极简教程配置仍失效
深度链接配置问题:点击链接仅打开浏览器,测试时DNS解析失败
我在Android应用中配置深度链接时遇到问题,即使参照最简教程完成配置,点击链接仍只会打开浏览器。使用Android Studio的App Link Testing功能加载链接https://www.chaitanyamunje.com/hello/GeeksForGeeks时,浏览器显示无法访问该站点,提示“DNS_PROBE_FINISHED_NXDOMAIN”。
实时代码
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.DeepLinkTest"> <activity android:name=".MainActivity" android:exported="true"> <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:host="www.chaitanyamunje.com" android:scheme="https" /> </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:host="www.chaitanyamunje.com" android:scheme="http" /> </intent-filter> </activity> </application> </manifest>
MainActivity.kt
package me.paxana.deeplinktest import android.net.Uri import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.TextView class MainActivity : AppCompatActivity() { private lateinit var messageTV: TextView private var uri: Uri? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) messageTV = findViewById(R.id.idTVMessage) uri = intent.data if (uri != null) { val parameters = uri!!.pathSegments val param = parameters[parameters.size - 1] messageTV.text = param } } }
问题原因&解决方案
核心问题
- 域名不存在:
www.chaitanyamunje.com是无效域名,DNS解析失败,导致Android系统无法验证App Links的合法性,直接跳转浏览器。 - 无应用选择触发:对于http/https链接,系统需要验证域名与应用的绑定关系(通过
assetlinks.json),无效域名无法完成验证,不会弹出应用选择弹窗。
快速解决方法
1. 用自定义Scheme测试(无需域名)
修改Manifest中的intent-filter,改用自定义scheme跳过域名验证:
<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:host="deeplink" android:scheme="myapp" /> </intent-filter>
测试链接改为myapp://deeplink/hello/GeeksForGeeks,点击后会直接触发应用选择。
2. 强制测试http/https链接逻辑
用adb命令直接让应用处理链接,跳过系统验证:
adb shell am start -W -a android.intent.action.VIEW -d "https://www.chaitanyamunje.com/hello/GeeksForGeeks" me.paxana.deeplinktest
这样可以验证MainActivity中的Uri处理逻辑是否正常。
3. 正式配置App Links(需真实域名)
如果要上线http/https的App Links:
- 购买一个真实可解析的域名
- 在域名根目录放置
assetlinks.json文件,验证应用签名与域名的关联 - 确保Manifest中的intent-filter配置正确
代码优化建议
在MainActivity中添加日志,确认是否收到深度链接Intent:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) messageTV = findViewById(R.id.idTVMessage) uri = intent.data android.util.Log.d("DeepLink", "收到的Uri: $uri") // 添加日志 uri?.let { val param = it.pathSegments.lastOrNull() ?: "无参数" messageTV.text = param } }
内容的提问来源于stack exchange,提问作者Paxana Non Grata
相关产品推荐
相关产品推荐

