Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振-如何在firebase动态链接中传递应用程序邀请功能的自定义参数?_Android_Firebase_Flutter_Dart_Firebase Dynamic Links - Fatal编程技术网

Android 颤振-如何在firebase动态链接中传递应用程序邀请功能的自定义参数?

Android 颤振-如何在firebase动态链接中传递应用程序邀请功能的自定义参数?,android,firebase,flutter,dart,firebase-dynamic-links,Android,Firebase,Flutter,Dart,Firebase Dynamic Links,你能告诉我如何使用flatter插件firebase\u dynamic\u links发送和获取参数吗 我想在deeplink/dynamic链接中传递用户名和密码等参数,如下所示: uriPrefix: 'https://test.page.link/appinvite?username=Test&password=123456', link: Uri.parse('https://test.page.link/appinvite?username=Test&password

你能告诉我如何使用flatter插件firebase\u dynamic\u links发送和获取参数吗

我想在deeplink/dynamic链接中传递用户名和密码等参数,如下所示:

uriPrefix: 'https://test.page.link/appinvite?username=Test&password=123456',
link: Uri.parse('https://test.page.link/appinvite?username=Test&password=123456'),
这是传递数据的正确方法吗

之后,我使用下面的代码获取数据

await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
但是,它为我提供了我在firebase控制台中为深层链接URL中的firebase动态链接添加的虚拟web URL

目前我可以从firebase动态链接打开应用程序,但无法获取自定义参数

任何帮助都将不胜感激

更新代码:

发送邀请:

_generateAndShareDynamicLink() async {
    final DynamicLinkParameters parameters = DynamicLinkParameters(
      uriPrefix: 'https://test.page.link/groupinvite',
      link: Uri.parse('https://test.page.link/groupinvite'),
      androidParameters: AndroidParameters(
        packageName: 'com.test.flutter_authentication',
        minimumVersion: 0,
      ),
      dynamicLinkParametersOptions: DynamicLinkParametersOptions(
        shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable,
      ),
    );

    Uri url = await parameters.buildUrl();

    shareURL(Uri.https(url.authority, url.path, {"username": "Test"}));
}
用于获取initState()内的数据:

仍然检索到的数据为空

有人能帮忙吗?

这对我很有用

发送方:

Future<String> generateLink() async {
final DynamicLinkParameters parameters = DynamicLinkParameters(
      uriPrefix: 'https://<your-domain-name>.page.link',
      link: Uri.parse(
          'https://<your-domain-name>.page.link/<your-route>/?id=acb&name=me'), // <- your paramaters
      dynamicLinkParametersOptions: DynamicLinkParametersOptions(
          shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
      androidParameters: AndroidParameters(
        packageName: '<package-name>',
        minimumVersion: 0,
      ),
      socialMetaTagParameters: SocialMetaTagParameters(
        title: "click the link",
      ),
    );
    final Uri dynamicUrl = await parameters.buildUrl();
    final ShortDynamicLink shortenedLink =
        await DynamicLinkParameters.shortenUrl(
      dynamicUrl,
      DynamicLinkParametersOptions(
          shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
    );
    final Uri shortUrl = shortenedLink.shortUrl;
    return "https://<your-domain-name>.page.link" + shortUrl.path;
  }
Future generateLink()异步{
最终DynamicClinkParameters参数=DynamicClinkParameters(
前缀:'https://.page.link',
链接:Uri.parse(

'https://.page.link//?id=acb&name=me“),使用动态链接的最佳方式是

import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
import 'package:flutter/material.dart';

class TestPage extends StatefulWidget {
  @override
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {

  @override
  void initState() {
    super.initState();
    fetchLinkData();
  }

  void fetchLinkData() async {
    // FirebaseDynamicLinks.getInitialLInk does a call to firebase to get us the real link because we have shortened it.
    var link = await FirebaseDynamicLinks.instance.getInitialLink();

    // This link may exist if the app was opened fresh so we'll want to handle it the same way onLink will.
    handleLinkData(link);

    // This will handle incoming links if the application is already opened
    FirebaseDynamicLinks.instance.onLink(onSuccess: (PendingDynamicLinkData dynamicLink) async {
      handleLinkData(dynamicLink);
    });
  }

  void handleLinkData(PendingDynamicLinkData data) {
    final Uri uri = data?.link;
    if(uri != null) {
      final queryParams = uri.queryParameters;
      if(queryParams.length > 0) {
        String userName = queryParams["username"];
        // verify the username is parsed correctly
        print("My users username is: $userName");
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Sample"),
      ),
      body: Center(
        child: Text("Test"),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          var dynamicLink = await createDynamicLink(userName: "Test");
          // dynamicLink has been generated. share it with others to use it accordingly.
          print("Dynamic Link: $dynamicLink");
        },
        child: Icon(
          Icons.add,
          color: Colors.white,
        ),
      ),
    );
  }

  Future<Uri> createDynamicLink({@required String userName}) async {
    final DynamicLinkParameters parameters = DynamicLinkParameters(
      // This should match firebase but without the username query param
      uriPrefix: 'https://test.page.link',
      // This can be whatever you want for the uri, https://yourapp.com/groupinvite?username=$userName
      link: Uri.parse('https://test.page.link/groupinvite?username=$userName'),
      androidParameters: AndroidParameters(
        packageName: 'com.test.demo',
        minimumVersion: 1,
      ),
      iosParameters: IosParameters(
        bundleId: 'com.test.demo',
        minimumVersion: '1',
        appStoreId: '',
      ),
    );
    final link = await parameters.buildUrl();
    final ShortDynamicLink shortenedLink = await DynamicLinkParameters.shortenUrl(
      link,
      DynamicLinkParametersOptions(shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
    );
    return shortenedLink.shortUrl;
  }
}
import'package:firebase_dynamic_links/firebase_dynamic_links.dart';
进口“包装:颤振/材料.省道”;
类TestPage扩展了StatefulWidget{
@凌驾
_TestPageState createState();
}
类_TestPageState扩展了状态{
@凌驾
void initState(){
super.initState();
fetchLinkData();
}
void fetchLinkData()异步{
//firebase DynamicClinks.getInitialLInk调用firebase以获取真正的链接,因为我们缩短了它。
var link=await FirebaseDynamicLinks.instance.getInitialLink();
//如果应用程序是以全新方式打开的,则此链接可能存在,因此我们希望以与onLink相同的方式处理此链接。
handleLinkData(链接);
//如果应用程序已经打开,这将处理传入链接
FireBaseDynamicLink.instance.onLink(onSuccess:(PendingDynamicLink数据dynamicLink)异步{
HandleLink数据(DynamicClink);
});
}
无效handleLinkData(PendingDynamicLinkData数据){
最终Uri=数据?.link;
if(uri!=null){
final queryParams=uri.queryParameters;
如果(queryParams.length>0){
字符串userName=queryParams[“userName”];
//验证用户名是否正确解析
打印(“我的用户用户名是:$username”);
}
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“样本”),
),
正文:中(
子项:文本(“测试”),
),
浮动操作按钮:浮动操作按钮(
onPressed:()异步{
var dynamicLink=await createDynamicLink(用户名:“Test”);
//已生成dynamicLink。请与其他人共享以相应地使用它。
打印(“动态链接:$dynamicLink”);
},
子:图标(
Icons.add,
颜色:颜色,白色,
),
),
);
}
未来的createDynamicLink({@required String userName})异步{
最终DynamicClinkParameters参数=DynamicClinkParameters(
//这应该与firebase匹配,但没有用户名查询参数
前缀:'https://test.page.link',
//这可以是uri所需的任何内容,https://yourapp.com/groupinvite?username=$userName
链接:Uri.parse('https://test.page.link/groupinvite?username=$userName'),
androidParameters:androidParameters(
packageName:'com.test.demo',
最低版本:1,
),
iosParameters:iosParameters(
bundleId:'com.test.demo',
最低版本:“1”,
appStoreId:“”,
),
);
final link=wait parameters.buildUrl();
final ShortDynamicLink shortenedLink=等待DynamicLinkParameters.shortenUrl(
链接
DynamicClinkParameters选项(ShortDynamicClinkPath长度:ShortDynamicClinkPath长度。不可用),
);
返回shortenedLink.shortUrl;
}
}

你完成了。

我已经用同样的方法创建了链接。但是生成的链接说在浏览器上打开时找不到动态链接。这里创建的链接也不会显示在firebase控制台中。请脱帽致敬,先生。我一直在搜索向链接添加参数,但没有得到满足。这对我有很大帮助。谢谢你Welcome@XualakhawlhringURI在web浏览器参数重定向期间工作正常,显示内部URL,但我没有得到queryParameters。@abhijat_saxena我很高兴我能提供帮助。起初,当我的要求没有答案时,我也有同样的感觉。
FirebaseDynamicLinks.instance.onLink(
    onSuccess: (PendingDynamicLinkData dynamicLink) async {
      final Uri deepLink = dynamicLink?.link;
      if (deepLink != null) {
        print(deepLink.queryParameters['id']); // <- prints 'abc'
      }
    }, onError: (OnLinkErrorException e) async {
    print('onLinkError');
    print(e.message);
  }
);
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
import 'package:flutter/material.dart';

class TestPage extends StatefulWidget {
  @override
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {

  @override
  void initState() {
    super.initState();
    fetchLinkData();
  }

  void fetchLinkData() async {
    // FirebaseDynamicLinks.getInitialLInk does a call to firebase to get us the real link because we have shortened it.
    var link = await FirebaseDynamicLinks.instance.getInitialLink();

    // This link may exist if the app was opened fresh so we'll want to handle it the same way onLink will.
    handleLinkData(link);

    // This will handle incoming links if the application is already opened
    FirebaseDynamicLinks.instance.onLink(onSuccess: (PendingDynamicLinkData dynamicLink) async {
      handleLinkData(dynamicLink);
    });
  }

  void handleLinkData(PendingDynamicLinkData data) {
    final Uri uri = data?.link;
    if(uri != null) {
      final queryParams = uri.queryParameters;
      if(queryParams.length > 0) {
        String userName = queryParams["username"];
        // verify the username is parsed correctly
        print("My users username is: $userName");
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Sample"),
      ),
      body: Center(
        child: Text("Test"),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          var dynamicLink = await createDynamicLink(userName: "Test");
          // dynamicLink has been generated. share it with others to use it accordingly.
          print("Dynamic Link: $dynamicLink");
        },
        child: Icon(
          Icons.add,
          color: Colors.white,
        ),
      ),
    );
  }

  Future<Uri> createDynamicLink({@required String userName}) async {
    final DynamicLinkParameters parameters = DynamicLinkParameters(
      // This should match firebase but without the username query param
      uriPrefix: 'https://test.page.link',
      // This can be whatever you want for the uri, https://yourapp.com/groupinvite?username=$userName
      link: Uri.parse('https://test.page.link/groupinvite?username=$userName'),
      androidParameters: AndroidParameters(
        packageName: 'com.test.demo',
        minimumVersion: 1,
      ),
      iosParameters: IosParameters(
        bundleId: 'com.test.demo',
        minimumVersion: '1',
        appStoreId: '',
      ),
    );
    final link = await parameters.buildUrl();
    final ShortDynamicLink shortenedLink = await DynamicLinkParameters.shortenUrl(
      link,
      DynamicLinkParametersOptions(shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
    );
    return shortenedLink.shortUrl;
  }
}