每次用户使用来自 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 中获取用户点击的动态短链接?