繁体   English   中英

flutter + firebase 无密码 email 登录-动态链接数据返回 null

[英]flutter + firebase passwordless email login - dynamic link data returns null

我正在尝试在我的应用程序上实现无密码 email 登录。 点击链接后,应用从后台返回,但动态链接为null。

这就是我发送邮件的方式(当然,我的应用程序具有正确的值):

user.sendSignInWithEmailLink(
      email: _email,
      androidInstallIfNotAvailable: true,
      iOSBundleID: "com.company.appname",
      androidMinimumVersion: "16",
      androidPackageName: "com.company.appname",
      url: "https://appname.page.link/email",
      handleCodeInApp: true);

我还添加了如下意图:

<intent-filter>
           <action android:name="android.intent.action.VIEW" />
           <category android:name="android.intent.category.DEFAULT" />
           <category android:name="android.intent.category.BROWSABLE" />

           <data android:host="appname.page.link" android:scheme="http"/>
           <data android:host="appname.page.link" android:scheme="https"/>
        </intent-filter>

有意尝试了不同的变体,但没有帮助,包括编写 firebase 项目 url 作为主机,如: project-name.firebaseapp.com

返回的数据仍然是空的。

有什么想法吗? 我错过了什么吗?

我已将firebase_dynamic_links包更新到最新版本 (0.5.0+9),同时使用以下配置并开始工作。

发送登录链接配置:

firebaseAuth.sendSignInWithEmailLink(
        email: email,
        url: "https://mydemoapp.page.link/email",
        androidInstallIfNotAvailable: true,
        androidMinimumVersion: '21',
        androidPackageName: 'com.example.mydemoapp'
        handleCodeInApp: true,
        iOSBundleID: 'com.example.mydemoapp');

AndroidManifest.xml意图过滤器配置:

    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <intent-filter>
        <data android:host="mydemoapp.page.link" android:scheme="https"/>
        <data android:host="mydemoapp.page.link" android:scheme="http"/>
    </intent-filter>

在 Flutter 中获取动态链接。

该示例来自https://pub.dev/packages/firebase_dynamic_links

如果您的应用程序不是从动态链接打开的,则getInitialLink()返回 null 这就是为什么你必须在应用程序已经打开的情况下实现FirebaseDynamicLinks.instance.onLink的原因。

void main() {
  runApp(MaterialApp(
    title: 'Dynamic Links Example',
    routes: <String, WidgetBuilder>{
      '/': (BuildContext context) => MyHomeWidget(), // Default home route
      '/helloworld': (BuildContext context) => MyHelloWorldWidget(),
    },
  ));
}

class MyHomeWidgetState extends State<MyHomeWidget> {
  .
  .
  .
  @override
  void initState() {
    super.initState();
    this.initDynamicLinks();
  }

  void initDynamicLinks() async {
    final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
    final Uri deepLink = data?.link;

    if (deepLink != null) {
      Navigator.pushNamed(context, deepLink.path);
    }

    FirebaseDynamicLinks.instance.onLink(
      onSuccess: (PendingDynamicLinkData dynamicLink) async {
        final Uri deepLink = dynamicLink?.link;

        if (deepLink != null) {
          Navigator.pushNamed(context, deepLink.path);
        }
      },
      onError: (OnLinkErrorException e) async {
        print('onLinkError');
        print(e.message);
      }
    );
  }
  .
  .
  .
}

mydemoapp.page.link必须添加到 Firebase 控制台中的授权域

appname.page.link还是appname.page.link/email您只需指定一封电子邮件即可实现

如果在 2022 年 3 月得到这个答案,这个错误又会发生,这是 Flutterfire 上的一个错误。

这是尚未合并的合并请求的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM