Flutter如何实现跨应用数据传递并完成第三方应用表单自动填充
核心实现逻辑说明
url_launcher本身仅能通过自定义URL Scheme/Deep Link机制跳转其他应用,本身没有权限直接操作第三方应用的输入框,所有参数传递、字段匹配都依赖目标应用预先配置的规则。
1. 传参实现方法
所有数据都通过跳转URI的查询参数携带,你可以按照约定的参数名拼接数据,示例调用代码如下:
import 'package:url_launcher/url_launcher.dart'; Future<void> launchTargetApp() async { // 按目标应用约定的规则拼接URI final Uri targetUri = Uri( scheme: '自定义Scheme标识', // 比如支付宝为alipays path: '/约定的跳转路径', // 比如支付页对应/pay queryParameters: { // 参数名必须和目标应用约定的一致,目标应用会根据参数名对应到不同输入框 'account': '138xxxx1234', 'amount': '99.00', 'username': '张三' }, ); if (await canLaunchUrl(targetUri)) { await launchUrl(targetUri); } }
2. 不同场景的适配规则
场景1:目标应用为你方自有可控应用
你可以在目标应用内部自行定义Scheme、跳转路径、参数名规则,目标应用监听到跳转触发后,自行读取URI的查询参数,把参数值赋值到对应输入框即可。
场景2:目标应用为第三方应用(比如支付类应用)
必须严格遵循第三方官方公开的跳转传参规则:
- 只有第三方开放了对应参数的传递规则,才能实现自动填充
- 按官方要求的参数名拼接数据后跳转,第三方应用会自动把参数匹配到对应的输入框
- 如果第三方没有公开对应填充规则,无法实现自动填充,url_launcher没有权限直接操作其他应用的UI控件
3. 端侧必要配置
Android端配置
需要在android/app/src/main/AndroidManifest.xml的manifest节点下添加queries声明,否则Android 11及以上版本无法识别目标应用:
<queries> <intent> <action android:name="android.intent.action.VIEW" /> <!-- 替换为你要调用的目标应用Scheme --> <data android:scheme="alipays" /> </intent> </queries>
iOS端配置
需要在ios/Runner/Info.plist中添加Scheme白名单:
<key>LSApplicationQueriesSchemes</key> <array> <!-- 替换为你要调用的目标应用Scheme --> <string>alipays</string> </array>
内容的提问来源于stack exchange,提问作者Sumit Kumar
相关产品推荐
相关产品推荐

