client-sdk-mobile
client-sdk-mobile copied to clipboard
反复切换用户和下发的数据,报错reason:"xxx not fonund"
在上报用户数据的情况下,反复切换用户和下发的数据,偶现报错,拿到的valueDetail 中的reason:"xxx not fonund"。
具体步骤如下: 获取的参数为Boolean,假设默认参数已设置生效,可选数值可选有:true和false。App获取改参数只会在启动的时候获取一次。
1.用户未登录的情况下,点击进入App,获取Fp数据,此时实例化的FeatureProbe中的user为User(),因未登录未传任何参数,获取参数正常,为true。 2.点击App登录后,重新实例化FeatureProbe,其中的的user传递了用户id,手机号,性别。 3.切换下发的数据为false,杀死应用。 4.点击App重新进入App,获取参数为false,正常,此时用户为登录状态。 5.切换下发的数据为true,杀死应用。 6.点击App重新进入App,获取参数报错'xxx not found"。
次报错是偶现,属于容易出现。
代码如下: `object FeatureProbeUtil { private const val REMOTE_URL = "https://xxx/server" private var featureProbe = getFpInstance()
private fun getFpInstance() = FpUrlBuilder(REMOTE_URL).build()?.let {
val key = App.instance.packageManager.getApplicationInfo(
App.instance.packageName,
PackageManager.GET_META_DATA,
).metaData.getString("FEATURE_PROBE_KEY") ?: ""
FeatureProbe(FpConfig(it, key, 1800u, 0u), generalUser())
}
// 用户切换登录状态后,会调用改方法,以更新上报的用户信息
fun updateFeatureProbe(): FeatureProbe? {
featureProbe = getFpInstance()
return featureProbe
}
fun getModeState(updateFp: Boolean = false) {
App.instance.threadPool.execute {
val fp = featureProbe?.takeIf { !updateFp } ?: updateFeatureProbe() ?: return@execute
val testMode = fp.boolDetail("test_Mode", false)
}
}
// 次方法调用后偶现报错
private fun generalUser() = FpUser().apply {
UserService.user?.takeIf { UserService.isLogin }?.let {
with("id", "${it.id}")
with("nick", it.nick ?: "")
with("phone", it.phone ?: "")
}
}
}`