pref: OAID
This commit is contained in:
parent
d0c3017b67
commit
9a59e2bac4
|
|
@ -19,7 +19,6 @@ import androidx.annotation.RequiresApi
|
|||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import com.github.gzuliyujiang.oaid.DeviceID
|
||||
import com.github.gzuliyujiang.oaid.IGetter
|
||||
import com.github.panpf.sketch.Sketch
|
||||
import com.github.panpf.sketch.SketchFactory
|
||||
import com.github.panpf.sketch.decode.GifAnimatedDrawableDecoder
|
||||
|
|
@ -30,6 +29,7 @@ import com.github.panpf.sketch.http.OkHttpStack
|
|||
import com.github.panpf.sketch.request.PauseLoadWhenScrollingDrawableDecodeInterceptor
|
||||
import com.huanchengfly.tieba.post.activities.BaseActivity
|
||||
import com.huanchengfly.tieba.post.components.ClipBoardLinkDetector
|
||||
import com.huanchengfly.tieba.post.components.OAIDGetter
|
||||
import com.huanchengfly.tieba.post.components.dialogs.LoadingDialog
|
||||
import com.huanchengfly.tieba.post.plugins.PluginManager
|
||||
import com.huanchengfly.tieba.post.plugins.interfaces.IApp
|
||||
|
|
@ -48,7 +48,6 @@ import com.huanchengfly.tieba.post.utils.TiebaUtil
|
|||
import com.huanchengfly.tieba.post.utils.Util
|
||||
import com.huanchengfly.tieba.post.utils.appPreferences
|
||||
import com.huanchengfly.tieba.post.utils.applicationMetaData
|
||||
import com.huanchengfly.tieba.post.utils.helios.Base32
|
||||
import com.huanchengfly.tieba.post.utils.launchUrl
|
||||
import com.microsoft.appcenter.AppCenter
|
||||
import com.microsoft.appcenter.analytics.Analytics
|
||||
|
|
@ -66,17 +65,9 @@ import org.litepal.LitePal
|
|||
|
||||
|
||||
@HiltAndroidApp
|
||||
class App : Application(), IApp, IGetter, SketchFactory {
|
||||
class App : Application(), IApp, SketchFactory {
|
||||
private val mActivityList: MutableList<Activity> = mutableListOf()
|
||||
|
||||
override fun onOAIDGetComplete(result: String) {
|
||||
oaid = Base32.encode(result.encodeToByteArray())
|
||||
}
|
||||
|
||||
override fun onOAIDGetError(error: Exception) {
|
||||
oaid = ""
|
||||
}
|
||||
|
||||
@RequiresApi(api = 28)
|
||||
private fun setWebViewPath(context: Context) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
|
|
@ -129,7 +120,7 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
|||
super.onCreate()
|
||||
LitePal.initialize(this)
|
||||
AccountUtil.init(this)
|
||||
DeviceID.getOAID(this, this)
|
||||
Config.init(this)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
setWebViewPath(this)
|
||||
}
|
||||
|
|
@ -146,6 +137,7 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
|||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
||||
ThemeUtils.init(ThemeDelegate)
|
||||
registerActivityLifecycleCallbacks(ClipBoardLinkDetector)
|
||||
registerActivityLifecycleCallbacks(OAIDGetter)
|
||||
PluginManager.init(this)
|
||||
CoroutineScope(Dispatchers.IO).apply {
|
||||
launch {
|
||||
|
|
@ -206,6 +198,29 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
|||
}
|
||||
}
|
||||
|
||||
object Config {
|
||||
var inited: Boolean = false
|
||||
|
||||
var isOAIDSupported: Boolean = false
|
||||
var statusCode: Int = -200
|
||||
var oaid: String = ""
|
||||
var encodedOAID: String = ""
|
||||
var isTrackLimited: Boolean = false
|
||||
|
||||
fun init(context: Context) {
|
||||
if (!inited) {
|
||||
isOAIDSupported = DeviceID.supportedOAID(context)
|
||||
if (isOAIDSupported) {
|
||||
DeviceID.getOAID(context, OAIDGetter)
|
||||
} else {
|
||||
statusCode = -200
|
||||
isTrackLimited = false
|
||||
}
|
||||
inited = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object ScreenInfo {
|
||||
@JvmField
|
||||
var EXACT_SCREEN_HEIGHT = 0
|
||||
|
|
@ -253,7 +268,7 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
|||
}
|
||||
|
||||
companion object {
|
||||
val TAG = App::class.java.simpleName
|
||||
const val TAG = "App"
|
||||
|
||||
@JvmStatic
|
||||
var translucentBackground: Drawable? = null
|
||||
|
|
@ -265,9 +280,6 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
|||
lateinit var INSTANCE: App
|
||||
private set
|
||||
|
||||
@JvmStatic
|
||||
var oaid: String = ""
|
||||
|
||||
val isSystemNight: Boolean
|
||||
get() = nightMode == Configuration.UI_MODE_NIGHT_YES
|
||||
|
||||
|
|
@ -616,7 +628,7 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
|||
R.attr.colorOnAccent
|
||||
)
|
||||
|
||||
R.color.default_color_chip -> return return getColorByAttr(
|
||||
R.color.default_color_chip -> return getColorByAttr(
|
||||
context,
|
||||
R.attr.colorChip
|
||||
)
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ fun buildCommonRequest(
|
|||
lego_lib_version = "3.0.0",
|
||||
model = Build.MODEL,
|
||||
net_type = "1",
|
||||
oaid = OAID(App.oaid).toJson(),
|
||||
oaid = OAID().toJson(),
|
||||
pversion = "1.0.3",
|
||||
sample_id = ClientUtils.sampleId,
|
||||
stoken = AccountUtil.getSToken(),
|
||||
|
|
|
|||
|
|
@ -1,15 +1,14 @@
|
|||
package com.huanchengfly.tieba.post.api.models
|
||||
|
||||
import com.github.gzuliyujiang.oaid.DeviceID
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.huanchengfly.tieba.post.App
|
||||
|
||||
data class OAID(
|
||||
@SerializedName("v")
|
||||
val encodedOAID: String,
|
||||
val encodedOAID: String = App.Config.encodedOAID,
|
||||
@SerializedName("sc")
|
||||
val statusCode: Int = 0,
|
||||
val statusCode: Int = App.Config.statusCode,
|
||||
@SerializedName("sup")
|
||||
val support: Int = if (DeviceID.supportedOAID(App.INSTANCE)) 1 else 0,
|
||||
val tl: Int = 0
|
||||
val support: Int = if (App.Config.isOAIDSupported) 1 else 0,
|
||||
val isTrackLimited: Int = if (App.Config.isTrackLimited) 1 else 0
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.huanchengfly.tieba.post.api.retrofit
|
|||
|
||||
import android.os.Build
|
||||
import com.huanchengfly.tieba.post.App
|
||||
import com.huanchengfly.tieba.post.api.ClientVersion
|
||||
import com.huanchengfly.tieba.post.api.Header
|
||||
import com.huanchengfly.tieba.post.api.Param
|
||||
import com.huanchengfly.tieba.post.api.models.OAID
|
||||
|
|
@ -140,7 +141,7 @@ object RetrofitTiebaApi {
|
|||
Param.FROM to { "tieba" },
|
||||
Param.CLIENT_VERSION to { "12.25.1.0" },
|
||||
Param.CUID_GALAXY3 to { UIDUtil.getAid() },
|
||||
Param.OAID to { OAID(App.oaid).toJson() },
|
||||
Param.OAID to { OAID().toJson() },
|
||||
),
|
||||
stParamInterceptor,
|
||||
)
|
||||
|
|
@ -158,17 +159,45 @@ object RetrofitTiebaApi {
|
|||
Header.CUID_GALAXY2 to { CuidUtils.getNewCuid() },
|
||||
Header.CUID_GID to { "" },
|
||||
Header.CUID_GALAXY3 to { UIDUtil.getAid() },
|
||||
Header.USER_AGENT to { "bdtb for Android 11.10.8.6" },
|
||||
Header.USER_AGENT to { "bdtb for Android ${ClientVersion.TIEBA_V11.version}" },
|
||||
Header.X_BD_DATA_TYPE to { "protobuf" },
|
||||
),
|
||||
defaultCommonParamInterceptor + CommonParamInterceptor(
|
||||
defaultCommonParamInterceptor - Param.OS_VERSION + CommonParamInterceptor(
|
||||
Param.CUID to { CuidUtils.getNewCuid() },
|
||||
Param.CUID_GALAXY2 to { CuidUtils.getNewCuid() },
|
||||
Param.CUID_GID to { "" },
|
||||
Param.FROM to { "1024324o" },
|
||||
Param.CLIENT_VERSION to { "11.10.8.6" },
|
||||
Param.FROM to { "tieba" },
|
||||
Param.CLIENT_VERSION to { ClientVersion.TIEBA_V11.version },
|
||||
Param.CUID_GALAXY3 to { UIDUtil.getAid() },
|
||||
Param.OAID to { OAID(App.oaid).toJson() },
|
||||
Param.OAID to { OAID().toJson() },
|
||||
),
|
||||
stParamInterceptor,
|
||||
)
|
||||
}
|
||||
|
||||
val OFFICIAL_PROTOBUF_TIEBA_V12_API: OfficialProtobufTiebaApi by lazy {
|
||||
createProtobufApi<OfficialProtobufTiebaApi>(
|
||||
"http://c.tieba.baidu.com/",
|
||||
CommonHeaderInterceptor(
|
||||
Header.CHARSET to { "UTF-8" },
|
||||
Header.CLIENT_TYPE to { "2" },
|
||||
Header.CLIENT_USER_TOKEN to { AccountUtil.getUid() },
|
||||
Header.COOKIE to { "CUID=${CuidUtils.getNewCuid()};ka=open;TBBRAND=${Build.MODEL};" },
|
||||
Header.CUID to { CuidUtils.getNewCuid() },
|
||||
Header.CUID_GALAXY2 to { CuidUtils.getNewCuid() },
|
||||
Header.CUID_GID to { "" },
|
||||
Header.CUID_GALAXY3 to { UIDUtil.getAid() },
|
||||
Header.USER_AGENT to { "bdtb for Android ${ClientVersion.TIEBA_V12.version}" },
|
||||
Header.X_BD_DATA_TYPE to { "protobuf" },
|
||||
),
|
||||
defaultCommonParamInterceptor - Param.OS_VERSION + CommonParamInterceptor(
|
||||
Param.CUID to { CuidUtils.getNewCuid() },
|
||||
Param.CUID_GALAXY2 to { CuidUtils.getNewCuid() },
|
||||
Param.CUID_GID to { "" },
|
||||
Param.FROM to { "tieba" },
|
||||
Param.CLIENT_VERSION to { ClientVersion.TIEBA_V12.version },
|
||||
Param.CUID_GALAXY3 to { UIDUtil.getAid() },
|
||||
Param.OAID to { UIDUtil.getOAID() },
|
||||
),
|
||||
stParamInterceptor,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,10 @@ class CommonParamInterceptor(private val additionParams: List<ParamExpression>)
|
|||
return CommonParamInterceptor(additionParams + interceptor.additionParams)
|
||||
}
|
||||
|
||||
operator fun minus(name: String): CommonParamInterceptor {
|
||||
return CommonParamInterceptor(additionParams.filter { it.first != name })
|
||||
}
|
||||
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request()
|
||||
var headers = request.headers
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
package com.huanchengfly.tieba.post.components
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.Application
|
||||
import android.os.Bundle
|
||||
import com.github.gzuliyujiang.oaid.DeviceID
|
||||
import com.github.gzuliyujiang.oaid.IGetter
|
||||
import com.huanchengfly.tieba.post.App
|
||||
import com.huanchengfly.tieba.post.utils.helios.Base32
|
||||
|
||||
object OAIDGetter : Application.ActivityLifecycleCallbacks, IGetter {
|
||||
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
|
||||
|
||||
override fun onActivityStarted(activity: Activity) {}
|
||||
|
||||
override fun onActivityResumed(activity: Activity) {
|
||||
if (!App.Config.inited) {
|
||||
App.Config.isOAIDSupported = DeviceID.supportedOAID(activity)
|
||||
if (App.Config.isOAIDSupported) {
|
||||
DeviceID.getOAID(activity, this)
|
||||
} else {
|
||||
App.Config.inited = true
|
||||
App.Config.statusCode = -200
|
||||
App.Config.isTrackLimited = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityPaused(activity: Activity) {}
|
||||
|
||||
override fun onActivityStopped(activity: Activity) {}
|
||||
|
||||
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
|
||||
|
||||
override fun onActivityDestroyed(activity: Activity) {}
|
||||
|
||||
override fun onOAIDGetComplete(result: String) {
|
||||
App.Config.inited = true
|
||||
App.Config.oaid = result
|
||||
App.Config.encodedOAID = Base32.encode(result.encodeToByteArray())
|
||||
App.Config.statusCode = 0
|
||||
App.Config.isTrackLimited = false
|
||||
}
|
||||
|
||||
override fun onOAIDGetError(error: Exception?) {
|
||||
App.Config.inited = true
|
||||
App.Config.statusCode = -100
|
||||
App.Config.isTrackLimited = true
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import android.annotation.SuppressLint
|
|||
import android.os.Build
|
||||
import android.provider.Settings
|
||||
import android.text.TextUtils
|
||||
import com.huanchengfly.tieba.post.App
|
||||
import com.huanchengfly.tieba.post.App.Companion.INSTANCE
|
||||
import com.huanchengfly.tieba.post.toMD5
|
||||
import com.huanchengfly.tieba.post.utils.helios.Base32
|
||||
|
|
@ -24,6 +25,13 @@ object UIDUtil {
|
|||
return androidId ?: defaultValue
|
||||
}
|
||||
|
||||
fun getOAID(): String {
|
||||
if (App.Config.encodedOAID.isBlank()) return ""
|
||||
val raw = "A10-${App.Config.encodedOAID}-"
|
||||
val sign = Base32.encode(Hasher.hash(raw.toByteArray()))
|
||||
return "$raw$sign"
|
||||
}
|
||||
|
||||
fun getAid(): String {
|
||||
val raw = "com.helios" + getAndroidId("000000000") + uUID
|
||||
val bytes = getSHA1(raw)
|
||||
|
|
|
|||
Loading…
Reference in New Issue