Ayu*_*har 6 deep-linking dart ios-universal-links flutter
有没有办法在颤振中实现深层链接,以便如果用户单击链接,则他们被重定向到应用程序的特定部分,前提是应用程序已安装,但如果没有,则将它们重定向到相应的应用程序商店,安装应用程序,然后转到该特定部分?
在寻找解决方案时,我遇到了这个名为的包,uni_links但我不确定它是否可以满足此要求。
为此,您可以使用 Firebase 动态链接:
https://firebase.google.com/docs/dynamic-links
那里说:
如果用户在 iOS 或 Android 上打开动态链接并且没有安装您的应用程序,系统会提示用户安装它;然后,安装后,您的应用程序将启动并可以访问该链接。
您可以在此处找到有关如何使用 Flutter 实现此功能的信息:
https://pub.dev/packages/firebase_dynamic_links
我自己在 Android 和 iOS 上尝试过,效果很好。如果未安装该应用程序,则会打开 Google Play 商店或 Apple AppStore。用户可以点击“安装”,然后点击“打开”。之后您的应用程序启动并将动态链接发送到您的应用程序(在 iOS 上通过剪贴板),您可以按照上面网站的说明访问它。即在您可以调用的第一个 initState 方法中启动您的应用程序之后
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.retrieveDynamicLink();
final Uri deepLink = data?.link;
Run Code Online (Sandbox Code Playgroud)
获取深层链接。但是,根据我在 iOS 上的经验,现在检索链接还为时过早。尝试时我得到了“null”。似乎需要一点时间。然后我使用了 WidgetsBindingObserver 并在 didChangeAppLifecycleState 方法中观察了AppLifecycleState.resumed. 我在那里调用了retrieveDynamicLink。由于权限请求(如果用户允许通知),该方法被调用两次。第一次它返回 null 但当它第二次被调用时它返回深层链接。所以我的解决方案是这样的:
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
@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) {
_retrieveDynamicLink();
}
}
/**
* Laden des Deep Link nach der Installation.
*/
Future<void> _retrieveDynamicLink() async {
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.retrieveDynamicLink();
final Uri deepLink = data?.link;
if (deepLink != null) {
// Use the deepLink
// ...
}
}
Run Code Online (Sandbox Code Playgroud)