From ff4a78ae93af57b1f80f840ec4f512dccfc5bb87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=B4=BB=E8=8D=A3?= Date: Thu, 27 Oct 2022 11:39:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E3=80=90=E5=85=89=E7=8E=AF=E5=8A=A9?= =?UTF-8?q?=E6=89=8BV5.15.0=E3=80=91=E7=99=BB=E5=BD=95=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BC=98=E5=8C=96(20221025=E9=9C=80=E6=B1=82=E8=A1=A5=E5=85=85?= =?UTF-8?q?)=20https://git.shanqu.cc/pm/halo/halo-app-issues/-/issues/2049?= =?UTF-8?q?#note=5F175003?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/LogUtils.java | 27 +------ .../com/gh/common/util/NewFlatLogUtils.kt | 1 + .../gh/gamecenter/common/utils/LogUtils.java | 27 +++++++ .../gamecenter/login/utils/DialogUtils.java | 6 +- .../gamecenter/login/utils/NewFlatLogUtils.kt | 77 +++++++++++++++++++ .../login/utils/QuickLoginHelper.kt | 8 ++ .../gamecenter/login/view/LoginFragment.java | 28 +++++-- .../login/view/QuickLoginHelperActivity.kt | 23 ++++-- 8 files changed, 158 insertions(+), 39 deletions(-) create mode 100644 module_login/src/main/java/com/gh/gamecenter/login/utils/NewFlatLogUtils.kt diff --git a/app/src/main/java/com/gh/common/util/LogUtils.java b/app/src/main/java/com/gh/common/util/LogUtils.java index 0af28b8b58..c8afdd8e7a 100644 --- a/app/src/main/java/com/gh/common/util/LogUtils.java +++ b/app/src/main/java/com/gh/common/util/LogUtils.java @@ -11,6 +11,7 @@ import com.gh.common.exposure.ExposureEvent; import com.gh.common.exposure.ExposureSource; import com.gh.gamecenter.BuildConfig; import com.gh.gamecenter.common.constant.Constants; +import com.gh.gamecenter.common.entity.CommunityEntity; import com.gh.gamecenter.common.entity.ExposureEntity; import com.gh.gamecenter.common.exposure.meta.Meta; import com.gh.gamecenter.common.exposure.meta.MetaUtil; @@ -18,7 +19,6 @@ import com.gh.gamecenter.common.loghub.LoghubUtils; import com.gh.gamecenter.common.loghub.SimpleLogContainerEntity; import com.gh.gamecenter.common.utils.DeviceUtils; import com.gh.gamecenter.core.utils.GsonUtils; -import com.gh.gamecenter.common.entity.CommunityEntity; import com.gh.gamecenter.entity.DetectionObjectEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.PackageDialogEntity; @@ -484,31 +484,6 @@ public class LogUtils { return metaObject; } - public static JSONObject getNewMetaObject() { - Meta meta = MetaUtil.INSTANCE.getMeta(); - JSONObject metaObject = new JSONObject(); - try { - metaObject.put("dia", MetaUtil.getBase64EncodedAndroidId()); - metaObject.put("android_sdk", meta.getAndroid_sdk()); - metaObject.put("android_version", meta.getAndroid_version()); - metaObject.put("app_version", meta.getAppVersion()); - metaObject.put("channel", meta.getChannel()); - metaObject.put("gid", meta.getGid()); - metaObject.put("jnfj", MetaUtil.getBase64EncodedIMEI()); - metaObject.put("mac", meta.getMac()); - metaObject.put("manufacturer", meta.getManufacturer()); - metaObject.put("model", meta.getModel()); - metaObject.put("network", meta.getNetwork()); - metaObject.put("os", meta.getOs()); - metaObject.put("user_id", meta.getUserId()); - metaObject.put("oaid", HaloApp.getInstance().getOAID()); - - } catch (JSONException e) { - e.printStackTrace(); - } - return metaObject; - } - private static void uploadCommunity(JSONObject object) { try { object.put("meta", getMetaObject()); diff --git a/app/src/main/java/com/gh/common/util/NewFlatLogUtils.kt b/app/src/main/java/com/gh/common/util/NewFlatLogUtils.kt index 4cfb0f3db5..48467b61f0 100644 --- a/app/src/main/java/com/gh/common/util/NewFlatLogUtils.kt +++ b/app/src/main/java/com/gh/common/util/NewFlatLogUtils.kt @@ -3,6 +3,7 @@ package com.gh.common.util import com.gh.gamecenter.common.json.JsonObjectBuilder import com.gh.gamecenter.common.json.json import com.gh.gamecenter.common.loghub.LoghubUtils +import com.gh.gamecenter.common.utils.LogUtils import com.lightgame.utils.Utils import org.json.JSONArray import org.json.JSONObject diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/LogUtils.java b/module_common/src/main/java/com/gh/gamecenter/common/utils/LogUtils.java index 354fe1121a..5e01fd51d3 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/utils/LogUtils.java +++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/LogUtils.java @@ -25,6 +25,7 @@ import okhttp3.MediaType; import okhttp3.RequestBody; public class LogUtils { + public static JSONObject getMetaObject() { Meta meta = MetaUtil.INSTANCE.getMeta(); JSONObject metaObject = new JSONObject(); @@ -51,6 +52,32 @@ public class LogUtils { return metaObject; } + public static JSONObject getNewMetaObject() { + Meta meta = MetaUtil.INSTANCE.getMeta(); + JSONObject metaObject = new JSONObject(); + IAppProvider appProvider = (IAppProvider) ARouter.getInstance().build(RouteConsts.provider.app).navigation(); + try { + metaObject.put("dia", MetaUtil.getBase64EncodedAndroidId()); + metaObject.put("android_sdk", meta.getAndroid_sdk()); + metaObject.put("android_version", meta.getAndroid_version()); + metaObject.put("app_version", meta.getAppVersion()); + metaObject.put("channel", meta.getChannel()); + metaObject.put("gid", meta.getGid()); + metaObject.put("jnfj", MetaUtil.getBase64EncodedIMEI()); + metaObject.put("mac", meta.getMac()); + metaObject.put("manufacturer", meta.getManufacturer()); + metaObject.put("model", meta.getModel()); + metaObject.put("network", meta.getNetwork()); + metaObject.put("os", meta.getOs()); + metaObject.put("user_id", meta.getUserId()); + metaObject.put("oaid", appProvider.getOaid()); + + } catch (JSONException e) { + e.printStackTrace(); + } + return metaObject; + } + @SuppressLint("CheckResult") public static void uploadShareResult(String shareType, String entrance, String shareResult, String url, String title, String summary, String resourceId) { JSONObject object = new JSONObject(); diff --git a/module_login/src/main/java/com/gh/gamecenter/login/utils/DialogUtils.java b/module_login/src/main/java/com/gh/gamecenter/login/utils/DialogUtils.java index 785286fbbe..65b602ddea 100644 --- a/module_login/src/main/java/com/gh/gamecenter/login/utils/DialogUtils.java +++ b/module_login/src/main/java/com/gh/gamecenter/login/utils/DialogUtils.java @@ -53,9 +53,13 @@ public class DialogUtils { contentStr = context.getString(R.string.dialog_login_policy_content); } binding.content.setText(Html.fromHtml(contentStr)); - binding.negativeTv.setOnClickListener(v -> dialog.dismiss()); + binding.negativeTv.setOnClickListener(v -> { + dialog.dismiss(); + NewFlatLogUtils.INSTANCE.logLoginPrivacyPolicyPopClick("不同意"); + }); binding.positiveTv.setOnClickListener(v -> { dialog.dismiss(); + NewFlatLogUtils.INSTANCE.logLoginPrivacyPolicyPopClick("同意并继续"); listener.onConfirm(); }); diff --git a/module_login/src/main/java/com/gh/gamecenter/login/utils/NewFlatLogUtils.kt b/module_login/src/main/java/com/gh/gamecenter/login/utils/NewFlatLogUtils.kt new file mode 100644 index 0000000000..99b6b71e0d --- /dev/null +++ b/module_login/src/main/java/com/gh/gamecenter/login/utils/NewFlatLogUtils.kt @@ -0,0 +1,77 @@ +package com.gh.gamecenter.login.utils + +import com.gh.gamecenter.common.json.JsonObjectBuilder +import com.gh.gamecenter.common.json.json +import com.gh.gamecenter.common.loghub.LoghubUtils +import com.gh.gamecenter.common.utils.LogUtils +import com.lightgame.utils.Utils +import org.json.JSONObject + +object NewFlatLogUtils { + + private const val KEY_EVENT = "event" + + private fun log(jsonObject: JSONObject, logStore: String, uploadImmediately: Boolean) { + Utils.log("NewFlatLogUtils", jsonObject.toString(4)) + LoghubUtils.log(jsonObject, logStore, uploadImmediately, true) + } + + private fun parseAndPutMeta(): JsonObjectBuilder.() -> Unit = { + val meta = LogUtils.getNewMetaObject() + val metaKeys = meta.keys() + while (metaKeys.hasNext()) { + val key: String = metaKeys.next().toString() + val value = meta.getString(key) + key to value + } + } + + // 一键登录界面展示/手机号码验证界面展示/隐私政策指引弹窗展示 + fun logFastLoginRelatedShow(event: String) { + val json = json { + KEY_EVENT to event + parseAndPutMeta().invoke(this) + } + log(json, "event", false) + } + + // 一键登录界面登录方式选择(`一键登录`\`QQ`\`微信`\`微博`) + fun logFastLoginChoice(loginType: String) { + val json = json { + KEY_EVENT to "fast_login_choice" + "login_type" to loginType + parseAndPutMeta().invoke(this) + } + log(json, "event", false) + } + + // 手机号码验证界面登录(`一键登录`\`立即登录`) + fun logMobileNumberClick(loginType: String) { + val json = json { + KEY_EVENT to "mobile_number_verification_click" + "login_source" to loginType + parseAndPutMeta().invoke(this) + } + log(json, "event", false) + } + + // 手机号码验证界面登录(`同意并继续`\`不同意`) + fun logLoginPrivacyPolicyPopClick(buttonType: String) { + val json = json { + KEY_EVENT to "login_privacy_policy_pop_click" + "button_type" to buttonType + parseAndPutMeta().invoke(this) + } + log(json, "event", false) + } + + // 一键登录-登录效果(`成功`\`失败`) + fun logFastLoginResult(loginResult: String) { + val json = json { + KEY_EVENT to "fast_login_result" + "button_type" to loginResult + parseAndPutMeta().invoke(this) + } + log(json, "event", false) + } +} \ No newline at end of file diff --git a/module_login/src/main/java/com/gh/gamecenter/login/utils/QuickLoginHelper.kt b/module_login/src/main/java/com/gh/gamecenter/login/utils/QuickLoginHelper.kt index f98d11821a..3ee9211f6e 100644 --- a/module_login/src/main/java/com/gh/gamecenter/login/utils/QuickLoginHelper.kt +++ b/module_login/src/main/java/com/gh/gamecenter/login/utils/QuickLoginHelper.kt @@ -227,6 +227,7 @@ object QuickLoginHelper { setCanceledOnTouchOutside(false) show() } + NewFlatLogUtils.logFastLoginChoice("一键登录") } } @@ -287,21 +288,25 @@ object QuickLoginHelper { changeLoginBtn.setOnClickListener { checkPolicyAndContinue(context) { startCodeLoginPage(false) + NewFlatLogUtils.logFastLoginRelatedShow("mobile_number_verification_show") } } qqBtn.setOnClickListener { checkPolicyAndContinue(context) { startQuickLoginHelperPage(LoginTag.qq) + NewFlatLogUtils.logFastLoginChoice("QQ") } } wechatBtn.setOnClickListener { checkPolicyAndContinue(context) { startQuickLoginHelperPage(LoginTag.wechat) + NewFlatLogUtils.logFastLoginChoice("微信") } } weiboBtn.setOnClickListener { checkPolicyAndContinue(context) { startQuickLoginHelperPage(LoginTag.weibo) + NewFlatLogUtils.logFastLoginChoice("微博") } } root.doOnAttach { @@ -331,9 +336,12 @@ object QuickLoginHelper { mPrivacyCheckBox?.isChecked = true callback.invoke() } + NewFlatLogUtils.logFastLoginRelatedShow("login_privacy_policy_pop_show") } private fun initView(context: Context, root: View) { + NewFlatLogUtils.logFastLoginRelatedShow("fast_login_show") + (root.parent as? ViewGroup)?.run { setBackgroundColor(R.color.background_white.toColor(context)) diff --git a/module_login/src/main/java/com/gh/gamecenter/login/view/LoginFragment.java b/module_login/src/main/java/com/gh/gamecenter/login/view/LoginFragment.java index 4e0257f897..16cd7ba628 100644 --- a/module_login/src/main/java/com/gh/gamecenter/login/view/LoginFragment.java +++ b/module_login/src/main/java/com/gh/gamecenter/login/view/LoginFragment.java @@ -23,10 +23,6 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.alibaba.android.arouter.launcher.ARouter; -import com.gh.gamecenter.core.utils.DisplayUtils; -import com.gh.gamecenter.core.utils.EmptyCallback; -import com.gh.gamecenter.login.utils.DialogUtils; -import com.gh.gamecenter.login.utils.LoginHelper; import com.gh.gamecenter.common.base.fragment.ToolbarFragment; import com.gh.gamecenter.common.base.fragment.WaitingDialogFragment; import com.gh.gamecenter.common.constant.Constants; @@ -35,14 +31,13 @@ import com.gh.gamecenter.common.constant.RouteConsts; import com.gh.gamecenter.common.eventbus.EBReuse; import com.gh.gamecenter.common.retrofit.ApiResponse; import com.gh.gamecenter.common.utils.ExtensionsKt; -import com.gh.gamecenter.common.utils.PackageFlavorHelper; -import com.gh.gamecenter.core.provider.IEnergyTaskProvider; import com.gh.gamecenter.core.provider.ILogUtilsProvider; import com.gh.gamecenter.core.provider.IWebProvider; import com.gh.gamecenter.core.utils.ClickUtils; +import com.gh.gamecenter.core.utils.DisplayUtils; +import com.gh.gamecenter.core.utils.EmptyCallback; import com.gh.gamecenter.core.utils.MtaHelper; import com.gh.gamecenter.core.utils.PatternUtils; -import com.gh.gamecenter.core.utils.SPUtils; import com.gh.gamecenter.login.HaloApp; import com.gh.gamecenter.login.R; import com.gh.gamecenter.login.databinding.FragmentLoginBinding; @@ -51,7 +46,10 @@ import com.gh.gamecenter.login.entity.UserInfoEntity; import com.gh.gamecenter.login.user.LoginTag; import com.gh.gamecenter.login.user.UserManager; import com.gh.gamecenter.login.user.UserViewModel; +import com.gh.gamecenter.login.utils.DialogUtils; +import com.gh.gamecenter.login.utils.LoginHelper; import com.gh.gamecenter.login.utils.LoginUtils; +import com.gh.gamecenter.login.utils.NewFlatLogUtils; import com.gh.gamecenter.login.utils.QuickLoginHelper; import org.greenrobot.eventbus.EventBus; @@ -301,6 +299,14 @@ public class LoginFragment params.put("service_id", mServiceId); login(new JSONObject(params), LoginTag.phone); + + String loginSource; + if (mIsFromQuickLogin) { + loginSource = "一键登录"; + } else { + loginSource = "立即登录"; + } + NewFlatLogUtils.INSTANCE.logMobileNumberClick(loginSource); }); } @@ -419,6 +425,14 @@ public class LoginFragment mUserViewModel.login(content, loginTag); } + @Override + protected void onDarkModeChanged() { + super.onDarkModeChanged(); + if (mIsFromQuickLogin) { + mBinding.normalToolbarContainer.normalToolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white)); + mBinding.normalToolbarContainer.backBtn.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.ic_bar_back)); + } + } private class LoginTextWatcher implements TextWatcher { private final EditText mEditText; diff --git a/module_login/src/main/java/com/gh/gamecenter/login/view/QuickLoginHelperActivity.kt b/module_login/src/main/java/com/gh/gamecenter/login/view/QuickLoginHelperActivity.kt index 3c320bc9ef..8080695673 100644 --- a/module_login/src/main/java/com/gh/gamecenter/login/view/QuickLoginHelperActivity.kt +++ b/module_login/src/main/java/com/gh/gamecenter/login/view/QuickLoginHelperActivity.kt @@ -1,6 +1,7 @@ package com.gh.gamecenter.login.view import android.content.Intent +import android.os.Build import android.os.Bundle import android.text.TextUtils import androidx.activity.viewModels @@ -17,8 +18,11 @@ import com.gh.gamecenter.core.utils.SPUtils import com.gh.gamecenter.login.HaloApp import com.gh.gamecenter.login.R import com.gh.gamecenter.login.entity.UserInfoEntity -import com.gh.gamecenter.login.user.* +import com.gh.gamecenter.login.user.LoginTag +import com.gh.gamecenter.login.user.UserManager +import com.gh.gamecenter.login.user.UserViewModel import com.gh.gamecenter.login.utils.LoginHelper +import com.gh.gamecenter.login.utils.NewFlatLogUtils import com.gh.gamecenter.login.utils.QuickLoginHelper import org.json.JSONObject @@ -27,6 +31,7 @@ import org.json.JSONObject */ class QuickLoginHelperActivity : BaseActivity(), LoginHelper.LoginCallback, Observer> { + private var mLoginTag: LoginTag? = null private var mLoginDialog: WaitingDialogFragment? = null private val mUserViewModel: UserViewModel by viewModels { UserViewModel.Factory(HaloApp.getInstance()) } @@ -39,7 +44,12 @@ class QuickLoginHelperActivity : BaseActivity(), LoginHelper.LoginCallback, Obse } private fun handleLoginType() { - when (intent?.getSerializableExtra(EntranceConsts.KET_TYPE) as? LoginTag ?: finish()) { + mLoginTag = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + intent?.getSerializableExtra(EntranceConsts.KET_TYPE) as? LoginTag + } else { + intent?.getSerializableExtra(EntranceConsts.KET_TYPE, LoginTag::class.java) + } + when (mLoginTag ?: finish()) { LoginTag.qq -> LoginHelper.loginWithQQ(this, this) LoginTag.wechat -> LoginHelper.loginWithWechat(this) LoginTag.weibo -> LoginHelper.loginWithWeibo(this, this) @@ -70,12 +80,12 @@ class QuickLoginHelperActivity : BaseActivity(), LoginHelper.LoginCallback, Obse data ) // WeiBo Login callback - 32973 -> LoginHelper.onWeiboLoginCallback(this, requestCode, resultCode, data); + 32973 -> LoginHelper.onWeiboLoginCallback(this, requestCode, resultCode, data) } } override fun onLoginSuccess(loginType: LoginTag, jsonContent: JSONObject) { - login(jsonContent, loginType); + login(jsonContent, loginType) } override fun onLoginFailure(loginType: LoginTag, error: String) { @@ -100,13 +110,14 @@ class QuickLoginHelperActivity : BaseActivity(), LoginHelper.LoginCallback, Obse if (loginType == LoginTag.oauth.name) { SPUtils.setBoolean(Constants.SP_HAS_GET_PHONE_INFO, false) + NewFlatLogUtils.logFastLoginResult("成功") } // 第三方登录方式登录后跳转绑定手机页面(https://gitlab.ghzs.com/pm/halo-app-issues/-/issues/1206) val isThirdPartyLogin = LoginTag.qq.name == loginType || LoginTag.wechat.name == loginType || LoginTag.weibo.name == loginType || LoginTag.douyin.name == loginType if (isThirdPartyLogin - && TextUtils.isEmpty(response.getData().loginMobile) + && TextUtils.isEmpty(response.data.loginMobile) ) { ARouter.getInstance().build(RouteConsts.activity.bindPhoneActivity) .withBoolean(EntranceConsts.KEY_FROM_LOGIN, true) @@ -124,6 +135,8 @@ class QuickLoginHelperActivity : BaseActivity(), LoginHelper.LoginCallback, Obse if (UserManager.getInstance().isLoggedIn) { QuickLoginHelper.finishAuthActivity() } + } else if ((response?.httpException != null || response?.throwable != null) && mLoginTag == LoginTag.oauth) { + NewFlatLogUtils.logFastLoginResult("失败") } } } \ No newline at end of file