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.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
import com.github.gzuliyujiang.oaid.DeviceID
|
import com.github.gzuliyujiang.oaid.DeviceID
|
||||||
import com.github.gzuliyujiang.oaid.IGetter
|
|
||||||
import com.github.panpf.sketch.Sketch
|
import com.github.panpf.sketch.Sketch
|
||||||
import com.github.panpf.sketch.SketchFactory
|
import com.github.panpf.sketch.SketchFactory
|
||||||
import com.github.panpf.sketch.decode.GifAnimatedDrawableDecoder
|
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.github.panpf.sketch.request.PauseLoadWhenScrollingDrawableDecodeInterceptor
|
||||||
import com.huanchengfly.tieba.post.activities.BaseActivity
|
import com.huanchengfly.tieba.post.activities.BaseActivity
|
||||||
import com.huanchengfly.tieba.post.components.ClipBoardLinkDetector
|
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.components.dialogs.LoadingDialog
|
||||||
import com.huanchengfly.tieba.post.plugins.PluginManager
|
import com.huanchengfly.tieba.post.plugins.PluginManager
|
||||||
import com.huanchengfly.tieba.post.plugins.interfaces.IApp
|
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.Util
|
||||||
import com.huanchengfly.tieba.post.utils.appPreferences
|
import com.huanchengfly.tieba.post.utils.appPreferences
|
||||||
import com.huanchengfly.tieba.post.utils.applicationMetaData
|
import com.huanchengfly.tieba.post.utils.applicationMetaData
|
||||||
import com.huanchengfly.tieba.post.utils.helios.Base32
|
|
||||||
import com.huanchengfly.tieba.post.utils.launchUrl
|
import com.huanchengfly.tieba.post.utils.launchUrl
|
||||||
import com.microsoft.appcenter.AppCenter
|
import com.microsoft.appcenter.AppCenter
|
||||||
import com.microsoft.appcenter.analytics.Analytics
|
import com.microsoft.appcenter.analytics.Analytics
|
||||||
|
|
@ -66,17 +65,9 @@ import org.litepal.LitePal
|
||||||
|
|
||||||
|
|
||||||
@HiltAndroidApp
|
@HiltAndroidApp
|
||||||
class App : Application(), IApp, IGetter, SketchFactory {
|
class App : Application(), IApp, SketchFactory {
|
||||||
private val mActivityList: MutableList<Activity> = mutableListOf()
|
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)
|
@RequiresApi(api = 28)
|
||||||
private fun setWebViewPath(context: Context) {
|
private fun setWebViewPath(context: Context) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
|
|
@ -129,7 +120,7 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
LitePal.initialize(this)
|
LitePal.initialize(this)
|
||||||
AccountUtil.init(this)
|
AccountUtil.init(this)
|
||||||
DeviceID.getOAID(this, this)
|
Config.init(this)
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
setWebViewPath(this)
|
setWebViewPath(this)
|
||||||
}
|
}
|
||||||
|
|
@ -146,6 +137,7 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
||||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
||||||
ThemeUtils.init(ThemeDelegate)
|
ThemeUtils.init(ThemeDelegate)
|
||||||
registerActivityLifecycleCallbacks(ClipBoardLinkDetector)
|
registerActivityLifecycleCallbacks(ClipBoardLinkDetector)
|
||||||
|
registerActivityLifecycleCallbacks(OAIDGetter)
|
||||||
PluginManager.init(this)
|
PluginManager.init(this)
|
||||||
CoroutineScope(Dispatchers.IO).apply {
|
CoroutineScope(Dispatchers.IO).apply {
|
||||||
launch {
|
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 {
|
object ScreenInfo {
|
||||||
@JvmField
|
@JvmField
|
||||||
var EXACT_SCREEN_HEIGHT = 0
|
var EXACT_SCREEN_HEIGHT = 0
|
||||||
|
|
@ -253,7 +268,7 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val TAG = App::class.java.simpleName
|
const val TAG = "App"
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
var translucentBackground: Drawable? = null
|
var translucentBackground: Drawable? = null
|
||||||
|
|
@ -265,9 +280,6 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
||||||
lateinit var INSTANCE: App
|
lateinit var INSTANCE: App
|
||||||
private set
|
private set
|
||||||
|
|
||||||
@JvmStatic
|
|
||||||
var oaid: String = ""
|
|
||||||
|
|
||||||
val isSystemNight: Boolean
|
val isSystemNight: Boolean
|
||||||
get() = nightMode == Configuration.UI_MODE_NIGHT_YES
|
get() = nightMode == Configuration.UI_MODE_NIGHT_YES
|
||||||
|
|
||||||
|
|
@ -616,7 +628,7 @@ class App : Application(), IApp, IGetter, SketchFactory {
|
||||||
R.attr.colorOnAccent
|
R.attr.colorOnAccent
|
||||||
)
|
)
|
||||||
|
|
||||||
R.color.default_color_chip -> return return getColorByAttr(
|
R.color.default_color_chip -> return getColorByAttr(
|
||||||
context,
|
context,
|
||||||
R.attr.colorChip
|
R.attr.colorChip
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ fun buildCommonRequest(
|
||||||
lego_lib_version = "3.0.0",
|
lego_lib_version = "3.0.0",
|
||||||
model = Build.MODEL,
|
model = Build.MODEL,
|
||||||
net_type = "1",
|
net_type = "1",
|
||||||
oaid = OAID(App.oaid).toJson(),
|
oaid = OAID().toJson(),
|
||||||
pversion = "1.0.3",
|
pversion = "1.0.3",
|
||||||
sample_id = ClientUtils.sampleId,
|
sample_id = ClientUtils.sampleId,
|
||||||
stoken = AccountUtil.getSToken(),
|
stoken = AccountUtil.getSToken(),
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,14 @@
|
||||||
package com.huanchengfly.tieba.post.api.models
|
package com.huanchengfly.tieba.post.api.models
|
||||||
|
|
||||||
import com.github.gzuliyujiang.oaid.DeviceID
|
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
import com.huanchengfly.tieba.post.App
|
import com.huanchengfly.tieba.post.App
|
||||||
|
|
||||||
data class OAID(
|
data class OAID(
|
||||||
@SerializedName("v")
|
@SerializedName("v")
|
||||||
val encodedOAID: String,
|
val encodedOAID: String = App.Config.encodedOAID,
|
||||||
@SerializedName("sc")
|
@SerializedName("sc")
|
||||||
val statusCode: Int = 0,
|
val statusCode: Int = App.Config.statusCode,
|
||||||
@SerializedName("sup")
|
@SerializedName("sup")
|
||||||
val support: Int = if (DeviceID.supportedOAID(App.INSTANCE)) 1 else 0,
|
val support: Int = if (App.Config.isOAIDSupported) 1 else 0,
|
||||||
val tl: Int = 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 android.os.Build
|
||||||
import com.huanchengfly.tieba.post.App
|
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.Header
|
||||||
import com.huanchengfly.tieba.post.api.Param
|
import com.huanchengfly.tieba.post.api.Param
|
||||||
import com.huanchengfly.tieba.post.api.models.OAID
|
import com.huanchengfly.tieba.post.api.models.OAID
|
||||||
|
|
@ -140,7 +141,7 @@ object RetrofitTiebaApi {
|
||||||
Param.FROM to { "tieba" },
|
Param.FROM to { "tieba" },
|
||||||
Param.CLIENT_VERSION to { "12.25.1.0" },
|
Param.CLIENT_VERSION to { "12.25.1.0" },
|
||||||
Param.CUID_GALAXY3 to { UIDUtil.getAid() },
|
Param.CUID_GALAXY3 to { UIDUtil.getAid() },
|
||||||
Param.OAID to { OAID(App.oaid).toJson() },
|
Param.OAID to { OAID().toJson() },
|
||||||
),
|
),
|
||||||
stParamInterceptor,
|
stParamInterceptor,
|
||||||
)
|
)
|
||||||
|
|
@ -158,17 +159,45 @@ object RetrofitTiebaApi {
|
||||||
Header.CUID_GALAXY2 to { CuidUtils.getNewCuid() },
|
Header.CUID_GALAXY2 to { CuidUtils.getNewCuid() },
|
||||||
Header.CUID_GID to { "" },
|
Header.CUID_GID to { "" },
|
||||||
Header.CUID_GALAXY3 to { UIDUtil.getAid() },
|
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" },
|
Header.X_BD_DATA_TYPE to { "protobuf" },
|
||||||
),
|
),
|
||||||
defaultCommonParamInterceptor + CommonParamInterceptor(
|
defaultCommonParamInterceptor - Param.OS_VERSION + CommonParamInterceptor(
|
||||||
Param.CUID to { CuidUtils.getNewCuid() },
|
Param.CUID to { CuidUtils.getNewCuid() },
|
||||||
Param.CUID_GALAXY2 to { CuidUtils.getNewCuid() },
|
Param.CUID_GALAXY2 to { CuidUtils.getNewCuid() },
|
||||||
Param.CUID_GID to { "" },
|
Param.CUID_GID to { "" },
|
||||||
Param.FROM to { "1024324o" },
|
Param.FROM to { "tieba" },
|
||||||
Param.CLIENT_VERSION to { "11.10.8.6" },
|
Param.CLIENT_VERSION to { ClientVersion.TIEBA_V11.version },
|
||||||
Param.CUID_GALAXY3 to { UIDUtil.getAid() },
|
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,
|
stParamInterceptor,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,10 @@ class CommonParamInterceptor(private val additionParams: List<ParamExpression>)
|
||||||
return CommonParamInterceptor(additionParams + interceptor.additionParams)
|
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 {
|
override fun intercept(chain: Interceptor.Chain): Response {
|
||||||
val request = chain.request()
|
val request = chain.request()
|
||||||
var headers = request.headers
|
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.os.Build
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
|
import com.huanchengfly.tieba.post.App
|
||||||
import com.huanchengfly.tieba.post.App.Companion.INSTANCE
|
import com.huanchengfly.tieba.post.App.Companion.INSTANCE
|
||||||
import com.huanchengfly.tieba.post.toMD5
|
import com.huanchengfly.tieba.post.toMD5
|
||||||
import com.huanchengfly.tieba.post.utils.helios.Base32
|
import com.huanchengfly.tieba.post.utils.helios.Base32
|
||||||
|
|
@ -24,6 +25,13 @@ object UIDUtil {
|
||||||
return androidId ?: defaultValue
|
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 {
|
fun getAid(): String {
|
||||||
val raw = "com.helios" + getAndroidId("000000000") + uUID
|
val raw = "com.helios" + getAndroidId("000000000") + uUID
|
||||||
val bytes = getSHA1(raw)
|
val bytes = getSHA1(raw)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue