首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式构建具有深链接的推荐系统

以编程方式构建具有深链接的推荐系统
EN

Stack Overflow用户
提问于 2022-02-14 13:17:23
回答 1查看 711关注 0票数 1

我需要实现一个深入的链接或推荐系统与我的颤振应用程序。理论是

  1. 签名和登录将由自定义后端处理,而不是由firebase
  2. 处理,在用户注册我的应用程序之后,他将能够将应用程序引用给其他人,如果其他人安装了该应用程序,推荐者将获得一些积分。

此过程中的大部分工作将由我们的自定义后端处理。我需要的是,当有人使用我的推荐代码时,我希望在他/她注册时使用该代码。

这就是我创建的服务层:

代码语言:javascript
复制
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都为处理动态链接做了类似的工作:

代码语言:javascript
复制
     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里我有:

代码语言:javascript
复制
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);
    }
  }
}

到目前为止我所面临的问题:

我仍然没有找到关于如何获得推荐代码的可靠文档(这是奖励推荐人的需要)。

我已经查看了这两篇文章:

  1. Implementing referral rewards in Flutter
  2. Flutter - How to pass custom arguments in firebase dynamic links for app invite feature?

简而言之,我想用我的用户id创建一个独特的引用链接。与其他人共享用户id,当他/她注册到我的应用程序时,我希望获得链接上的推荐代码。

示例: https://app.page.link/?invitedBy=$userId

当有人安装和注册时,我想要userId,这样我就可以将它传递给SignUpRequest的invitedBy属性。

编辑:,我想我的问题还不够清楚。因此,我将举一个例子:

我想要一个独特的推荐链接在我的电话,我可以给我的朋友约翰。一旦他下载并注册了应用程序,我就想得到一些奖励。

因此,当他将其SignUpRequest发送到后端时,我希望我的推荐代码与该请求一起使用,因此请求如下:

代码语言:javascript
复制
SignUpRequest()
..name = "John Doe",
..email = "john@gmail.com"
..invitedBy = "...my referral code goes here"

所有其他验证和给点过程都将在be中完成。

EN

回答 1

Stack Overflow用户

发布于 2022-02-14 20:42:00

将以下所有代码放入App.dart或Splash屏幕,基本上是第一个屏幕

initState

代码语言:javascript
复制
@override
void initState() {
  super.initState();
  _initDynamicLinks();
}

_initDynamicLinks -这是动态链接启动的地方。

代码语言:javascript
复制
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 -这里是处理链接并解析它的地方。

代码语言:javascript
复制
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
        }
      }
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71112543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档