Java dkh、uid和af_v参数的使用

Java dkh、uid和af_v参数的使用,java,android,Java,Android,所以我参加了一次采访,他们让我弄清楚这些参数dkh、uid和af_v是如何在给定的代码段中生成的。代码段是从apk文件反编译的。 我应该在其中搜索dkh的片段是:- 对于af_v来说:- 在互联网上进行了长时间的研究之后,我知道这些参数和这些片段所属的.java文件是AppsFlyerSDK的一部分,并与应用程序集成,以跟踪下载应用程序和其他移动广告跟踪活动的用户数量。 我也知道hashmap.put方法的用途,但不知道它在代码中的确切用法。 所以我的问题是这三个参数是如何生成的,以及它们的用途

所以我参加了一次采访,他们让我弄清楚这些参数dkh、uid和af_v是如何在给定的代码段中生成的。代码段是从apk文件反编译的。 我应该在其中搜索dkh的片段是:-

对于af_v来说:-

在互联网上进行了长时间的研究之后,我知道这些参数和这些片段所属的.java文件是AppsFlyerSDK的一部分,并与应用程序集成,以跟踪下载应用程序和其他移动广告跟踪活动的用户数量。 我也知道hashmap.put方法的用途,但不知道它在代码中的确切用法。 所以我的问题是这三个参数是如何生成的,以及它们的用途?

dkh:

我们可以从下面的代码片段中看到,
dkh
只是AppsFlyer键的前8个字符

obj = com.appsflyer.f.a().b("AppsFlyerKey");
// [...]
if (((String) (obj)).length() > 8)
{
    hashmap.put("dkh", ((String) (obj)).substring(0, 8));
}
至于它是如何使用的——在你发布的代码中,它不是。考虑到您发布的代码是从创建一个用URL初始化的
StringBuilder
开始的,因此很有可能猜测正在构建的hashamp也与该URL相关

处理API调用时,hashmap最常用的用法是作为HTTP参数(例如,通过GET或POST)。因此,我的假设是,所有这些hashmap条目都只是发送到AppsFlyer API的参数。有些用于提供有关用户设备的信息,有些(如
dkh
)可能被AppsFlyer用于将设备信息与您的帐户关联

uid

代码片段没有提供足够的信息来收集有关如何生成
uid
的任何有意义的信息。我们真正知道的是,它不是空的,它来自AppsFlyer SDK中基于以下代码段的其他函数:

s = com.appsflyer.k.a(context);
// [null check]
hashmap.put("uid", s);
考虑到上面的
dkh
上下文以及程序员普遍认为“uid”代表“用户ID”,我假设这是一个用户标识符,它也将被发送到API

af_v

我认为对代码段应用一些格式将有助于:

obj = (String)((Map) (obj2)).get("appsflyerKey");
String s1 = (String)((Map) (obj2)).get("af_timestamp");
obj2 = (String)((Map) (obj2)).get("uid");
obj = com.appsflyer.j.a(
    new StringBuilder()
        .append(((String) (obj)).substring(0, 7))
        .append(((String) (obj2)).substring(0, 7))
        .append(s1.substring(s1.length() - 7))
   .toString()
);
a.put("af_v", obj);
从顶部开始,我们知道,
obj
再次是我们的AppsFlyer键
s1
是某种时间戳
obj2
是我们上面的uid。 我们最后放入
af_v
的字符串由以下三部分组成:

  • AppsFlyer键的前7个字符(
    obj1
  • uid的前7个字符(
    obj2
  • 时间戳的最后7个字符

同样,这些可能都只是发送到API,真正的用途只有AppsFlyer团队的人知道。它可能是一个特定请求的标识符——它基于特定的用户、时间戳和API密钥这一事实意味着它对于每个请求可能是相当唯一的,并且将它们(仅部分)压缩到一个字符串中可能对任何人来说都不是特别有用的数据。

谢谢!这对我帮助很大。
obj = com.appsflyer.f.a().b("AppsFlyerKey");
// [...]
if (((String) (obj)).length() > 8)
{
    hashmap.put("dkh", ((String) (obj)).substring(0, 8));
}
s = com.appsflyer.k.a(context);
// [null check]
hashmap.put("uid", s);
obj = (String)((Map) (obj2)).get("appsflyerKey");
String s1 = (String)((Map) (obj2)).get("af_timestamp");
obj2 = (String)((Map) (obj2)).get("uid");
obj = com.appsflyer.j.a(
    new StringBuilder()
        .append(((String) (obj)).substring(0, 7))
        .append(((String) (obj2)).substring(0, 7))
        .append(s1.substring(s1.length() - 7))
   .toString()
);
a.put("af_v", obj);