Flutter firebase dynamic link 不听
Flutter firebase dynamic link not listening
我正在尝试在 flutter 应用程序中实施 Firebase Dynamic links。当我单击 link 时,它会打开应用程序但不会调用监听函数。
我是按照FlutterFire一步一步重新配置的,所以我认为问题不在配置上,但可能是我使用插件的方式,因为没有关于最新版本插件的文档。
Firebase 在我的应用程序中正确初始化,因为我正在使用其他服务。
我正在 android 模拟器上进行测试
我正在尝试使用以下代码从有状态小部件中收听动态 link
我首先导航到包含此小部件的页面,然后我将应用设置为后台,单击 link,应用在同一位置打开,但没有任何反应。
@override
void initState() {
super.initState();
initLink();
}
void initLink() {
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
print('dynamic link');
print(dynamicLinkData.toString());
// Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
}
这里有一个未解决的问题 https://github.com/FirebaseExtended/flutterfire/issues/8261 其他一些人也遇到了同样的问题,包括我自己。
现在看来,至少让事情重新开始工作的临时解决方案是由 odlund 发布的。如果您进行这些更改,监听器应该会再次工作,直到我们有更多的官方修复:
https://github.com/FirebaseExtended/flutterfire/commit/8bb4bee7e678241e75ab37a2bcfa0831426b91fa
请更新firebase_dynamic_links至4.1.1。似乎是 4.1.0 或更早版本的问题,其中 FirebaseDynamicLinks.instance.onLink.listen 不起作用
您无需检查应用程序是在后台还是已恢复即可运行。
这很完美!
class _MainAppState extends State<MainApp> {
Future<void> initDynamicLinks() async {
print("Initial DynamicLinks");
FirebaseDynamicLinks dynamicLinks = FirebaseDynamicLinks.instance;
// Incoming Links Listener
dynamicLinks.onLink.listen((dynamicLinkData) {
final Uri uri = dynamicLinkData.link;
final queryParams = uri.queryParameters;
if (queryParams.isNotEmpty) {
print("Incoming Link :" + uri.toString());
// your code here
} else {
print("No Current Links");
// your code here
}
});
// Search for Firebase Dynamic Links
PendingDynamicLinkData? data = await dynamicLinks
.getDynamicLink(Uri.parse("https://yousite.page.link/refcode"));
final Uri uri = data!.link;
if (uri != null) {
print("Found The Searched Link: " + uri.toString());
// your code here
} else {
print("Search Link Not Found");
// your code here
}
}
Future<void> initFirebase() async {
print("Initial Firebase");
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
// await Future.delayed(Duration(seconds: 3));
initDynamicLinks();
}
@override
initState() {
print("INITSTATE to INITIALIZE FIREBASE");
super.initState();
initFirebase();
}
我正在尝试在 flutter 应用程序中实施 Firebase Dynamic links。当我单击 link 时,它会打开应用程序但不会调用监听函数。
我是按照FlutterFire一步一步重新配置的,所以我认为问题不在配置上,但可能是我使用插件的方式,因为没有关于最新版本插件的文档。
Firebase 在我的应用程序中正确初始化,因为我正在使用其他服务。
我正在 android 模拟器上进行测试
我正在尝试使用以下代码从有状态小部件中收听动态 link
我首先导航到包含此小部件的页面,然后我将应用设置为后台,单击 link,应用在同一位置打开,但没有任何反应。
@override
void initState() {
super.initState();
initLink();
}
void initLink() {
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
print('dynamic link');
print(dynamicLinkData.toString());
// Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
}
这里有一个未解决的问题 https://github.com/FirebaseExtended/flutterfire/issues/8261 其他一些人也遇到了同样的问题,包括我自己。
现在看来,至少让事情重新开始工作的临时解决方案是由 odlund 发布的。如果您进行这些更改,监听器应该会再次工作,直到我们有更多的官方修复: https://github.com/FirebaseExtended/flutterfire/commit/8bb4bee7e678241e75ab37a2bcfa0831426b91fa
请更新firebase_dynamic_links至4.1.1。似乎是 4.1.0 或更早版本的问题,其中 FirebaseDynamicLinks.instance.onLink.listen 不起作用
您无需检查应用程序是在后台还是已恢复即可运行。
这很完美!
class _MainAppState extends State<MainApp> {
Future<void> initDynamicLinks() async {
print("Initial DynamicLinks");
FirebaseDynamicLinks dynamicLinks = FirebaseDynamicLinks.instance;
// Incoming Links Listener
dynamicLinks.onLink.listen((dynamicLinkData) {
final Uri uri = dynamicLinkData.link;
final queryParams = uri.queryParameters;
if (queryParams.isNotEmpty) {
print("Incoming Link :" + uri.toString());
// your code here
} else {
print("No Current Links");
// your code here
}
});
// Search for Firebase Dynamic Links
PendingDynamicLinkData? data = await dynamicLinks
.getDynamicLink(Uri.parse("https://yousite.page.link/refcode"));
final Uri uri = data!.link;
if (uri != null) {
print("Found The Searched Link: " + uri.toString());
// your code here
} else {
print("Search Link Not Found");
// your code here
}
}
Future<void> initFirebase() async {
print("Initial Firebase");
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
// await Future.delayed(Duration(seconds: 3));
initDynamicLinks();
}
@override
initState() {
print("INITSTATE to INITIALIZE FIREBASE");
super.initState();
initFirebase();
}