android - 颤振深度链接(uni_links)在真实设备上不起作用
问题描述
我正在尝试向我的应用程序添加深度链接,我正在使用 uni_links https://pub.dev/packages/uni_links
我按照页面上的说明进行操作,在 android 模拟器上一切正常 - 我通过深层链接打开应用程序,快照包含数据并返回 urlResponse。 但是在真实设备上,当我通过深层链接打开应用程序时,快照没有任何数据,并且返回主页。
这是我的代码:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Colors.white,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: StreamBuilder(
stream: getLinksStream(),
builder: (context, snapshot) {
if (snapshot.hasData) {
// our app started by configured links
Uri uri = Uri.parse(snapshot.data);
List<MapEntry<String, List<String>>> list =
uri.queryParametersAll.entries.toList();
return urlResponse(uri, list);
} else {
// our app started regularly
return HomePage();
}
},
),
);
}
和我的 AndroidManifest.xml:
<!-- Deep Links -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with YOUR_SCHEME://YOUR_HOST -->
<data
android:scheme="http"
android:host="example.com"
android:pathPrefix="/myApp"/>
</intent-filter>
谁能帮我理解为什么它可以在模拟器上工作,但不能在真实设备上工作?
解决方案
StatefulWidget
我像这样使用uni_links getLinksStream()
:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:uni_links/uni_links.dart';
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
StreamSubscription _linkSubscription;
@override
Widget build(BuildContext context) {
return MaterialApp(
//...
);
}
@override
void initState() {
super.initState();
initDeepLink();
}
@override
void dispose() {
if (_linkSubscription != null) _linkSubscription.cancel();
super.dispose();
}
Future<void> initDeepLink() async {
_linkSubscription = getLinksStream().listen((url) {
if (!mounted) return;
setState(() {
//Here you have url data
Uri uri = Uri.parse(url);
List<MapEntry<String, List<String>>> list =
uri.queryParametersAll.entries.toList();
});
}, onError: (Object err) {
print("$err");
});
}
推荐阅读
- python - 如何将系列(24 个数字)转换为日期时间,如 Y/M/DH:M:S
- ios - 如何将数据从两个 UITextViews 保存到 UserDefaults
- machine-learning - 如果我们可以在 WGAN 中裁剪梯度,为什么还要使用 WGAN-GP?
- java - 创建一个 excel 文件,我想将其作为电子邮件的附件发送,而不在本地系统中保存文件
- php - 如何验证 laravel 5.4 范围内的数字?
- javascript - 如果传递的值为空白或 null,则 JavaScript 函数不起作用
- android - 如何以类似于相机为 SurfaceTexture 生成帧的方式生成 YUVI420 帧到 SurfaceTexture?
- reactjs - reactjs中的解密密钥存储在哪里?
- c++ - 具有指向函数的指针的类内的结构需要在类外前向声明函数?
- spring - 由于 Consul,Spring Boot 应用程序健康状态下降