每次用户使用来自 firebase 的动态链接的应用程序安装我的应用程序时,我如何检测和奖励?

Posted

技术标签:

【中文标题】每次用户使用来自 firebase 的动态链接的应用程序安装我的应用程序时,我如何检测和奖励?【英文标题】:How can I detect and reward each time an user install my app with my app from dynamics link from firebase? 【发布时间】:2021-02-18 10:18:23 【问题描述】:

我尝试在我的应用中添加动态链接。首先,我将 firebase 动态链接包添加到我的应用中,并进行了所有 firebase 配置。

我的最终目标是给分享链接的用户一个礼物,每次安装都用他的分享链接完成一个硬币

这是我当前的实现,它为点击链接的用户送礼,但不(我认为)为共享链接的用户送礼。

class parrainage extends StatefulWidget 
  @override
  _parrainageState createState() => _parrainageState();


class _parrainageState extends State<parrainage> 
  int referral_gift=0;

  String _linkMessage;
  bool _isCreatingLink = false;
  String _testString =
      "Fais un appuis long sur le lien pour le copier";
  @override
  void initState() 
    super.initState();
    initDynamicLinks();

  

  void initDynamicLinks() async 
    SharedPreferences prefs = await SharedPreferences.getInstance();

    referral_gift = prefs.getInt('referral_gift')??0;

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

          if (deepLink != null) 
            Navigator.pushNamed(context, deepLink.path);
            referral_gift=referral_gift+1;
            prefs.setInt('referral_gift', referral_gift); 

          
        , onError: (OnLinkErrorException e) async 
      print('onLinkError');
      print(e.message);
    );

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

    if (deepLink != null) 
      Navigator.pushNamed(context, deepLink.path);
      referral_gift=referral_gift+1;
      prefs.setInt('referral_gift', referral_gift); 
    
  

  Future<void> _createDynamicLink(bool short) async 
    setState(() 
      _isCreatingLink = true;
    );

    final DynamicLinkParameters parameters = DynamicLinkParameters(
      uriPrefix: 'https://XXXXX.page.link/XXXX',
      link: Uri.parse('https://XXXXXXXX.page.link/'),
      androidParameters: AndroidParameters(
        packageName: 'XXXXXXXXXXXXX',
        minimumVersion: 0,
      ),
      dynamicLinkParametersOptions: DynamicLinkParametersOptions(
        shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short,
      ),
      iosParameters: IosParameters(
        bundleId: 'XXXXXXXXXXXXX',
        minimumVersion: '0',
      ),
      socialMetaTagParameters:  SocialMetaTagParameters(
        title: 'XXXXXXX',
        description: 'Débloque une fonction premium',
      ),
    );

    Uri url;
    if (short) 
      final ShortDynamicLink shortLink = await parameters.buildShortLink();
      url = shortLink.shortUrl;
     else 
      url = await parameters.buildUrl();
    

    setState(() 
      _linkMessage = url.toString();
      _isCreatingLink = false;
    );
  


  @override
  Widget build(BuildContext context) 
    return AlertDialog(
      shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(20.0))),
      title:    Text(("Parrainage"),textAlign: TextAlign.center, style: TextStyle(color: Colors.black, fontWeight: FontWeight.w600, fontSize: SizeConfig.safeBlockHorizontal * 7.0)),
      content:

      Padding(
        padding: const EdgeInsets.all(16),
        child:
        new Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              new  Text("XXXXXX",textAlign: TextAlign.center,  style: TextStyle(color: Colors.black, fontWeight: FontWeight.w400, fontSize: SizeConfig.safeBlockHorizontal * 4)),

              new  Text("$referral_gift",textAlign: TextAlign.center,  style: TextStyle(color: Colors.black, fontWeight: FontWeight.w800, fontSize: SizeConfig.safeBlockHorizontal * 5)),

              new RaisedButton(
                shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
                elevation: 5,
                highlightElevation: 10,
                color:Color(0xffff9a7b),
                splashColor: Color(0xffff9a7b),
                child :  Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                  
                    new  Text("Créer un lien",textAlign: TextAlign.center,  style: TextStyle(color: Colors.white, fontWeight: FontWeight.w800, fontSize: SizeConfig.safeBlockHorizontal * 5)),
                    new Container (
                      padding: const EdgeInsets.only(left:0),
                      child:  new Icon(
                        Icons.arrow_forward_ios,
                        color: Colors.white,
                        size: 20.0,

                      ),),
                  ],
                ),


                padding: const EdgeInsets.all (15.0),
                onPressed:
                  !_isCreatingLink
                      ? () => _createDynamicLink(false)
                      : null,
  ),
              InkWell(
                child: Text(
                  _linkMessage ?? '',
                  style: const TextStyle(color: Colors.blue),
                ),
                onTap: () async 
                  if (_linkMessage != null) 
                    await launch(_linkMessage);
                  
                ,
                onLongPress: () 
                  Clipboard.setData(ClipboardData(text: _linkMessage));
                  Scaffold.of(context).showSnackBar(
                    const SnackBar(content: Text("Lien copié, plus qu'à le partager")),
                  );
                ,
              ),
              Text(_linkMessage == null ? '' : _testString)
            ]
        ),
      ),



    );
  

【问题讨论】:

【参考方案1】:

我建议您在应用程序中添加 firebase 身份验证,并且您可以不在本地管理服务器上的点,因为您使用的是共享首选项,它只会存储数据,直到应用程序安装并不总是如此。应用程序卸载后,用户获得的所有积分将被删除或等于0。

【讨论】:

我有一个电子邮件数据恢复功能,如果用户更换手机或重新安装应用程序,它允许恢复数据。我没有知识和时间来迁移 firebase 上的所有数据。但我的问题是:当有人安装我的应用程序感谢他的动态链接时,分享动态链接的用户如何赢得他的礼物?有可能吗?

以上是关于每次用户使用来自 firebase 的动态链接的应用程序安装我的应用程序时,我如何检测和奖励?的主要内容,如果未能解决你的问题,请参考以下文章

来自 firebase 动态链接的 URL 检测返回 nil iOS

我应该如何配置我的应用以跨类保留 Firebase 用户数据?

使用动态链接接受邀请

如何在 Firebase Android 中获取用户点击的动态短链接?

对使用自定义子域设置 Firebase 动态链接所需的 A 记录的担忧

如何区分 Firebase 动态链接的启动和安装?