Skip to content

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

@victorfan336

Description

@victorfan336

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

}`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions