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

问题描述

我尝试在我的应用程序中添加动态链接。首先,我将 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)
            ]
        ),
      ),



    );
  }
}

标签: flutterfirebase-dynamic-links

解决方案


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


推荐阅读