flutter + firebase无密码电子邮件登录-动态链接数据返回null

时间:2019-12-16 16:22:55

标签: flutter firebase-authentication firebase-dynamic-links

我正在尝试在我的应用程序上实现无密码电子邮件登录。 点击链接后,该应用会从后台返回,但动态链接为空。

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

2019-11-28 07:37:37:246 9 sec: 1000 operations; 109.69 current ops/sec; [CLEANUP: Count=16, Max=87935, Min=0, Avg=5495.19, 90=2, 99=87935, 99.9=87935, 99.99=87935] [INSERT: Count=1000, Max=4280319, Min=1372, Avg=99485.98, 90=48735, 99=4263935, 99.9=4280319, 99.99=4280319]
[OVERALL], RunTime(ms), 9129
[OVERALL], Throughput(ops/sec), 109.54102311315587
[TOTAL_GCS_Copy], Count, 9
[TOTAL_GC_TIME_Copy], Time(ms), 118
[TOTAL_GC_TIME_%_Copy], Time(%), 1.2925840727352393
[TOTAL_GCS_MarkSweepCompact], Count, 0
[TOTAL_GC_TIME_MarkSweepCompact], Time(ms), 0
[TOTAL_GC_TIME_%_MarkSweepCompact], Time(%), 0.0
[TOTAL_GCs], Count, 9
[TOTAL_GC_TIME], Time(ms), 118
[TOTAL_GC_TIME_%], Time(%), 1.2925840727352393
[CLEANUP], Operations, 16
[CLEANUP], AverageLatency(us), 5495.1875
[CLEANUP], MinLatency(us), 0
[CLEANUP], MaxLatency(us), 87935
[CLEANUP], 95thPercentileLatency(us), 13
[CLEANUP], 99thPercentileLatency(us), 87935
[INSERT], Operations, 1000
[INSERT], AverageLatency(us), 99485.982
[INSERT], MinLatency(us), 1372
[INSERT], MaxLatency(us), 4280319
[INSERT], 95thPercentileLatency(us), 58335
[INSERT], 99thPercentileLatency(us), 4263935
[INSERT], Return=OK, 1000

我还添加了以下意图:

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

尝试了不同的变化,没有帮助,包括编写了firebase 项目网址作为主机,例如:<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>

数据仍然恢复为空。

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

2 个答案:

答案 0 :(得分:1)

我已将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()返回空值。因此,如果应用已打开,则必须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控制台中的授权域中。

答案 1 :(得分:0)

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