我需要实现一个深入的链接或推荐系统与我的颤振应用程序。理论是
此过程中的大部分工作将由我们的自定义后端处理。我需要的是,当有人使用我的推荐代码时,我希望在他/她注册时使用该代码。
这就是我创建的服务层:
class DynamicLinkService {
final dynamicLink = FirebaseDynamicLinks.instance;
handleDynamicLink() async {
await dynamicLink.getInitialLink();
// dynamicLink.onLink(onSuccess: (PendingDynamicLinkData data) async {
// // something
// },
// onError: (OnLinkErrorException e) async {
// // something
// },
// );
}
Future<String> createDynamicLink() async {
User user = Store.instance.getUser();
String userId = user.id;
print("User id = $userId");
final DynamicLinkParameters dynamicLinkParameters = DynamicLinkParameters(
uriPrefix: 'https://shoppydev.page.link',
link: Uri.parse(
'https://shoppydev.page.link/?invitedBy=$userId',
),
androidParameters: AndroidParameters(
packageName: 'co.company.app',
minimumVersion: 0,
),
iosParameters: IOSParameters(
bundleId: 'co.company.app',
minimumVersion: '0.0.1',
),
socialMetaTagParameters: SocialMetaTagParameters(
title: 'Refer A friend',
description: 'Refer and earn points',
),
);
final ShortDynamicLink shortDynamicLink = await dynamicLink.buildShortLink(
dynamicLinkParameters,
);
final Uri dynamicUrl = shortDynamicLink.shortUrl;
print(dynamicUrl.toString());
return dynamicUrl.toString();
}
void handleSuccessfulLinking(PendingDynamicLinkData? data) async {
final Uri? deepLink = data!.link;
print(deepLink.toString());
if (deepLink != null) {
var isRefer = deepLink.toString().contains('invitedBy');
if (isRefer) {
var code = deepLink.toString().split('invitedBy=')[1];
print(code);
if (code != null) {
// code contains the referrer's user id
// signup with the referrer's id
}
}
}
}
}正如您所看到的,目前我尝试创建一个与用户id的唯一引用链接。但是,我所关注的大多数指南以及一些github repos都为处理动态链接做了类似的工作:
dynamicLink.onLink(onSuccess: (PendingDynamicLinkData data) async {
// something
},
onError: (OnLinkErrorException e) async {
// something
},
);抛出:The expression doesn't evaluate to a function, so it can't be invoked.
其他可能有用的注释:
在我的app.dart里我有:
class App extends StatefulWidget {
const App({Key? key}) : super(key: key);
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
@override
void initState() {
super.initState();
initDynamicLinks(context);
}
@override
Widget build(BuildContext context) {
final provider = Provider.of<LocaleProvider>(context);
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'App Name',
theme: ThemeData(
primarySwatch: Colors.blue,
),
onGenerateRoute: buildRouter,
locale: provider.locale,
supportedLocales: L10n.all,
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
);
}
/*
Dynamic Links
*/
void initDynamicLinks(BuildContext context) async {
final PendingDynamicLinkData? data =
await FirebaseDynamicLinks.instance.getInitialLink();
final Uri? link = data?.link;
if (link != null) {
Navigator.pushNamed(context, link.path);
}
}
}到目前为止我所面临的问题:
我仍然没有找到关于如何获得推荐代码的可靠文档(这是奖励推荐人的需要)。
我已经查看了这两篇文章:
简而言之,我想用我的用户id创建一个独特的引用链接。与其他人共享用户id,当他/她注册到我的应用程序时,我希望获得链接上的推荐代码。
示例: https://app.page.link/?invitedBy=$userId
当有人安装和注册时,我想要userId,这样我就可以将它传递给SignUpRequest的invitedBy属性。
编辑:,我想我的问题还不够清楚。因此,我将举一个例子:
我想要一个独特的推荐链接在我的电话,我可以给我的朋友约翰。一旦他下载并注册了应用程序,我就想得到一些奖励。
因此,当他将其SignUpRequest发送到后端时,我希望我的推荐代码与该请求一起使用,因此请求如下:
SignUpRequest()
..name = "John Doe",
..email = "john@gmail.com"
..invitedBy = "...my referral code goes here"所有其他验证和给点过程都将在be中完成。
发布于 2022-02-14 20:42:00
将以下所有代码放入App.dart或Splash屏幕,基本上是第一个屏幕
initState
@override
void initState() {
super.initState();
_initDynamicLinks();
}_initDynamicLinks -这是动态链接启动的地方。
Future<void> _initDynamicLinks() async {
final PendingDynamicLinkData data = await instance.getInitialLink();
final Uri deepLink = data?.link;
_handleDynamicLink(deepLink);
FirebaseDynamicLinks.instance.onLink.listen((dynamicLink) {
final uri = dynamicLink.link;
_handleDynamicLink(uri);
}).onError((e) {
print('onLinkError');
print(e.message);
});
}_handleDynamicLink -这里是处理链接并解析它的地方。
void _handleDynamicLink(Uri deepLink) async {
if (deepLink != null) {
final url = deepLink.toString();
var isRefer = url.contains('invitedBy');
if (isRefer) {
var code = url.split('invitedBy=')[1];
print(code);
if (code != null) {
// code contains the referrer's user id
// signup with the referrer's id
}
}
}
}https://stackoverflow.com/questions/71112543
复制相似问题