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

ktca8awb  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(103)

我使用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
    }
  });
}
z2acfund

z2acfund1#

尝试使用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;
}
aurhwmvo

aurhwmvo2#

当您从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。因此,我们知道该应用程序是新安装或重新安装。

相关问题