Firebase 动态链接仅适用于模拟器 |扑
Posted
技术标签:
【中文标题】Firebase 动态链接仅适用于模拟器 |扑【英文标题】:Firebase Dynamic links only works on emulator | FLUTTER 【发布时间】:2021-06-02 04:30:30 【问题描述】:我正在创建一个动态链接以将我导航到指定页面,在模拟器上尝试时它工作正常,但在实际设备上尝试时,该链接仅打开应用程序
创建动态链接
Future<void> createDynamicLink(bool short, int lecID, String lecName) async
setState(()
_isCreatingLink = true;
);
final DynamicLinkParameters parameters = DynamicLinkParameters(
uriPrefix: 'https://geneapp.page.link',
link: Uri.parse('https://www.geneapp.com/lecture?lecID=$lecID&lecName=$lecName'),
androidParameters: AndroidParameters(packageName: 'com.example.teams',minimumVersion: 0),
dynamicLinkParametersOptions: DynamicLinkParametersOptions(
shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short
),
socialMetaTagParameters: SocialMetaTagParameters(
title: "$lecName",
description: "new"
)
);
print("https://geneapp.page.link/lecture?lecID=$lecID&lecName=$lecName");
Uri url;
if (short)
final ShortDynamicLink shortLink = await parameters.buildShortLink();
url = shortLink.shortUrl;
else
url = await parameters.buildUrl();
setState(()
_linkMessage = url.toString();
_isCreatingLink = false;
);
print(url);
Clipboard.setData(new ClipboardData(text: '$url'));
FocusScope.of(context).requestFocus(new FocusNode());
scaffoldKey.currentState?.removeCurrentSnackBar();
scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text("copied",style: TextStyle(fontSize: 16)),
Padding(
padding: EdgeInsets.fromLTRB(10.0,0.0,0.0,0.0),
child: Icon(Icons.check_circle,color: Colors.grey,),
)
],
),
backgroundColor: Colors.green,
duration: Duration(seconds: 3),
));
处理深层链接:
void initDynamicLinks() async
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async
final Uri deepLink = dynamicLink?.link;
if (deepLink != null)
var isLec = deepLink.pathSegments.contains('lecture');
if(isLec)
var lecName = deepLink.queryParameters['lecName'];
var lecID = int.parse(deepLink.queryParameters['lecID']);
print("initDynamicLinks | lecName : $lecName lecID : $lecID");
await _openPDF(lecName, lecID);
else
print('its null');
, onError: (OnLinkErrorException e) async
print('onLinkError');
print(e.message);
);
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deeplink = data?.link;
if(deeplink != null)
var lecName = deeplink.queryParameters['lecName'];
var lecID = int.parse(deeplink.queryParameters['lecID']);
print("initDynamicLinks | lecName : $lecName lecID : $lecID");
await _openPDF(lecName, lecID);
_openPDF(String lecName, int lecID) async
final filename = lecName;
String dir = (await getApplicationDocumentsDirectory()).path;
if (await File('$dir/$filename').exists())
navigatorKey.currentState.pushNamed('/pdf', arguments: '$dir/$filename');
else
//..
//
navigatorKey.currentState.pushNamed('/pdf', arguments: '$dir/$filename');
在我的主要构建功能中,我将 initialRoute 设置为启动画面, 然后在我的初始屏幕 initstate 我调用 initDynamicLinks():
【问题讨论】:
【参考方案1】:应用无法启动可能有多种原因,您使用的 android 设备,用于启动链接的浏览器(如果将链接复制粘贴到 chrome 中它们不起作用),DynamicLinks 设置。
你可以尝试一些事情
-
在长 URL 中编码您的 lecName 变量。
通过消息发送动态短链接并尝试点击并启动应用程序。
【讨论】:
感谢您的回复。我最终弄清楚了,这是因为我的国家没有firebase。所以这是因为我在笔记本电脑和模拟器上使用 ***,而不是在移动设备上使用它。以上是关于Firebase 动态链接仅适用于模拟器 |扑的主要内容,如果未能解决你的问题,请参考以下文章