如何检测用户是否使用 Firebase 动态链接安装了应用?



我正在使用Firebase动态链接来获取参考和收入。通常,用户(例如Receiver(可以通过两种方式下载应用程序:

  • 从Play商店安装应用程序(自然下载(。

  • 使用动态链接安装应用程序。

现在,我怎么知道该应用程序是否使用其他用户(例如Sender(与他共享的动态链接安装在Receiver的手机中。


这是用于打开侦听应用的代码,它适用于上述两种方案。我无法检测该应用程序是否是使用动态链接安装的。

void _listeningAppOpen() async {
PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
Uri deepLink = data?.link;
if (deepLink != null) {
// app opened by dynamic link
}
FirebaseDynamicLinks.instance.onLink(onSuccess: (PendingDynamicLinkData dynamicLink) async {
Uri deepLink = dynamicLink?.link;
if (deepLink != null) {
// app was already opened (in background) and user clicked on dynamic link, we are here now
}
});
}

尝试使用 PendingDynamicLinkData 中的点击时间戳。

boolean isAppInstalledViaDynamicLink(
Context context,
PendingDynamicLinkData pendingDynamicLinkData
) {
long clickTmestamp = pendingDynamicLinkData.getClickTimestamp();
long appInstallTimestamp = getAppInstallTimestamp(context);
return clickTmestamp < appInstallTimestamp;
}
private long getAppInstallTimestamp(Context context) {
PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
return pi.firstInstallTime;
}

当您从 Firebase 控制台创建动态链接时,系统会询问您是否没有要重定向的应用。有两种选择,一种是PlayStore,第二种是网站。在您的情况下,只需选择PlayStore,Firebase将自动处理应用程序是否由用户安装。如果没有,那么它会将其重定向到您在Playstore上的应用程序。

当发件人单击其设备上的共享推荐链接时,将发送一个动态链接,其中包含唯一的 senderId 作为链接中的参数。该链接将如下所示: https://yourApp.page.link/?link=https://yourDomain.com/referral?senderId=uniqueSenderId "uniqueSenderId"将用于区分应用程序是首次安装还是再次安装。

为了让我们知道该应用程序是否已安装在接收者的设备上:发送方的链接将包含一个参数"senderId",每个发送方都有一个唯一的字符串。当接收方打开该链接时,我们可以通过调用以下命令获取发送方的唯一ID:

final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
if(deepLink != null){
String senderId = deepLink.queryParameters['senderId']
//Store senderId in Database.
}
else{
//App is downloaded from playstore. Remember here, in first line above 
//getInitialLink() is only called when app is opened through a dynamicLink
}

如果deepLink为空,则应用程序直接从PlayStore下载,否则从任何人的链接下载。尽管如上评论中所述,getInitialLink(( 仅在通过动态链接打开应用程序时才被调用。因此,如果未调用,则从PlayStore下载应用程序。获得 senderId 后,我们可以检查接收者是否已经在他的数据库中存储了一个推荐 ID。如果是,那么我们取消新收到的动态链接,如果推荐ID为空,我们可以在其中存储发件人的ID。因此,我们知道该应用程序是新安装或重新安装。

最新更新