【问题标题】:Firebase Dynamic links only works on emulator | FLUTTERFirebase 动态链接仅适用于模拟器 |扑
【发布时间】: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():

【问题讨论】:

    标签: android flutter firebase-dynamic-links


    【解决方案1】:

    应用无法启动可能有多种原因,您使用的 android 设备,用于启动链接的浏览器(如果将链接复制粘贴到 chrome 中它们不起作用),DynamicLinks 设置。

    你可以尝试一些事情

    1. 在长 URL 中编码您的 lecName 变量。
    2. 通过消息发送动态短链接并尝试点击并启动应用程序。

    【讨论】:

    • 感谢您的回复。我最终弄清楚了,这是因为我的国家没有firebase。所以这是因为我在笔记本电脑和模拟器上使用 VPN,而不是在移动设备上使用它。
    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多