[英]Flutter Firebase Email Passwordless login - Link giving error
[英]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.