如何从动态链接中接收字符串?附Android动态链接分享代码
如何从分享的动态链接中接收
groupUid等参数? 嘿,我来帮你搞定这个动态链接参数接收的问题!你已经通过Intent分享了带groupUid的动态链接,现在要在接收端把这个参数取出来对吧?下面分两种方法给你讲,按需选就行~
方法一:手动解析链接参数(轻量无依赖)
当用户点击链接打开你的App时,系统会通过Intent把链接数据传递给对应的Activity,我们直接从Intent里拿数据解析就行:
1. 在Activity中获取Intent数据
不管是App首次启动还是从后台唤起,都要处理Intent:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_target); // 处理启动时的Intent handleDynamicLink(getIntent()); } // 如果App在后台被唤起,需要重写这个方法更新Intent @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); handleDynamicLink(intent); }
2. 解析groupUid参数
拿到Uri后,直接通过getQueryParameter()获取指定参数:
private void handleDynamicLink(Intent intent) { Uri deepLinkUri = intent.getData(); if (deepLinkUri != null) { // 直接从动态链接中取出groupUid String groupUid = deepLinkUri.getQueryParameter("groupUid"); if (groupUid != null) { // 拿到参数啦!这里写你的业务逻辑,比如跳转群组页面 Toast.makeText(this, "收到群组ID:" + groupUid, Toast.LENGTH_SHORT).show(); } // 如果你还需要解析链接中嵌套的深层链接(就是`link`参数里的地址),可以这么做: String innerLink = deepLinkUri.getQueryParameter("link"); if (innerLink != null) { try { Uri innerUri = Uri.parse(innerLink); // 解析深层链接里的其他参数(如果有的话) String otherParam = innerUri.getQueryParameter("someParam"); } catch (Exception e) { e.printStackTrace(); } } } }
方法二:用Firebase Dynamic Links SDK解析(更稳定)
如果你的动态链接是Firebase生成的,用官方SDK解析会更可靠——它能自动处理链接跳转逻辑、参数解码等边缘情况,推荐在正式项目中使用:
1. 添加依赖
在App级别的build.gradle中添加SDK依赖:
implementation 'com.google.firebase:firebase-dynamic-links:21.2.0'
2. 解析动态链接
在Activity中调用SDK的API获取参数:
private void parseDynamicLinkWithFirebase() { FirebaseDynamicLinks.getInstance() .getDynamicLink(getIntent()) .addOnSuccessListener(this, pendingDynamicLinkData -> { Uri deepLink = null; if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.getLink(); } if (deepLink != null) { // 直接获取groupUid参数,SDK会自动处理参数位置 String groupUid = deepLink.getQueryParameter("groupUid"); if (groupUid != null) { // 处理你的业务逻辑 Log.d("DynamicLink", "获取到群组ID:" + groupUid); } } }) .addOnFailureListener(this, e -> { Log.w("DynamicLink", "解析动态链接失败", e); }); }
3. 配置Manifest的Intent Filter
不管用哪种方法,都要在接收链接的Activity中配置intent-filter,这样系统才知道要打开你的App:
<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="y28rt.app.goo.gl" android:scheme="https" /> <!-- 匹配深层链接的域名和路径(如果需要) --> <data android:host="Lesn.com" android:scheme="https" android:pathPrefix="/joinGroup" /> </intent-filter>
最后提醒
- 测试的时候,可以直接用adb命令模拟链接唤起:
adb shell am start -W -a android.intent.action.VIEW -d "你的完整动态链接" c.kristofer.jax2 - 如果参数解析失败,先检查Intent是否正确传递,以及链接的参数格式是否正确
内容的提问来源于stack exchange,提问作者Kristofer
相关产品推荐
相关产品推荐

