在安卓系统上一切正常,但在ios上,当应用程序已经打开时,点击链接将应用程序放在前台,但是onLink方法没有调用。
链接:
https://<url>/?link=<link>&apn=<apn>&ibi=<bundle>&isi=<isi>
包:
码
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
import 'package:flutter/material.dart';
class DynamicLinksService {
Future handleDynamicLinks(BuildContext context) async {
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.getInitialLink();
await _handleDynamicLink(context, data);
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLinkData) async {
await _handleDynamicLink(context, dynamicLinkData);
}, onError: (OnLinkErrorException e) async {
print('Dynamic link failed: ${e.message}');
});
}
Future _handleDynamicLink(
BuildContext context, PendingDynamicLinkData data) async {
final Uri deepLink = data?.link;
if (deepLink != null) {
print('_handleDeepLink | deepLink $deepLink');
await _doSomething(context, deepLink.toString());
} else {
print('no deepLink');
}
}
}发布于 2021-05-22 11:36:37
根据我的实验,onLink不会在iOS上被调用,但是您可以调用getInitialLink(),它将包含链接。我不确定这是通过设计还是错误,但它似乎跨越了几个版本。
示例服务代码:
Future<Uri> retrieveDynamicLink(BuildContext context) async {
try {
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
return deepLink;
} catch (e) {
print(e.toString());
}
return null;
}小部件片段
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed){
final _timerLink = Timer(
const Duration(milliseconds: 1000),
() async {
final auth = Provider.of<FirebaseAuthService>(context, listen: false);
final link = await auth.retrieveDynamicLink(context);
_handleLink(link);
},
);
}
}确保添加WidgetsBindingObserver
class _SignInPageState extends State<SignInPage> with TickerProviderStateMixin, WidgetsBindingObserver{发布于 2021-08-17 04:13:30
我不知道为什么会这样,但是在Firebase激活您的FirebaseMessaging.instance.getInitialMessage()回调之前,您必须至少调用一次onLink。
不确定这是出于设计还是错误。
如果这有用的话请告诉我。
https://stackoverflow.com/questions/66439839
复制相似问题