【问题标题】:Implementing referral rewards in Flutter在 Flutter 中实现推荐奖励
【发布时间】:2019-11-04 21:06:20
【问题描述】:

我想在我的应用程序中设置一个推荐系统,以便用户可以通过电子邮件/电话号码等(以最简单的方式)邀请他们的朋友,当确认被邀请者已安装应用程序时,它将奖励原始邀请发件人,例如一个月没有横幅广告。

我能在网上找到的唯一参考是这个:https://pub.dev/packages/firebase_dynamic_links#-readme-tab-

我不确定这是否是我所追求的,不幸的是,因为它是由 Flutter 团队设置的,它提供了关于如何实际实现其中任何一个的确切 0 解释,因为他们有点希望你已经是专业的全职程序员,可以自己填空。

这是我所追求的正确插件吗?有没有更好的资源?

编辑

沿着 Firebase 动态链接路径前进。我遇到的第一个障碍是它要求我拥有一个域,我可以在其中创建动态链接的 URL。所以我昨晚注册了一个域并按照 Firebase 的要求进行设置,以对其进行验证并连接到Firebase 项目(它会引导您完成此过程,一切似乎都运行良好,只是可能需要给您的 DNS 主机时间来反映此过程所需的 TXT 和 A 记录更改)。

所以现在我有一个名为 example.com 的经过验证的空白域

现在在 Firebase 中,在我创建的项目下,左侧下方是一个名为 Dynamic Links 的按钮。这将要求 example.com 通过您之前输入的 A 记录进行验证,但一旦验证,您就可以创建新的动态链接。

这里有5个步骤:

第 1 步)它会为您建议一个简短的 URL 链接。就我而言:example.com/gd7W。我接受了这个并点击下一步。

第 2 步)设置您的动态链接。它要求提供深层链接 URL 和动态链接名称。在我的例子中,我使用了 example.com/apps/refer_a_friend,你可以给动态链接起任何你喜欢的名字。我刚刚称我的“推荐朋友促销”。点击下一步。

步骤 3) 定义 iOS 的链接行为。我只是将其保留为“在浏览器中打开深层链接”

步骤 4) 为 Android 定义链接行为。我只是将其保留为“在浏览器中打开深层链接”

第 5 步)活动跟踪、社交标签和高级选项。在这个阶段,这些东西似乎并不重要,而不是为了这篇文章需要的东西,这只是让事情开始运作。这些东西用于分析和跟踪您的促销活动。您可以稍后再回来编辑。

所以在第 2 步中,我引用的深层链接 URL 实际上并不存在。我不确定是否应该这样做。如果我打算在我的网站上创建这个页面,但是如果是这样,我应该在这个页面上放什么?我目前的想法是,我应该在我的网站上创建一个重定向,从这个地址到应用程序的 google play 商店的 URL。我已经尝试过了,但它没有重定向。

