具有动态参数的 Firebase 动态 link?
Firebase dynamic link with dynamic parameters?
我正在尝试将动态参数添加到我的动态 link。
例如,如果我将 link 作为 https://xyz.page.link/promo?id=1
添加到 firebase 控制台。我希望 id=1 应该是动态的,即使用相同的 link 我可以为不同的 id 传递它,而不是为每个 id 创建 links 并每次检查代码以重定向到 Flutter来自下面提到的 getRoute() 的屏幕。
任何人都可以提出一些实现此目的的方法吗?
// Flutter imports:
import 'package:flutter/material.dart';
// Package imports:
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
// Project imports:
import 'package:xyz/src/ui/home_screen.dart';
import 'package:xyz/src/ui/promo_screen.dart';
class DynamicLinksService {
static Future<Widget> initDynamicLinks() async {
final PendingDynamicLinkData? data = await FirebaseDynamicLinks.instance.getInitialLink();
if (data != null){
return getRoute(data.link);
}
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData? dynamicLink) async {
return getRoute(dynamicLink!.link);
}, onError: (OnLinkErrorException e) async {
print('onLinkError');
return e.message;
});
return HomeScreen();
}
static Widget getRoute(deepLink){
if (deepLink.toString().isEmpty) {
return HomeScreen();
}
if (deepLink.path == "/promo") {
final id = deepLink.queryParameters["id"];
if (id!= null) {
return PromoScreen(id: id);
}
}
return HomeScreen();
}
}
谢谢
Ajinkya Taranekar
我可以与您分享我用来创建带有参数的动态链接的代码:
class DynamicLinksService {
static Future<Uri> getGroupDynamicLink(
BuildContext context, String id) async {
final DynamicLinkParameters parameters = DynamicLinkParameters(
uriPrefix: 'https://my_page.page.link',
link: Uri.parse(
'https://my_page.page.link/add_group/?id=${id}'),
dynamicLinkParametersOptions: DynamicLinkParametersOptions(
shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
androidParameters: AndroidParameters(
packageName: 'com.my_page',
minimumVersion: 0,
),
iosParameters: IosParameters(
bundleId: 'com.my_page',
minimumVersion: '0',
appStoreId: '122343564',
),
socialMetaTagParameters: SocialMetaTagParameters(
title: AppLocalization.of(context).getMessage('join_info_group'),
description: group.title,
imageUrl: Uri.parse(group.image)),
);
final link = await parameters.buildUrl();
final ShortDynamicLink shortenedLink =
await DynamicLinkParameters.shortenUrl(
link,
DynamicLinkParametersOptions(
shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
);
final Uri dynamicUrl = shortenedLink.shortUrl;
return dynamicUrl;
}
}
只需将值更改为您的项目值和数据。
我正在尝试将动态参数添加到我的动态 link。
例如,如果我将 link 作为 https://xyz.page.link/promo?id=1
添加到 firebase 控制台。我希望 id=1 应该是动态的,即使用相同的 link 我可以为不同的 id 传递它,而不是为每个 id 创建 links 并每次检查代码以重定向到 Flutter来自下面提到的 getRoute() 的屏幕。
任何人都可以提出一些实现此目的的方法吗?
// Flutter imports:
import 'package:flutter/material.dart';
// Package imports:
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
// Project imports:
import 'package:xyz/src/ui/home_screen.dart';
import 'package:xyz/src/ui/promo_screen.dart';
class DynamicLinksService {
static Future<Widget> initDynamicLinks() async {
final PendingDynamicLinkData? data = await FirebaseDynamicLinks.instance.getInitialLink();
if (data != null){
return getRoute(data.link);
}
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData? dynamicLink) async {
return getRoute(dynamicLink!.link);
}, onError: (OnLinkErrorException e) async {
print('onLinkError');
return e.message;
});
return HomeScreen();
}
static Widget getRoute(deepLink){
if (deepLink.toString().isEmpty) {
return HomeScreen();
}
if (deepLink.path == "/promo") {
final id = deepLink.queryParameters["id"];
if (id!= null) {
return PromoScreen(id: id);
}
}
return HomeScreen();
}
}
谢谢
Ajinkya Taranekar
我可以与您分享我用来创建带有参数的动态链接的代码:
class DynamicLinksService {
static Future<Uri> getGroupDynamicLink(
BuildContext context, String id) async {
final DynamicLinkParameters parameters = DynamicLinkParameters(
uriPrefix: 'https://my_page.page.link',
link: Uri.parse(
'https://my_page.page.link/add_group/?id=${id}'),
dynamicLinkParametersOptions: DynamicLinkParametersOptions(
shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
androidParameters: AndroidParameters(
packageName: 'com.my_page',
minimumVersion: 0,
),
iosParameters: IosParameters(
bundleId: 'com.my_page',
minimumVersion: '0',
appStoreId: '122343564',
),
socialMetaTagParameters: SocialMetaTagParameters(
title: AppLocalization.of(context).getMessage('join_info_group'),
description: group.title,
imageUrl: Uri.parse(group.image)),
);
final link = await parameters.buildUrl();
final ShortDynamicLink shortenedLink =
await DynamicLinkParameters.shortenUrl(
link,
DynamicLinkParametersOptions(
shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
);
final Uri dynamicUrl = shortenedLink.shortUrl;
return dynamicUrl;
}
}
只需将值更改为您的项目值和数据。