diff --git a/app/src/main/java/com/gh/common/util/DataUtils.java b/app/src/main/java/com/gh/common/util/DataUtils.java index 30a4161275..438e01e89d 100644 --- a/app/src/main/java/com/gh/common/util/DataUtils.java +++ b/app/src/main/java/com/gh/common/util/DataUtils.java @@ -180,9 +180,11 @@ public class DataUtils { if (idCardEntity != null) { boolean isCertificated = !TextUtils.isEmpty(data.getIdCard().getId()); boolean isAdult = data.getIdCard().getMinor() == null || !data.getIdCard().getMinor(); + boolean isCertificating = data.getIdCard().getStatus() == 1; values.put(GhContentProvider.KEY_IS_CERTIFICATED, isCertificated); // 是否认证 values.put(GhContentProvider.KEY_IS_ADULT, isAdult); // 是否成年 + values.put(GhContentProvider.KEY_IS_CERTIFICATING, isCertificating); // 是否认证中 if (!isCertificated) { RealNameHelper.updateCertificationStatus(0); @@ -196,6 +198,7 @@ public class DataUtils { } else { values.put(GhContentProvider.KEY_IS_CERTIFICATED, false); values.put(GhContentProvider.KEY_IS_ADULT, false); + values.put(GhContentProvider.KEY_IS_CERTIFICATING, false); RealNameHelper.updateCertificationStatus(0); } diff --git a/app/src/main/java/com/gh/common/util/DownloadObserver.kt b/app/src/main/java/com/gh/common/util/DownloadObserver.kt index 02cc0bbc53..075101fd9f 100644 --- a/app/src/main/java/com/gh/common/util/DownloadObserver.kt +++ b/app/src/main/java/com/gh/common/util/DownloadObserver.kt @@ -8,6 +8,7 @@ import com.gh.common.xapk.XapkInstaller import com.gh.download.DownloadDataHelper import com.gh.download.DownloadManager import com.gh.gamecenter.R +import com.gh.gamecenter.ShellActivity import com.gh.gamecenter.common.base.GlobalActivityManager.getCurrentPageEntity import com.gh.gamecenter.common.base.GlobalActivityManager.getLastPageEntity import com.gh.gamecenter.common.base.activity.BaseActivity @@ -171,6 +172,33 @@ object DownloadObserver { ToastUtils.toast("该游戏未接入防沉迷系统,暂不支持下载") } + // 删除任务 + downloadEntity.status = DownloadStatus.cancel + downloadManager.cancel(downloadEntity.url) + } else if (DownloadStatus.isCertificating == downloadEntity.status) { + // 未接入防沉迷系统 + val currentActivity = AppManager.getInstance().currentActivity() + + if (currentActivity != null) { + DialogHelper.showDialog( + context = currentActivity, + title = "实名提示", + content = "您当前的身份信息正在认证中,根据相关政策要求,该游戏需通过认证后才能进行下载", + cancelText = "知道了", + confirmText = "查看实名认证", + cancelClickCallback = null, + confirmClickCallback = { + currentActivity.startActivity( + ShellActivity.getIntent( + currentActivity, + ShellActivity.Type.REAL_NAME_INFO, + )) + } + ) + } else { + ToastUtils.toast("您当前的身份信息正在认证中,根据相关政策要求,该游戏需通过认证后才能进行下载") + } + // 删除任务 downloadEntity.status = DownloadStatus.cancel downloadManager.cancel(downloadEntity.url) diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.kt index 29136fbc75..7f49755f92 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.kt @@ -510,6 +510,8 @@ class MainWrapperFragment : BaseFragment_ViewPager_Checkable(), OnBackPressedLis }) } applyPkgConfig() + + updateRealNameErrorContainer() } override fun handleOnClick(view: View): Boolean { diff --git a/app/src/main/java/com/gh/gamecenter/provider/GhContentProvider.kt b/app/src/main/java/com/gh/gamecenter/provider/GhContentProvider.kt index 14f9a61f4e..0a219f4eb7 100644 --- a/app/src/main/java/com/gh/gamecenter/provider/GhContentProvider.kt +++ b/app/src/main/java/com/gh/gamecenter/provider/GhContentProvider.kt @@ -31,13 +31,13 @@ class GhContentProvider : ContentProvider() { private fun initProviderSqliteHelper(context: Context?) { val helper: SQLiteOpenHelper = - object : SQLiteOpenHelper(context, CERTIFICATION_DATABASE_NAME, null, 2) { + object : SQLiteOpenHelper(context, CERTIFICATION_DATABASE_NAME, null, 3) { override fun onCreate(db: SQLiteDatabase) { - // 创建表格 val sql = "CREATE TABLE $CERTIFICATION_TABLE_NAME(" + "$KEY_PRIMARY_KEY INTEGER PRIMARY KEY AUTOINCREMENT," + "$KEY_IS_CERTIFICATED BOOL," + - "$KEY_IS_ADULT BOOL" + + "$KEY_IS_ADULT BOOL," + + "$KEY_IS_CERTIFICATING BOOL" + ")" db.execSQL(sql) @@ -57,7 +57,7 @@ class GhContentProvider : ContentProvider() { } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { - if (oldVersion == 1 && newVersion == 2) { + if (oldVersion == 1) { val deviceSql = "CREATE TABLE ${DEVICE_TABLE_NAME}(" + "$KEY_PRIMARY_KEY INTEGER PRIMARY KEY AUTOINCREMENT," + "$KEY_GID TEXT," + @@ -65,6 +65,12 @@ class GhContentProvider : ContentProvider() { ")" db.execSQL(deviceSql) } + + if (oldVersion == 1 || oldVersion == 2) { + val addCertificatingColumnSql = + "ALTER TABLE $CERTIFICATION_TABLE_NAME ADD COLUMN $KEY_IS_CERTIFICATING BOOL DEFAULT FALSE" + db.execSQL(addCertificatingColumnSql) + } } } mSqLiteDatabase = helper.writableDatabase @@ -243,6 +249,7 @@ class GhContentProvider : ContentProvider() { const val KEY_PRIMARY_KEY = "primary_key" const val KEY_IS_CERTIFICATED = "is_certificated" + const val KEY_IS_CERTIFICATING = "is_certificating" // 是否正在认证中 const val KEY_IS_ADULT = "is_adult" const val KEY_GID = "gid" const val KEY_ANDROID_ID = "android_id" diff --git a/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt b/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt index 5169885c73..cbb3cb4f81 100644 --- a/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt +++ b/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt @@ -436,25 +436,29 @@ object NDownloadBridge : InnerDownloadListener, IErrorRetryHandler { private fun handlePreDownloadForbiddenException(downloadEntity: DownloadEntity, errorString: String) { try { val resultObject = JSONObject(errorString) + val code = resultObject.getString("code") - if ("403001" == resultObject.getString("code")) { + if ("403001" == code) { // 未实名 if (resultObject.has("force") && !resultObject.getBoolean("force")) { downloadEntity.meta["force_real_name"] = "false" } downloadEntity.status = com.lightgame.download.DownloadStatus.uncertificated - } else if ("403002" == resultObject.getString("code")) { + } else if ("403002" == code) { // 未成年 if (resultObject.has("force") && !resultObject.getBoolean("force")) { downloadEntity.meta["force_real_name"] = "false" } downloadEntity.status = com.lightgame.download.DownloadStatus.unqualified - } else if ("403003" == resultObject.getString("code")) { + } else if ("403003" == code) { // 该游戏未接入防沉迷系统禁止下载 downloadEntity.status = com.lightgame.download.DownloadStatus.unavailable - } else if ("403004" == resultObject.getString("code")) { + } else if ("403004" == code) { // 后台禁止该设备下载 downloadEntity.status = com.lightgame.download.DownloadStatus.banned + } else if ("403005" == code) { + // 实名中禁止下载 + downloadEntity.status = com.lightgame.download.DownloadStatus.isCertificating } } catch (e: JSONException) { e.printStackTrace() diff --git a/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoFragment.kt b/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoFragment.kt index 4922198c48..7107b430b4 100644 --- a/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoFragment.kt +++ b/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoFragment.kt @@ -65,29 +65,7 @@ class RealNameInfoFragment : ToolbarFragment() { ) requireActivity().finish() } else if (status == RealNameInfoViewModel.RESULT_PROGRESSING) { - DialogHelper.showDialog(requireContext(), - title = "提示", - content = "系统繁忙,请稍后再试", - confirmText = "前往人工审核", - cancelText = "确定", - confirmClickCallback = { - startActivity( - ShellActivity.getIntent( - requireContext(), - ShellActivity.Type.MANUALLY_REAL_NAME, - Bundle().apply { - putString(EntranceConsts.KEY_NAME, mBinding.nameEt.text.toString()) - putString(EntranceConsts.KEY_ID, mBinding.idCardEt.text.toString()) - } - ) - ) - requireActivity().finish() - }, - uiModificationCallback = { - it.titleTv.gravity = Gravity.CENTER - it.contentTv.gravity = Gravity.CENTER - } - ) + startActivity(ShellActivity.getIntent(requireContext(), ShellActivity.Type.REAL_NAME_INFO)) } mProgressDialog?.dismiss() } diff --git a/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoViewModel.kt b/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoViewModel.kt index 9b1af1f476..917365a730 100644 --- a/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoViewModel.kt +++ b/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoViewModel.kt @@ -71,8 +71,37 @@ class RealNameInfoViewModel(application: Application) : AndroidViewModel(applica HaloApp.getInstance(), (exception as? HttpException)?.response()?.errorBody()?.string() ) { - if (it == 400012) { - NewLogUtils.logCertificationResult(isForced, 3) + NewLogUtils.logCertificationResult(isForced, 0) + SensorsBridge.trackEvent( + "VerificationComplete", + "source_entrance", + if (gameId.isNotEmpty() || isForced) "游戏实名" else "主动进入", + "result", + "认证失败" + ) + certificateResultLiveData.postValue(RESULT_UNQUALIFIED) + return@handleErrorWithCustomizedHandler false + } + } + + override fun onSuccess(data: ResponseBody?) { + val cachedUserInfo = + UserRepository.getInstance().cacheUserInfoEntity + + var isUnQualified: Boolean + tryWithDefaultCatch { + val `object` = JSONObject(data?.string() ?: "") + isUnQualified = `object`.getBoolean("minor") + val isCertificating = if (`object`.has("status")) `object`.get("status") else 0 + var qualifyInt = 1 + if (!isUnQualified) { + qualifyInt = 2 + } else if (isCertificating == 1) { + qualifyInt = 3 + } + + if (isCertificating == 1) { + NewLogUtils.logCertificationResult(isForced, qualifyInt) SensorsBridge.trackEvent( "VerificationComplete", "source_entrance", @@ -81,66 +110,39 @@ class RealNameInfoViewModel(application: Application) : AndroidViewModel(applica "认证中" ) certificateResultLiveData.postValue(RESULT_PROGRESSING) - return@handleErrorWithCustomizedHandler true } else { - NewLogUtils.logCertificationResult(isForced, 0) + NewLogUtils.logCertificationResult(isForced, qualifyInt) SensorsBridge.trackEvent( "VerificationComplete", "source_entrance", if (gameId.isNotEmpty() || isForced) "游戏实名" else "主动进入", "result", - "认证失败" + if (qualifyInt == 1) "未成年" else "成年" ) - certificateResultLiveData.postValue(RESULT_UNQUALIFIED) - return@handleErrorWithCustomizedHandler false + + // 登录状态下更新实名认证信息 + if (cachedUserInfo != null && data?.string() != null) { + val newIdCard: IdCardEntity? = content.toObject() + if (isUnQualified) { + newIdCard?.minor = true + } + cachedUserInfo.idCard = newIdCard + UserRepository.getInstance() + .cacheAndNotifyUserInfo(cachedUserInfo, true) + } + + certificateResultLiveData.postValue(RESULT_SUCCESS) + + // 安装因为实名延迟的游戏 + resumeInstallationIfNeeded() + // 重启因为实名认证而处于等待中的任务 + DownloadManager.getInstance() + .resumeAllInvisiblePendingTask() } + + DataUtils.getDeviceCertification(HaloApp.getInstance().gid) } } - - override fun onSuccess(data: ResponseBody?) { - val cachedUserInfo = - UserRepository.getInstance().cacheUserInfoEntity - - var isUnQualified = false - - tryWithDefaultCatch { - val `object` = JSONObject(data?.string() ?: "") - isUnQualified = `object`.getBoolean("minor") - var qualifyInt = 1 - if (!isUnQualified) { - qualifyInt = 2 - } - NewLogUtils.logCertificationResult(isForced, qualifyInt) - SensorsBridge.trackEvent( - "VerificationComplete", - "source_entrance", - if (gameId.isNotEmpty() || isForced) "游戏实名" else "主动进入", - "result", - if (qualifyInt == 1) "未成年" else "成年" - ) - } - - // 登录状态下更新实名认证信息 - if (cachedUserInfo != null && data?.string() != null) { - val newIdCard: IdCardEntity? = content.toObject() - if (isUnQualified) { - newIdCard?.minor = true - } - cachedUserInfo.idCard = newIdCard - UserRepository.getInstance() - .cacheAndNotifyUserInfo(cachedUserInfo, true) - } - - DataUtils.getDeviceCertification(HaloApp.getInstance().gid) - - certificateResultLiveData.postValue(RESULT_SUCCESS) - - // 安装因为实名延迟的游戏 - resumeInstallationIfNeeded() - // 重启因为实名认证而处于等待中的任务 - DownloadManager.getInstance() - .resumeAllInvisiblePendingTask() - } }) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0b57b5f82b..aa24594f19 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -412,7 +412,7 @@ 当前认证状态:成年人 当前认证状态:未成年 实名信息认证中... - 认证期间不影响您正常的游戏体验 + 部分游戏在认证期间无法进行下载 设置偏好]]> ,让推荐更懂你的心~ diff --git a/feature/realname-window/src/main/java/com/lg/realname/RealNameHelper.kt b/feature/realname-window/src/main/java/com/lg/realname/RealNameHelper.kt index dbb532dc97..aeffb2169c 100644 --- a/feature/realname-window/src/main/java/com/lg/realname/RealNameHelper.kt +++ b/feature/realname-window/src/main/java/com/lg/realname/RealNameHelper.kt @@ -13,6 +13,7 @@ import android.os.Build import android.os.Bundle import android.util.Base64 import android.view.WindowManager +import com.gh.gamecenter.common.utils.DialogHelper import com.gh.gamecenter.common.utils.tryWithDefaultCatch import com.gh.gamecenter.core.AppExecutor import com.lg.realname.retrofit.RetrofitManager @@ -35,6 +36,7 @@ object RealNameHelper : ActivityLifecycleCallbacks { private var mExitClosure: (() -> Unit)? = null + private var mIsCertificating = false // 是否处于实名状态中 private var mIsSuccessDialogShowed = false private var mApplication: Application? = null @@ -84,11 +86,10 @@ object RealNameHelper : ActivityLifecycleCallbacks { //获取是否在健康时间段内 @SuppressLint("CheckResult") fun checkHealthyTime() { - RetrofitManager.getInstance().newApi.postHealthyTimeCheck() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe({ success -> + .subscribe { success -> val result = JSONObject(success.string()) if (!result.getBoolean("is_healthy_time")) {//不在健康时间段 showSuccessRealNameDialog(mCurrentActivityRef.get(), false) @@ -97,9 +98,7 @@ object RealNameHelper : ActivityLifecycleCallbacks { showSuccessRealNameDialog(mCurrentActivityRef.get(), true) mLastIsHealthyTime = true } - }, { - - }) + } } override fun onActivityStarted(p0: Activity) { @@ -122,7 +121,20 @@ object RealNameHelper : ActivityLifecycleCallbacks { } else { val activity = mCurrentActivityRef.get() if (activity != null) { - if (mIsCertificated) {//已经认证 + if (mIsCertificating) { + DialogHelper.showDialog( + context = activity, + title = "提示", + content = "当前您的实名信息审核处于“认证中”,根据相关政策要求,需通过认证才可进入游戏", + confirmText = "退出游戏", + confirmClickCallback = { + mExitClosure?.invoke() + }, + cancelText = "", + uiModificationCallback = { + it.dialog.setCanceledOnTouchOutside(false) + }) + } else if (mIsCertificated) {//已经认证 showSuccessDialogOrScheduleHealthyCheck(activity) } else { showInputRealNameDialog(activity) @@ -148,7 +160,6 @@ object RealNameHelper : ActivityLifecycleCallbacks { NewFlatLogUtils.logCwCertificationResult(mQQGameId, if (isMinor) "未成年人" else "成年人") syncCertification(realName, idCard) showSuccessDialogOrScheduleHealthyCheck(activity) - } NewFlatLogUtils.logCwCertificationDialogShow(mQQGameId, mQQGameName) mIsAgoShowInputRealNameDialog = true @@ -226,7 +237,9 @@ object RealNameHelper : ActivityLifecycleCallbacks { if (cursor != null && cursor.count > 0) { cursor.moveToFirst() do { - if (cursor.getInt(1) == 1) { + if (cursor.getInt(3) == 1) { + mIsCertificating = true + } else if (cursor.getInt(1) == 1) { mIsCertificated = true if (cursor.getInt(2) == 1) { //如果是成年人 那肯定是认证了??? @@ -248,12 +261,6 @@ object RealNameHelper : ActivityLifecycleCallbacks { currentRealNameDialog?.dismiss() } - // 羊了个羊游戏在广告页面退出游戏会导致应用进程再次被唤起,这里做一个弹窗延时 - if (!isPlay && activity.packageName.equals("com.hlys.hcrcq.ylgy.gzgw27") - && activity.localClassName.equals("com.jygame.ui.SplashActivity")) { - return - } - currentRealNameDialog = RealNameDialog.show(activity, isPlay) { play -> if (play) { //进入游戏 @@ -268,7 +275,6 @@ object RealNameHelper : ActivityLifecycleCallbacks { } uploadHealthTipsEvent(activity, isPlay, "") mIsAgoShowRealNameDialog = true - } } diff --git a/libraries/LGLibrary b/libraries/LGLibrary index fb3654fb94..0eaa51b133 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit fb3654fb94ceff05f41ba3eb99a5ebb975dd31ae +Subproject commit 0eaa51b133f0e3736adcd82b98700297818aa90f