From 1ea147d43db642645b8e03f4f9f2c9bb3b2acee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=90=9B=E9=99=B6?= Date: Tue, 14 Jun 2022 16:17:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=80https://git.shanqu.cc/pm/halo-plugin?= =?UTF-8?q?-issues/-/issues/221?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 6 + .../java/com/gh/common/util/DataUtils.java | 28 +++ .../com/gh/common/util/EntranceUtils.java | 4 - .../java/com/gh/gamecenter/SkipActivity.java | 3 + .../com/gh/gamecenter/entity/IdCardEntity.kt | 1 + .../gamecenter/provider/GhContentProvider.kt | 177 ++++++++++++++++++ .../retrofit/service/ApiService.java | 9 + .../gh/gamecenter/user/UserRepository.java | 32 ++++ ...bg_dialog_certification_blue_radius_20.xml | 6 + .../bg_dialog_certification_radius_20.xml | 6 + app/src/main/res/values/strings.xml | 3 + 11 files changed, 271 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/gh/gamecenter/provider/GhContentProvider.kt create mode 100644 app/src/main/res/drawable/bg_dialog_certification_blue_radius_20.xml create mode 100644 app/src/main/res/drawable/bg_dialog_certification_radius_20.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f81ca2b2c5..74faeb16ad 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -763,6 +763,12 @@ android:resource="@xml/provider_paths" /> + + ?, + selection: String?, + selectionArgs: Array?, + sortOrder: String? + ): Cursor? { + when(mUriMatcher.match(uri)){ + 1 -> return mSqLiteDatabase?.query( + CERTIFICATION_TABLE_NAME, + null, + null, + null, + null, + null, + null + ) + 2 -> return mSqLiteDatabase?.query( + SYNC_CERTIFICATION_TABLE_NAME, + null, + null, + null, + null, + null, + null + ) + } + return null + + } + + override fun getType(uri: Uri): String? = null + + override fun insert(uri: Uri, values: ContentValues?): Uri? { + val context = context ?: return null + + if (mUriMatcher.match(uri) == 1) { + // 固定主键(只保留一条数据即可) + values?.put(KEY_PRIMARY_KEY, 1) + // 如果已存在则直接替换 + val rowId: Long? = mSqLiteDatabase?.insertWithOnConflict( + CERTIFICATION_TABLE_NAME, + null, + values, + SQLiteDatabase.CONFLICT_REPLACE + ) + if (rowId != null && rowId > 0) { + val nameUri = ContentUris.withAppendedId(uri, rowId) + context.contentResolver.notifyChange(nameUri, null) + Utils.log("CertificationContentProvider", "insert success:" + uri.authority + ", status => " + values?.toString()) + return nameUri + } + } else if (mUriMatcher.match(uri) == 2) { + val certificationStr = + SPUtils.getString(Constants.SP_DEVICE_CERTIFICATION_PREFIX + HaloApp.getInstance().gid) + val isCertification = if (TextUtils.isEmpty(certificationStr)) { + false + } else { + val userInfo: UserInfoEntity = + GsonUtils.fromJson(certificationStr, UserInfoEntity::class.java) + if (userInfo != null) { + !TextUtils.isEmpty(userInfo.idCard?.id) + } else { + false + } + + } + if (!isCertification) {//如果未实名的话 就直接将写入的信息进行实名信息绑定 + val realName = values?.getAsString(KEY_REAL_NAME) + val idCard = values?.getAsString(KEY_ID_CARD) + if (!TextUtils.isEmpty(realName) && !TextUtils.isEmpty(idCard)) { + //base64解密存储的数据 + val finalRealName = String(Base64.decode(realName, Base64.DEFAULT)) + val finalIdCard = String(Base64.decode(idCard, Base64.DEFAULT)) +// Utils.log("解密后的数据:$finalRealName ------ $finalIdCard") + //发送同步实名认证请求 + UserRepository.getInstance().syncCertificate(finalRealName, finalIdCard) + return ContentUris.withAppendedId(uri, 1) + } + + } + } + return null + } + + override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int { + // delete from outside is forbidden + if (mUriMatcher.match(uri) == 2){ + return mSqLiteDatabase?.delete(SYNC_CERTIFICATION_TABLE_NAME,selection,selectionArgs) ?: 0 + } + return 0 + } + + override fun update( + uri: Uri, + values: ContentValues?, + selection: String?, + selectionArgs: Array? + ): Int { + return 0 + } + + companion object { + private const val AUTHORITY = "${BuildConfig.APPLICATION_ID}.provider" + private const val CERTIFICATION_DATABASE_NAME = "gh_certification.db" + private const val CERTIFICATION_TABLE_NAME = "certification" + + const val KEY_PRIMARY_KEY = "primary_key" + const val KEY_IS_CERTIFICATED = "is_certificated" + const val KEY_IS_ADULT = "is_adult" + + private const val SYNC_CERTIFICATION_TABLE_NAME = "sync_certification" + + const val KEY_REAL_NAME = "real_name" + const val KEY_ID_CARD = "id_card" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index a01e0f8909..a0aa511a35 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -3543,4 +3543,13 @@ public interface ApiService { */ @POST("videos/{video_id}/comments/{comment_id}:unset-top") Observable postVideoCommentUnTop(@Path("video_id") String videoId, @Path("comment_id") String commentId); + + /** + * 同步从其他游戏传过来的实名认证 + */ + @POST("./certification:sync") + Observable postSyncCertification(@Body RequestBody body); + + + } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java index 325c509eb0..a44ae48eea 100644 --- a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java +++ b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java @@ -52,6 +52,7 @@ import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; +import java.util.Map; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -471,6 +472,37 @@ public class UserRepository { }); } + + /** + * 同步实名信息 + */ + @SuppressLint("CheckResult") + public void syncCertificate(final String realName, final String idCard) { + Map> map = new HashMap<>(); + Map info = new HashMap<>(); + info.put("id",idCard); + info.put("name",realName); + map.put("id_card",info); + RequestBody body = RequestBody.create( + MediaType.parse("application/json"), new JSONObject(map).toString()); + RetrofitManager.getInstance().getApi().postSyncCertification(body) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response(){ + @Override + public void onResponse(@Nullable ResponseBody response) { + super.onResponse(response); + DataUtils.getDeviceCertification(HaloApp.getInstance().getGid()); + } + + @Override + public void onApiFailure(ApiResponse e) { + super.onApiFailure(e); + + } + }); + } + private Response userInfoResponse(final LoginTag loginTag) { return new Response() { @Override diff --git a/app/src/main/res/drawable/bg_dialog_certification_blue_radius_20.xml b/app/src/main/res/drawable/bg_dialog_certification_blue_radius_20.xml new file mode 100644 index 0000000000..f6facf0d1a --- /dev/null +++ b/app/src/main/res/drawable/bg_dialog_certification_blue_radius_20.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_dialog_certification_radius_20.xml b/app/src/main/res/drawable/bg_dialog_certification_radius_20.xml new file mode 100644 index 0000000000..79cf4e8497 --- /dev/null +++ b/app/src/main/res/drawable/bg_dialog_certification_radius_20.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 55bb0a8c63..554c938d92 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -862,4 +862,7 @@ 该游戏暂时仅提供试玩版本。试玩版可能存在bug或兼容性问题。敬请留意后续相关消息。 游戏停服更新维护中,为避免情绪化内容对游戏评分带来的影响,因此开启停服保护功能。在停服保护状态期间,所新增及修改发布的评分将不计入总分,所评分评论内容在展示上也会有文字提示告知其他玩家。\n\n感谢您的配合及谅解,祝您游戏愉快!\n\n光环助手会持续关注产品建议及反馈,如您在使用过程中有任何问题,欢迎向我们反馈。 开启青少年模式后,系统将自动关闭所有游戏的下载功能,需要输入密码才能恢复使用\n\n开启青少年模式,需要先设置独立密码,如忘记密码可联系客服申述重置\n\n青少年模式是光环助手响应国家政策,为促进青少年健康成长的一种模式,我们优先针对核心场景进行优化,也将继续致力于优化更多场景 + + 您是否同意将您在光环平台游戏内的实名信息与状态同步至光环助手,您的信息将仅用于\n1、部分游戏在助手内无需再次实名即可下载\n2、游戏内使用快速认证方式,无需重复实名 +