FeatureProbe / client-sdk-mobile

FeatureProbe Client Side SDK for Android and iOS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

反复切换用户和下发的数据,报错reason:"xxx not fonund"

victorfan336 opened this issue · comments

在上报用户数据的情况下,反复切换用户和下发的数据,偶现报错,拿到的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 ?: "")
    }
}

}`