接下来,再次回到示例应用程序(这里我指的是我们在下面的 cmets 中处理的示例,来自这里:https://github.com/flutter/plugins/tree/master/packages/firebase_dynamic_links/example)。

我认为这部分是我们需要查看的内容,因为它需要编辑以适合您之前步骤中的链接和地址:

final DynamicLinkParameters parameters = DynamicLinkParameters(
  uriPrefix: 'https://cx4k7.app.goo.gl',
  link: Uri.parse('https://dynamic.link.example/helloworld'),
  androidParameters: AndroidParameters(
    packageName: 'io.flutter.plugins.firebasedynamiclinksexample',
    minimumVersion: 0,
  ),
  dynamicLinkParametersOptions: DynamicLinkParametersOptions(
    shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short,
  ),
  iosParameters: IosParameters(
    bundleId: 'com.google.FirebaseCppDynamicLinksTestApp.dev',
    minimumVersion: '0',
  ),
);

我更改了这部分代码以尝试匹配我上面的工作,因此更新为:

final DynamicLinkParameters parameters = DynamicLinkParameters(
  uriPrefix: 'https://example.com/gd7W',
  link: Uri.parse('https://example.com/apps/refer_a_friend'),
  androidParameters: AndroidParameters(
    packageName: 'company01.appname', //The appID of my app on the store
    minimumVersion: 0,
  ),
  dynamicLinkParametersOptions: DynamicLinkParametersOptions(
    shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short,
  ),
  iosParameters: IosParameters(
    bundleId: 'company01.appname', //The appID of my app on the store
    minimumVersion: '0',
  ),
);

当我运行应用程序并单击获取短链接按钮时,日志中出现以下错误:

PlatformException(short_link_error, 400: Your project does not own Dynamic Links domain: https://example.com

我不确定这是正确的错误,因为在 Firebase 控制台中,此域已验证并且当前已连接。它似乎工作正常。我想知道真正的问题是否是我的深层链接此时并没有真正做任何事情,正如我所提到的,我并不完全确定它应该做什么。

编辑 2

补充一点,当我单击“获取长链接”按钮时,它实际上似乎返回了一些内容,一个极长的 URL,如下所示:

https://example.com/gd7W?amv=0&apn=company01.appname&ibi=company01.appname&imv=0&link=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcompany01.appname%26hl%3Den

这似乎是我在不同点指定的所有组件,但可能不正确。不过,这看起来像是一种进步!

编辑 3

我已经浏览了我能找到的每一个例子。没有人告诉我动态链接 URL 应该是什么、如何制作、它应该指向的位置或如何处理它。这似乎是让这项工作发挥作用的缺失环节。

我还可以尝试进行哪些其他设置?

编辑 4

我知道很多人都在阅读这个帖子,所以我很乐意为大家提供一个可行的示例。我没有得到足够的帮助,所以我从来没有得到它的工作。我必须从我的应用程序中完全删除推荐,这样我才能赶上截止日期。

【问题讨论】:

  • 那么,您最后找到推荐计划的解决方案了吗?
  • 我没有交配,最后放弃了。根本没有在我的应用程序中实现这一点,而且一年多来根本没有工作过。
  • 我找到了最简单的解决方案并实施并运行良好.....我已将其发布为答案。用测试用例。

标签: flutter firebase-dynamic-links referrals


【解决方案1】:

这就是我的工作方式:

  1. 在 Firebase 控制台中创建您的项目。
  2. 在左侧面板中选择“动态链接”
  3. 点击“开始”
  4. 输入域,例如 yourappname.page.link
  5. 点击“完成”
  6. 在左侧面板中单击“项目设置”
  7. 按照此处所述添加您的 Android 和 iOS 应用程序:https://firebase.google.com/docs/flutter/setup
  8. 要使动态链接在 iOS 中工作,您应该执行一些额外的步骤,如下所述:https://www.youtube.com/watch?v=sFPo296OQqk&feature=youtu.be&t=2m40s

为了创建动态链接,我使用了以下代码:

String link = Constants.REFERENCE_BASE_URL + referenceId; // it can be any url, it does not have to be an existing one
final DynamicLinkParameters parameters = DynamicLinkParameters(
      uriPrefix: 'https://myappname.page.link', // uri prefix used for Dynamic Links in Firebase Console
      link: Uri.parse(link),
      androidParameters: AndroidParameters(
        packageName: 'com.example.myappname', // package name for your app
        minimumVersion: 0,
      ),
      iosParameters: IosParameters(bundleId: 'com.example.myappname'), // bundle ID for your app
    );
final ShortDynamicLink shortDynamicLink =
        await parameters.buildShortLink();

为了接收动态链接,我在 main.dart 文件中使用了这段代码:

@override
  void initState() {
  super.initState();
  initDynamicLinks();
}

void initDynamicLinks() async {
  final PendingDynamicLinkData data =
    await FirebaseDynamicLinks.instance.getInitialLink();
  final Uri deepLink = data?.link;

  if (deepLink != null) {
    Navigator.pushNamed(context, deepLink.path);
  }

  FirebaseDynamicLinks.instance.onLink(
    onSuccess: (PendingDynamicLinkData dynamicLink) async {
      final Uri deepLink = dynamicLink?.link;

      if (deepLink != null) {
        Navigator.pushNamed(context, deepLink.path);
      }
    }, 
    onError: (OnLinkErrorException e) async {
      print('onLinkError');
      print(e.message);
    });
}

【讨论】:

  • 完美解决兄弟。我一直在寻找这种深度链接和推荐代码的解决方案。纯粹的描述真是一个惊人的答案。再次感谢。
【解决方案2】:

关于文档,您可以阅读README page,其中解释了所有可用功能以及如何设置项目以使插件工作。
最重要的是,您可以查看example application,其中包含此插件的完整实现的项目文件。您可以查看 Dart 代码和所有其他必需的设置。

现在,我想提出一个真正的问题:如果你想设置推荐奖励,你应该使用firebase_dynamic_links吗?
首先,您需要知道这是Firebase product suite 的一部分。您的问题不是很清楚您是否已经在项目中使用 Firebase,但是,如果您计划使用已经使用,则很可能只使用此产品Firebase 在您的项目中。
Firebase Dynamic Links 适用 完成这项任务,如果您已经在使用 Firebase,这将非常方便,但是,我不太确定它作为独立产品是否出色。
使用 Firebase 对您项目的其余部分也有一些影响,即您将收集分析数据等。

总之,firebase_dynamic_links 不是推荐奖励的 Flutter 解决方案。这就是 Firebase 解决方案
对于 Flutter,没有其他插件可以让您轻松设置这些奖励,但这是意料之中的。 firebase_dynamic_links 是一个平台解决方案,即它依赖于 Android 和 iOS 插件。
如果您想设置奖励,则需要 write your own platform-specific code 并以这种方式处理深层链接,这也是 firebase_dynamic_links 为 Firebase 所做的。

【讨论】:

  • 您好!我的居民救星。此时我已经将 Firebase 添加到我的项目中,仅用于分析统计信息,那么这是否是最佳路径?关于插件的完整实现,我目前已经将该示例作为一个单独的应用程序提取出来,并试图让它工作。有一行:final PendingDynamicLinkData data = 这就是它所说的。显然,那里似乎应该有什么东西,但没有说明是什么。我尝试了 Firebase 的动态链接,但它不接受字符串。该应用程序什么都不做,我认为这就是原因。
  • @Bisclavret 好吧,您需要考虑动态链接可能具有您不需要的功能。如果您只想要深度链接,使用平台代码自己实现它会更有效。它在文档中说final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.retrieveDynamicLink();
  • 仍在看这个并试图让示例应用程序正常工作。我不得不在线购买一个域名,并且我已经完成了验证过程。我认为我的 DNS 主机需要很长时间才能反映更改,所以我现在只需要等待。然后我应该能够创建一个动态链接来测试示例应用程序。
  • 好的,现在一切都得到了验证。我已经在我的域上设置了引荐 URL,但现在我在应用程序中遇到错误,因为我的 URL 路径实际上不包含任何内容。我该怎么办?我的计划是设置一个 URL 路径,简单地重定向到应用程序的 google play 商店页面,这基本上是这里需要做的吗?
  • 打算用幕后发生的事情的更多细节来更新我的原始问题。
【解决方案3】:

我找到并成功实施的最简单的解决方案

https://pub.dev/packages/flutter_branch_sdk

您是否在设备中安装了该应用。

场景 1:当您点击推荐链接并且您的手机中没有安装应用程序时 -> 它会将您重定向到 Google Play 商店或应用程序商店 -> 一旦您安装了应用程序并来到应用程序您将获得在推荐链接中映射的推荐代码。

场景 2:当您已在手机中安装应用并点击推荐链接 - 应用将打开,您将收到映射在推荐链接中的推荐代码。

我找到的最简单的解决方案也是成功实施的。

【讨论】:

    【解决方案4】:

    我还必须在我的应用中建立推荐奖励计划。

    我遇到了这个使用分支 I/O 的教程,它运行良好。 Flutter Deep Linking Using Branch I/O

    GitHub 上还有一个工作项目,由本教程的作者发布。 here

    但分支 I/O 仅在 10,000 monthly active users. 之前是免费的

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多