【发布时间】:2021-06-24 14:39:42
【问题描述】:
我正在使用 firebase 动态链接在我的应用中打开电子邮件验证链接,但不幸的是,点击该链接时该链接无法启动应用。
到目前为止我做了什么
创建新用户时,会通过电子邮件发送一个链接以进行验证:
if(firebaseUser != null && !firebaseUser.emailVerified){
await createUserInDatabaseIfNew(firebaseUser);
var actionCodeSettings = auth.ActionCodeSettings(
url: 'https://muslimcoloc.page.link/?email=${firebaseUser.email}',
dynamicLinkDomain: "muslimcoloc.page.link",
androidInstallApp: true,
androidMinimumVersion: "12",
androidPackageName: "com.app.muslim_coloc",
iOSBundleId: "com.muslim_coloc.ios",
handleCodeInApp: true,
);
await firebaseUser.sendEmailVerification(actionCodeSettings);
}
我在 firebase 控制台中获得了 dynamicLinkDomain:
然后,我使用firebase dynamic links package 处理我的main.dart 文件中的链接接收:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(
MyApp(),
);
}
class MyApp extends StatelessWidget {
MyApp({Key key, }) : super(key: key);
@override
Widget build(BuildContext context) {
return AppView();
}
}
class AppView extends StatefulWidget {
const AppView({
Key key,
}) : super(key: key);
@override
_AppViewState createState() => _AppViewState();
}
class _AppViewState extends State<AppView> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
this.initDynamicLinks();
}
}
void initDynamicLinks() async {
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final Uri deepLink = dynamicLink?.link;
FirebaseAuth auth = FirebaseAuth.instance;
//Get actionCode from the dynamicLink
var actionCode = deepLink.queryParameters['oobCode'];
try {
await auth.checkActionCode(actionCode);
await auth.applyActionCode(actionCode);
// If successful, reload the user:
auth.currentUser.reload();
} on FirebaseAuthException catch (e) {
if (e.code == 'invalid-action-code') {
print('The code is invalid.');
}
}
if (deepLink != null) {
Navigator.pushNamed(context, deepLink.path);
}
},
onError: (OnLinkErrorException e) async {
print('onLinkError');
print(e.message);
}
);
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
if (deepLink != null) {
Navigator.pushNamed(context, deepLink.path);
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(...)
}
当我点击电子邮件的链接时,应用程序无法启动,浏览器也无法启动。这是发生了什么:
它尝试在浏览器上启动某些东西,但随后又回到 gmail。
但是,如果我在桌面浏览器中单击该链接,它可以正常工作,电子邮件已通过验证。
我很难理解这是怎么回事。我做事的方式有问题吗?
【问题讨论】:
-
除此电子邮件链接外,您是否成功处理了应用中的动态链接?还是所有动态链接都不能在手机上使用?
-
我不知道,这是我尝试实现的第一个:/
-
您使用什么版本的动态链接,以便更好地帮助您?
-
你的意思是包的版本?最后一个
^0.8.0 -
我发布了一个带有工作代码的答案,请检查一下,如果它解决了您的问题,请告诉我。
标签: firebase flutter dart firebase-dynamic-links