如何在Flutter中实现二维码跳转至APP内部隐藏页面?
解决扫码跳转APP专属隐藏页面的问题
不用纠结qr_code_scanner了,换「深度链接+权限校验」的方案完全能满足你的需求——既实现扫码直接跳APP内页面,又能限制只有扫码链接才能访问。
一、核心逻辑拆解
- 用深度链接(Deep Link) 作为扫码入口,直接唤起APP并定位到目标页面
- 给隐藏页面加专属校验,只有携带特定参数的链接请求才能进入,彻底堵死其他访问途径
二、配置深度链接(以Flutter为例,安卓/iOS通用思路)
Android端(修改AndroidManifest.xml)
在你APP的主Activity标签里加个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" /> <!-- 自定义scheme,比如myapp://secret-page --> <data android:scheme="myapp" android:host="secret-page" /> </intent-filter>
iOS端(修改Info.plist)
添加URL Types,设置自定义scheme:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>myapp</string> </array> <key>CFBundleURLName</key> <string>secret-page</string> </dict> </array>
三、扫码逻辑换个库实现
qr_code_scanner不好用就换flutter_barcode_scanner,扫码后直接解析链接并跳转:
import 'package:flutter_barcode_scanner/flutter_barcode_scanner.dart'; import 'package:url_launcher/url_launcher.dart'; Future<void> scanAndJump() async { // 扫码获取链接 String scanResult = await FlutterBarcodeScanner.scanBarcode( "#000000", "取消", false, ScanMode.QR); // 只处理我们的专属深度链接 if (scanResult.startsWith("myapp://secret-page?auth=")) { await launchUrl(Uri.parse(scanResult)); } }
四、给隐藏页面加访问锁
在隐藏页面的初始化阶段做校验,只有携带有效校验参数的请求才能留下,否则直接踢回首页:
class SecretPage extends StatefulWidget { final String? authCode; const SecretPage({super.key, this.authCode}); @override State<SecretPage> createState() => _SecretPageState(); } class _SecretPageState extends State<SecretPage> { @override void initState() { super.initState(); _verifyAccess(); } void _verifyAccess() { // 这里用你自己的校验规则,比如和后端接口比对,或者本地存的唯一密钥 const validAuthCode = "SCAN_ONLY_123"; if (widget.authCode != validAuthCode) { // 无权限直接跳转首页 Navigator.pushReplacementNamed(context, '/home'); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("你没有访问权限")), ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("专属隐藏页面")), body: const Center(child: Text("只有扫码进来才能看到这里")), ); } }
五、生成专属二维码
把带有效校验参数的深度链接(比如myapp://secret-page?auth=SCAN_ONLY_123)生成二维码,这样只有扫这个码的链接才能通过校验。
内容的提问来源于stack exchange,提问作者Pedro Henrique
相关产品推荐
相关产品推荐

