feat : 接入新H5 小游戏, 砸蛋换新图 , h5 弹窗打开游戏 逻辑优化
@@ -42,8 +42,10 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.chwl.app.notify.RoomNotifyManager;
|
||||
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
|
||||
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
|
||||
import com.chwl.app.ui.webview.baishun.LeaderccGameWebFragment;
|
||||
import com.chwl.app.utils.RoomBoomManager;
|
||||
import com.chwl.core.manager.AudioEngineManager;
|
||||
import com.chwl.library.language.LanguageHelper;
|
||||
import com.chwl.library.widget.SVGAView;
|
||||
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
|
||||
import com.chwl.core.room.game.bean.BaiShunGameConfig;
|
||||
@@ -233,6 +235,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
|
||||
private RoomNotifyManager roomNotify;
|
||||
|
||||
private BaiShunGameWebFragment baiShunGameFragment;
|
||||
private LeaderccGameWebFragment leaderccGameFragment;
|
||||
|
||||
public static void start(Context context, long roomUid) {
|
||||
startForFromType(context, roomUid, FROM_TYPE_NORMAL, null, null);
|
||||
@@ -1503,6 +1506,24 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
|
||||
getSupportFragmentManager().beginTransaction().add(R.id.layout_baishun_game, baiShunGameFragment).commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
public void showLeaderccGame(String url, BaiShunGameConfig config) {
|
||||
closeBaiShunGame();
|
||||
StringBuffer newUrl = new StringBuffer(url);
|
||||
newUrl.append("&uid="+AuthModel.get().getCurrentUid());
|
||||
newUrl.append("&token="+config.getCode());
|
||||
newUrl.append("&lang=").append(LanguageHelper.INSTANCE.getH5GameLeaderccLan());
|
||||
newUrl.append("&roomid=").append(AvRoomDataManager.get().getRoomId());
|
||||
leaderccGameFragment = LeaderccGameWebFragment.Companion.newInstance(newUrl.toString(), config);
|
||||
leaderccGameFragment.setListener(new IBaiShunGameListener() {
|
||||
@Override
|
||||
public void onGameClose() {
|
||||
closeBaiShunGame();
|
||||
}
|
||||
});
|
||||
findViewById(R.id.layout_baishun_game).setVisibility(VISIBLE);
|
||||
getSupportFragmentManager().beginTransaction().add(R.id.layout_baishun_game, leaderccGameFragment).commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
private boolean closeBaiShunGame() {
|
||||
boolean isClose = false;
|
||||
if (baiShunGameFragment != null) {
|
||||
@@ -1511,8 +1532,15 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
|
||||
isClose = true;
|
||||
}
|
||||
}
|
||||
if (leaderccGameFragment != null) {
|
||||
if (leaderccGameFragment.isAdded()) {
|
||||
getSupportFragmentManager().beginTransaction().remove(leaderccGameFragment).commitAllowingStateLoss();
|
||||
isClose = true;
|
||||
}
|
||||
}
|
||||
findViewById(R.id.layout_baishun_game).setVisibility(View.GONE);
|
||||
baiShunGameFragment = null;
|
||||
leaderccGameFragment = null;
|
||||
return isClose;
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ class CreateRoomGameAdapter :
|
||||
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_room_create_game) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: GameInfo) {
|
||||
helper.getView<ImageView>(R.id.iv_cover).load(item.pic,12f)
|
||||
helper.getView<ImageView>(R.id.iv_cover).load(item.pic?:"",12f)
|
||||
helper.itemView.isSelected = item.isSelect
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ class CreateRoomGameGuideAdapter :
|
||||
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_room_create_game_guide) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: GameInfo) {
|
||||
GlideUtils.instance().load(item.pic,R.drawable.default_cover,helper.getView(R.id.iv_cover))
|
||||
GlideUtils.instance().load(item.pic?:"",R.drawable.default_cover,helper.getView(R.id.iv_cover))
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,8 +11,8 @@ import com.chwl.core.room.game.bean.GameInfo
|
||||
class RoomGameListAdapter :
|
||||
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.room_gameplay_item2) {
|
||||
override fun convert(helper: BaseViewHolder, item: GameInfo?) {
|
||||
helper.setText(R.id.tv_name, item?.name)
|
||||
helper.setText(R.id.tv_name, item?.name?:"")
|
||||
val iconView = helper.getView<ImageView>(R.id.iv_icon)
|
||||
iconView.load(item?.pic2)
|
||||
iconView.load(item?.pic2?:"")
|
||||
}
|
||||
}
|
||||
@@ -33,11 +33,15 @@ class CreateGameRoomDialog : BaseDialogFragment<DialogCreateGameRoomBinding>() {
|
||||
.build()
|
||||
|
||||
gameAdapter.setOnItemClickListener { _, _, position ->
|
||||
dismissAllowingStateLoss()
|
||||
OpenRoomHelper.openRoom(
|
||||
requireActivity() as BaseActivity, RoomInfo.ROOMTYPE_GAME,
|
||||
gameAdapter.data[position].mgId.toLong()
|
||||
)
|
||||
try {
|
||||
dismissAllowingStateLoss()
|
||||
OpenRoomHelper.openRoom(
|
||||
requireActivity() as BaseActivity, RoomInfo.ROOMTYPE_GAME,
|
||||
gameAdapter.data[position].mgId.toLong()
|
||||
)
|
||||
}catch (e:Exception){
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
binding?.ivClose?.setOnClickListener {
|
||||
|
||||
@@ -55,7 +55,7 @@ class RoomGameListDialog :
|
||||
|
||||
private var mStatus = -1
|
||||
private var mGameData = arrayListOf<GameInfo>()
|
||||
var listener: RoomGameplayDialog.GameplayDialogListener? = null
|
||||
var listener: GameplayDialogListener? = null
|
||||
override fun getTheme(): Int {
|
||||
return R.style.ErbanBottomSheetDialogDimFalse
|
||||
}
|
||||
@@ -102,8 +102,10 @@ class RoomGameListDialog :
|
||||
|
||||
private fun initView() {
|
||||
adapter.setOnItemClickListener { _, view, position ->
|
||||
val item = adapter.getItem(position) as GameInfo
|
||||
switchGame(item)
|
||||
val item = adapter.data.getOrNull(position)
|
||||
if (item != null) {
|
||||
switchGame(item)
|
||||
}
|
||||
}
|
||||
binding?.recyclerView?.adapter = adapter
|
||||
}
|
||||
@@ -176,13 +178,23 @@ class RoomGameListDialog :
|
||||
private fun roomIconToGameInfo(list : List<RoomIcon>): ArrayList<GameInfo> {
|
||||
val newData = arrayListOf<GameInfo>()
|
||||
list.forEachIndexed { index, roomIcon ->
|
||||
if (roomIcon.isBaiShunGame()) {
|
||||
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:""))
|
||||
}else if(roomIcon.isFindLove()){
|
||||
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
|
||||
}else if(roomIcon.isLeadercc()){
|
||||
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
|
||||
// if (roomIcon.isBaiShunGame()) {
|
||||
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"",code = roomIcon.code))
|
||||
// }else if(roomIcon.isFindLove()){
|
||||
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
|
||||
// }else if(roomIcon.isLeadercc()){
|
||||
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
|
||||
// }
|
||||
val gameInfo = GameInfo().apply {
|
||||
name = roomIcon.name ?: ""
|
||||
pic = roomIcon.icon ?: ""
|
||||
pic2 = roomIcon.icon ?: ""
|
||||
skipContent = roomIcon.skipContent ?: ""
|
||||
ruleValue = roomIcon.ruleValue ?: ""
|
||||
code = roomIcon.code ?: ""
|
||||
showType = roomIcon.showType ?: 0
|
||||
}
|
||||
newData.add(gameInfo)
|
||||
}
|
||||
return newData
|
||||
}
|
||||
@@ -251,7 +263,11 @@ class RoomGameListDialog :
|
||||
getString(R.string.room_switch_game_tips)
|
||||
) {
|
||||
|
||||
if (gameInfo.mgId.isNotEmpty()) {
|
||||
if (gameInfo.isFindLove()) {
|
||||
jumpFindLove()
|
||||
}else if (gameInfo.isLeadercc()) {
|
||||
jumpLeaderccGame(gameInfo)
|
||||
} else if (gameInfo.mgId?.isNotEmpty() == true) {
|
||||
if (gameInfo.isStandardRoom()) {
|
||||
OpenRoomHelper.updateRoomInfo(
|
||||
activity as BaseActivity,
|
||||
@@ -269,18 +285,39 @@ class RoomGameListDialog :
|
||||
false
|
||||
)
|
||||
}
|
||||
}else if(!gameInfo.skipContent.isNullOrEmpty() || !gameInfo.ruleValue.isNullOrEmpty()){
|
||||
if (gameInfo.isFindLove()) {
|
||||
jumpFindLove()
|
||||
} else {
|
||||
jumpBaiShunGame(gameInfo)
|
||||
}
|
||||
}else {
|
||||
jumpBaiShunGame(gameInfo)
|
||||
}
|
||||
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
}
|
||||
|
||||
private fun jumpLeaderccGame(data: GameInfo) {
|
||||
try {
|
||||
val url = data.skipContent
|
||||
val ruleValue = Gson().fromJson<RoomIcon.RuleValueBean>(
|
||||
data.ruleValue,
|
||||
RoomIcon.RuleValueBean::class.java
|
||||
)
|
||||
val config = Gson().fromJson<BaiShunGameConfig>(
|
||||
ruleValue.RESERVE,
|
||||
BaiShunGameConfig::class.java
|
||||
)
|
||||
|
||||
if (config != null && url != null) {
|
||||
config.reloadDynamicParams()
|
||||
config.showType = data.showType
|
||||
listener?.onShowLeaderccGame(url, config)
|
||||
} else {
|
||||
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
|
||||
}
|
||||
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
private fun jumpBaiShunGame(data: GameInfo) {
|
||||
try {
|
||||
val url = data.skipContent
|
||||
@@ -341,5 +378,6 @@ class RoomGameListDialog :
|
||||
|
||||
interface GameplayDialogListener {
|
||||
fun onShowBaiShunGame(url: String, config: BaiShunGameConfig)
|
||||
fun onShowLeaderccGame(url: String, config: BaiShunGameConfig)
|
||||
}
|
||||
}
|
||||
@@ -837,10 +837,14 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
|
||||
R.id.iv_game -> {
|
||||
val dialog = RoomGameListDialog();
|
||||
dialog.code = hashCode()
|
||||
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
|
||||
dialog.listener = object : RoomGameListDialog.GameplayDialogListener {
|
||||
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
|
||||
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
|
||||
}
|
||||
|
||||
override fun onShowLeaderccGame(url: String, config: BaiShunGameConfig) {
|
||||
(activity as? AVRoomActivity)?.showLeaderccGame(url, config)
|
||||
}
|
||||
}
|
||||
dialog.show(childFragmentManager, "GAME_LIST")
|
||||
}
|
||||
@@ -1686,7 +1690,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
|
||||
}
|
||||
|
||||
if (configModel.icon2Url != null) {
|
||||
ImageLoadUtils.loadAvatar(configModel.icon2Url, btnIvgame)
|
||||
ImageLoadUtils.loadImage( btnIvgame,configModel.icon2Url)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ class MeGameAdapter :
|
||||
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_me_game) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: GameInfo) {
|
||||
helper.getView<ImageView>(R.id.iv_pic).load(item.pic)
|
||||
helper.setText(R.id.tv_name, item.name)
|
||||
helper.getView<ImageView>(R.id.iv_pic).load(item.pic?:"")
|
||||
helper.setText(R.id.tv_name, item.name?:"")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -289,9 +289,6 @@ public class RouterHandler {
|
||||
case RouterType.MY_SET:
|
||||
UIHelper.showSettingAct(context);
|
||||
break;
|
||||
case RouterType.MY_VIP_SET:
|
||||
VipSetActivity.Companion.start(context);
|
||||
break;
|
||||
case RouterType.MY_REVENUE:
|
||||
EarnRecordActivity.start(context);
|
||||
break;
|
||||
|
||||
@@ -80,6 +80,7 @@ class SettingActivity : BaseViewBindingActivity<ActivitySettingBinding>(), View.
|
||||
binding.tvCommunityNorms.setOnClickListener(this)
|
||||
binding.rlyClearCache.setOnClickListener(this)
|
||||
binding.tvNoticeSetting.setOnClickListener(this)
|
||||
binding.tvVipSetting.setOnClickListener(this)
|
||||
binding.tvShieldManager.setOnClickListener(this)
|
||||
binding.rlyPermission.setOnClickListener(this)
|
||||
binding.tvLanugage.setOnClickListener(this)
|
||||
@@ -174,7 +175,7 @@ class SettingActivity : BaseViewBindingActivity<ActivitySettingBinding>(), View.
|
||||
clearCache()
|
||||
}
|
||||
})
|
||||
|
||||
R.id.tv_vip_setting -> VipSetActivity.start(context);
|
||||
R.id.tv_notice_setting -> NoticeSettingActivity.start(context)
|
||||
R.id.tv_shield_manager -> ShieldManageActivity.start(context)
|
||||
R.id.rly_permission -> PermissionGuideActivity.start(context)
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.chwl.library.utils.SingleToastUtil
|
||||
import com.example.lib_utils.ktx.getDimension
|
||||
import com.example.lib_utils.log.ILog
|
||||
import com.google.gson.JsonElement
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
import io.reactivex.Single
|
||||
import retrofit2.http.GET
|
||||
@@ -43,26 +44,26 @@ class VipSetActivity : BaseViewBindingActivity<VipSetActivityBinding>(), ILog, V
|
||||
initTitleBar(ResUtil.getString(R.string.vipSetTitle))
|
||||
|
||||
initVipIcons(binding.vipSetIcons1
|
||||
, R.drawable.vip_center_identification_vipidentity_lv5
|
||||
, R.drawable.vip_center_identification_vipidentity_lv6
|
||||
, R.drawable.vip_center_identification_vipidentity_lv7
|
||||
, R.drawable.vip_center_identification_vipidentity_lv8
|
||||
, R.drawable.vip_center_identification_vipidentity_lv9
|
||||
, R.drawable.vip_icon_lv5
|
||||
, R.drawable.vip_icon_lv6
|
||||
, R.drawable.vip_icon_lv7
|
||||
, R.drawable.vip_icon_lv8
|
||||
, R.drawable.vip_icon_lv9
|
||||
)
|
||||
initVipIcons(binding.vipSetIcons2
|
||||
, R.drawable.vip_center_identification_vipidentity_lv6
|
||||
, R.drawable.vip_center_identification_vipidentity_lv7
|
||||
, R.drawable.vip_center_identification_vipidentity_lv8
|
||||
, R.drawable.vip_center_identification_vipidentity_lv9
|
||||
, R.drawable.vip_icon_lv6
|
||||
, R.drawable.vip_icon_lv7
|
||||
, R.drawable.vip_icon_lv8
|
||||
, R.drawable.vip_icon_lv9
|
||||
)
|
||||
initVipIcons(binding.vipSetIcons3
|
||||
, R.drawable.vip_center_identification_vipidentity_lv7
|
||||
, R.drawable.vip_center_identification_vipidentity_lv8
|
||||
, R.drawable.vip_center_identification_vipidentity_lv9
|
||||
, R.drawable.vip_icon_lv7
|
||||
, R.drawable.vip_icon_lv8
|
||||
, R.drawable.vip_icon_lv9
|
||||
)
|
||||
initVipIcons(binding.vipSetIcons4
|
||||
, R.drawable.vip_center_identification_vipidentity_lv8
|
||||
, R.drawable.vip_center_identification_vipidentity_lv9
|
||||
, R.drawable.vip_icon_lv8
|
||||
, R.drawable.vip_icon_lv9
|
||||
)
|
||||
|
||||
UserModel.get().getUserInfo(AuthModel.get().currentUid)
|
||||
@@ -110,7 +111,9 @@ class VipSetActivity : BaseViewBindingActivity<VipSetActivityBinding>(), ILog, V
|
||||
setSwitchView(view,!value)
|
||||
}
|
||||
.doOnError {
|
||||
|
||||
it?.message?.let {
|
||||
ToastUtils.show(it)
|
||||
}
|
||||
}
|
||||
.compose(bindToLifecycle())
|
||||
.subscribe()
|
||||
|
||||
@@ -190,9 +190,6 @@ public class CommonWebViewActivity extends BaseActivity {
|
||||
webView.getSettings().setUseWideViewPort(true);
|
||||
webView.getSettings().setLoadWithOverviewMode(true);
|
||||
webView.getSettings().setDomStorageEnabled(true);
|
||||
webView.getSettings().setDatabaseEnabled(true); //新接入h5游戏需要的设置
|
||||
webView.getSettings().setMediaPlaybackRequiresUserGesture(false); //新接入h5游戏需要的设置
|
||||
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); //新接入h5游戏需要的设置
|
||||
// 设置 WebView 可以在 HTTPS 通道上加载 HTTP 资源,Android 4.4 后的暗坑
|
||||
// 因为 Android 4.4 后默认不允许在 HTTPS 通道上加载 HTTP 资源
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
|
||||
@@ -0,0 +1,287 @@
|
||||
package com.chwl.app.ui.webview.baishun
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.graphics.Bitmap
|
||||
import android.net.http.SslError
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.webkit.SslErrorHandler
|
||||
import android.webkit.WebResourceError
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebSettings
|
||||
import android.webkit.WebView
|
||||
import android.webkit.WebViewClient
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseViewBindingFragment
|
||||
import com.chwl.app.common.widget.dialog.DialogManager
|
||||
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
|
||||
import com.chwl.app.databinding.RoomGameFragmentBinding
|
||||
import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.pay.event.GetWalletInfoEvent
|
||||
import com.chwl.core.pay.event.UpdateWalletInfoEvent
|
||||
import com.chwl.core.room.game.bean.BaiShunGameConfig
|
||||
import com.chwl.library.common.util.ClickUtils.click
|
||||
import com.chwl.library.common.util.setViewWH
|
||||
import com.chwl.library.common.util.setVis
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.ScreenUtils
|
||||
import com.google.gson.Gson
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
class LeaderccGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>(),
|
||||
IBaiShunGameView {
|
||||
|
||||
private var gameConfig: BaiShunGameConfig? = null
|
||||
|
||||
private var gameUrl = ""
|
||||
|
||||
private var isLoadError = false
|
||||
|
||||
private var listener: IBaiShunGameListener? = null
|
||||
|
||||
var leaderccJSBridge : LeaderccJSBridge? = null
|
||||
|
||||
companion object {
|
||||
fun newInstance(
|
||||
url: String,
|
||||
config: BaiShunGameConfig
|
||||
): LeaderccGameWebFragment {
|
||||
val bundle = Bundle()
|
||||
bundle.putString("url", url)
|
||||
bundle.putSerializable("config", config)
|
||||
return LeaderccGameWebFragment().apply {
|
||||
arguments = bundle
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun init() {
|
||||
val url = arguments?.getString("url")
|
||||
gameConfig = arguments?.getSerializable("config") as? BaiShunGameConfig
|
||||
if (url.isNullOrEmpty() || gameConfig == null) {
|
||||
toast(R.string.utils_net_beanobserver_05)
|
||||
return
|
||||
}
|
||||
gameUrl = url
|
||||
initView()
|
||||
binding.webView.isInvisible = true
|
||||
binding.webView.loadUrl(url)
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
initWebView()
|
||||
}
|
||||
|
||||
@SuppressLint("SetJavaScriptEnabled", "JavascriptInterface")
|
||||
private fun initWebView() {
|
||||
//防⽌⽤浏览器打开⽹⻚
|
||||
binding.webView.webViewClient = object : WebViewClient() {
|
||||
|
||||
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
|
||||
super.onPageStarted(view, url, favicon)
|
||||
isLoadError = false
|
||||
if (url == gameUrl) {
|
||||
dialogManager.showProgressDialog(requireContext())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onReceivedError(
|
||||
view: WebView?,
|
||||
errorCode: Int,
|
||||
description: String?,
|
||||
failingUrl: String?
|
||||
) {
|
||||
super.onReceivedError(view, errorCode, description, failingUrl)
|
||||
isLoadError = true
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
onReceivedError(failingUrl, errorCode, description)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onReceivedError(
|
||||
view: WebView?,
|
||||
request: WebResourceRequest?,
|
||||
error: WebResourceError?
|
||||
) {
|
||||
super.onReceivedError(view, request, error)
|
||||
isLoadError = true
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
onReceivedError(request?.url?.toString(), error?.errorCode, error?.description)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPageFinished(view: WebView?, url: String?) {
|
||||
super.onPageFinished(view, url)
|
||||
if (!isLoadError) {
|
||||
binding.webView.isVisible = true
|
||||
}
|
||||
}
|
||||
|
||||
override fun onReceivedSslError(
|
||||
view: WebView,
|
||||
handler: SslErrorHandler,
|
||||
error: SslError?
|
||||
) {
|
||||
// super.onReceivedSslError(view, handler, error);
|
||||
val builder = AlertDialog.Builder(view.context)
|
||||
builder.setMessage(ResUtil.getString(R.string.ui_webview_commonwebviewactivity_07))
|
||||
builder.setPositiveButton(
|
||||
ResUtil.getString(R.string.ui_webview_commonwebviewactivity_08)
|
||||
) { dialog, which ->
|
||||
handler.proceed() // 接受https所有网站的证书
|
||||
}
|
||||
builder.setNegativeButton(
|
||||
ResUtil.getString(R.string.ui_webview_commonwebviewactivity_09)
|
||||
) { dialog, which -> handler.cancel() }
|
||||
val dialog = builder.create()
|
||||
dialog.show()
|
||||
}
|
||||
}
|
||||
//设置webview背景透明,默认为⽩⾊
|
||||
binding.webView.setBackgroundColor(0)
|
||||
//设置view背景透明,默认为⽩⾊ 可选(单独activity添加webView组件时需要添加)
|
||||
binding.root.setBackgroundColor(0)
|
||||
|
||||
val settings = binding.webView.settings
|
||||
//设置⽀持Javascript
|
||||
settings.javaScriptEnabled = true
|
||||
//设置默认⽂本编码
|
||||
settings.defaultTextEncodingName = "UTF-8"
|
||||
//设置可访问本地⽂件
|
||||
settings.allowFileAccess = true
|
||||
//设置允许通过file url加载的Javascript读取全部资源(包括⽂件,http,https)
|
||||
settings.allowUniversalAccessFromFileURLs = true
|
||||
//设置优先加载缓存
|
||||
settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
|
||||
//设置启⽤HTML5 DOM storage
|
||||
settings.domStorageEnabled = true
|
||||
//设置开启数据库缓存
|
||||
settings.databaseEnabled = true
|
||||
settings.databasePath = (requireContext().applicationContext.filesDir.absolutePath)
|
||||
//设置⽀持缩放
|
||||
settings.setSupportZoom(true)
|
||||
//设置⾃适应
|
||||
settings.useWideViewPort = true
|
||||
//设置⾃动播放媒体
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
settings.mediaPlaybackRequiresUserGesture = false
|
||||
}
|
||||
//设置5.0以上允许加载http和https混合的⻚⾯
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
|
||||
}
|
||||
|
||||
//游戏调⽤的类,必须定义为 LingxianAndroid
|
||||
leaderccJSBridge = LeaderccJSBridge(this)
|
||||
binding.webView.addJavascriptInterface(leaderccJSBridge!!, "LingxianAndroid")
|
||||
|
||||
if (gameConfig?.showType == 2){
|
||||
binding.webView.post {
|
||||
binding.bg.setVis(true)
|
||||
binding.bg.click {
|
||||
leaderccJSBridge?.closeGame()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
binding.webView.postDelayed({ dialogManager?.dismissDialog() }, 2000)
|
||||
}
|
||||
|
||||
override fun callJs(str: String) {
|
||||
binding.webView.post {
|
||||
binding.webView.loadUrl("javascript:$str")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onWalletInfoUpdate(event: UpdateWalletInfoEvent?) {
|
||||
updateGameWallet()
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onGetWalletInfoEvent(event: GetWalletInfoEvent?) {
|
||||
updateGameWallet()
|
||||
}
|
||||
|
||||
private fun updateGameWallet() {
|
||||
try {
|
||||
//数据只是参考值,需要根据⾃⼰APP进⾏赋值
|
||||
val map = HashMap<String, Any>()
|
||||
map["userId"] = AuthModel.get().currentUid
|
||||
val str = "walletUpdate" + "(" + Gson().toJson(map) + ")"
|
||||
this.callJs(str)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
override fun getGameConfig() = gameConfig
|
||||
|
||||
override fun getListener(): IBaiShunGameListener? {
|
||||
return listener
|
||||
}
|
||||
|
||||
fun setListener(listener: IBaiShunGameListener) {
|
||||
this.listener = listener
|
||||
}
|
||||
|
||||
override fun getActivity2(): Activity? {
|
||||
return activity
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
leaderccJSBridge?.updateCoin()
|
||||
}
|
||||
|
||||
override fun getDialogManager2(): DialogManager {
|
||||
return super.getDialogManager()
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
private fun onReceivedError(url: String?, code: Int?, message: CharSequence?) {
|
||||
if (url == gameUrl) {
|
||||
binding.webView.isInvisible = true
|
||||
dialogManager.dismissDialog()
|
||||
showLoadErrorDialog(message?.toString() ?: "($code)")
|
||||
}
|
||||
}
|
||||
|
||||
private fun showLoadErrorDialog(message: String) {
|
||||
dialogManager.showOkCancelDialog(
|
||||
getString(R.string.load_failed),
|
||||
message,
|
||||
getString(R.string.retry),
|
||||
getString(R.string.exit_text),
|
||||
false, false, true, object : OkCancelDialogListener {
|
||||
override fun onOk() {
|
||||
binding.webView.reload()
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
super.onCancel()
|
||||
listener?.onGameClose()
|
||||
}
|
||||
}, null, false
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.chwl.app.ui.webview.baishun
|
||||
|
||||
import android.webkit.JavascriptInterface
|
||||
import androidx.annotation.Keep
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
|
||||
import com.chwl.app.common.widget.dialog.DialogUiHelper
|
||||
import com.chwl.app.ui.pay.ChargeActivity
|
||||
import com.example.lib_utils.ktx.getString
|
||||
import com.example.lib_utils.log.ILog
|
||||
import com.google.gson.Gson
|
||||
import org.json.JSONObject
|
||||
|
||||
|
||||
@Keep
|
||||
class LeaderccJSBridge(var view: IBaiShunGameView) : ILog {
|
||||
|
||||
@JavascriptInterface
|
||||
public fun updateCoin() {
|
||||
logD("游戏调⽤ updateCoin()")
|
||||
try {
|
||||
// val obj = JSONObject()
|
||||
// val jsFunName = obj.optString("updateCoin")
|
||||
// val config = view.getGameConfig()
|
||||
// val str = (jsFunName + "(" + Gson().toJson(config) + ")")
|
||||
// callJs(str)
|
||||
|
||||
val obj = JSONObject()
|
||||
val jsFunName = obj.optString("updateCoin()")
|
||||
callJs(jsFunName)
|
||||
} catch (ex: Exception) {
|
||||
ex.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public fun closeGame() {
|
||||
logD("游戏调⽤ closeGame")
|
||||
view.getActivity2()?.runOnUiThread {
|
||||
showExitDialog()
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public fun pay() {
|
||||
logD("游戏调⽤ pay")
|
||||
view.getActivity2()?.runOnUiThread {
|
||||
DialogUiHelper.showNeedCharge(view.getActivity2(), view.getDialogManager2())
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
private fun callJs(str: String) {
|
||||
view.callJs(str)
|
||||
}
|
||||
|
||||
private fun showExitDialog() {
|
||||
view.getDialogManager2().showOkCancelDialog(
|
||||
R.string.tip_tips.getString(),
|
||||
R.string.home_refresh_fungameview_01.getString(),
|
||||
R.string.exit_text.getString(),
|
||||
R.string.cancel.getString(),
|
||||
false, false, true, object : OkCancelDialogListener {
|
||||
override fun onOk() {
|
||||
super.onCancel()
|
||||
view?.getListener()?.onGameClose()
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
}
|
||||
}, null, false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 6.3 KiB |
BIN
app/src/main/res/drawable-xxhdpi/vip_icon_lv5.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/drawable-xxhdpi/vip_icon_lv6.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
app/src/main/res/drawable-xxhdpi/vip_icon_lv7.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
app/src/main/res/drawable-xxhdpi/vip_icon_lv8.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
app/src/main/res/drawable-xxhdpi/vip_icon_lv9.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
@@ -138,6 +138,23 @@
|
||||
android:layout_marginEnd="15dp"
|
||||
android:background="@color/line_353548" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_vip_setting"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_setting_item_height"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingStart="@dimen/dp_15"
|
||||
android:paddingEnd="@dimen/dp_15"
|
||||
android:text="@string/vipSet"
|
||||
android:textColor="@color/text_title_color"
|
||||
android:textSize="@dimen/sp_14"
|
||||
app:drawableEndCompat="@drawable/arrow_right" /> <View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:layout_marginStart="@dimen/dp_15"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:background="@color/line_353548" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_notice_setting"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -1,10 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<View
|
||||
android:id="@+id/bg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:visibility="gone"
|
||||
android:background="@color/transparent"
|
||||
android:layout_weight="1"/>
|
||||
<WebView
|
||||
android:id="@+id/webView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="2"/>
|
||||
</LinearLayout>
|
||||
@@ -5400,6 +5400,8 @@ You cannot join again within 24 hours after leaving</string>
|
||||
<string name="avatar1">静态头像</string>
|
||||
<string name="avatar2">GIF头像</string>
|
||||
|
||||
<string name="vipSet">Vip设置</string>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 11 KiB |
@@ -12,6 +12,7 @@ import lombok.ToString;
|
||||
|
||||
/**
|
||||
* Created by Administrator on 2017/8/7.
|
||||
* banner跳转type
|
||||
*/
|
||||
@ToString
|
||||
@Data
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.chwl.core.im.custom.bean;
|
||||
|
||||
/**
|
||||
* Created by MadisonRong on 08/06/2018.
|
||||
* MeFragment跳转type
|
||||
*/
|
||||
|
||||
public class RouterType {
|
||||
@@ -229,10 +230,6 @@ public class RouterType {
|
||||
*/
|
||||
public static final int MY_DRESS_ITEM = 79;
|
||||
|
||||
/**
|
||||
* - Vip设置 todo do 等恒哥给 正式 type
|
||||
*/
|
||||
public static final int MY_VIP_SET = 80;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,6 +20,7 @@ class BaiShunGameConfig : Serializable {
|
||||
var language: String? = null
|
||||
val gameConfig: Config? = null
|
||||
val gsp: Int? = null
|
||||
var showType: Int? = null
|
||||
|
||||
@Keep
|
||||
class Config : Serializable {
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.chwl.core.room.game.bean;
|
||||
|
||||
public class GameInfo {
|
||||
|
||||
public boolean isShow;
|
||||
public String mgId="";
|
||||
public String name="";
|
||||
public String pic="";
|
||||
public String pic2="";
|
||||
public String remark="";
|
||||
public int seq;
|
||||
public int showType;
|
||||
public boolean isSelect;
|
||||
public String skipContent="";
|
||||
public String ruleValue="";
|
||||
public boolean isStandardRoom;// 本地自己维护的,为了区分普通房
|
||||
public String code="";
|
||||
|
||||
|
||||
public boolean isStandardRoom() {
|
||||
return this.isStandardRoom;
|
||||
}
|
||||
|
||||
|
||||
public boolean isFirstCharge() {
|
||||
return code.equals("FIRST_CHARGE");
|
||||
}
|
||||
|
||||
public boolean isSeizeTreasure() {
|
||||
return code.equals("SEIZE_TREASURE");
|
||||
}
|
||||
|
||||
public boolean isFindLove() {
|
||||
return code.equals("FIND_LOVE");
|
||||
}
|
||||
|
||||
public boolean isLeadercc() {
|
||||
return code.equals("LEADERCC");
|
||||
}
|
||||
|
||||
public boolean isNauticalAdventure() {
|
||||
return code.equals("NAUTICAL_ADVENTURE");
|
||||
}
|
||||
|
||||
public boolean isBaiShunGame() {
|
||||
return code.equals("BAISHUN");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package com.chwl.core.room.game.bean
|
||||
|
||||
import java.io.Serializable
|
||||
|
||||
data class GameInfo(
|
||||
val isShow: Boolean = false,
|
||||
val mgId: String = "",
|
||||
var name: String = "",
|
||||
val pic: String = "",
|
||||
val pic2: String? = null,
|
||||
val remark: String = "",
|
||||
val seq: Int = 0,
|
||||
var isSelect: Boolean = false,
|
||||
val skipContent : String = "",
|
||||
val ruleValue : String = "",
|
||||
// 本地自己维护的,为了区分普通房
|
||||
private var isStandardRoom: Boolean? = null,
|
||||
var code: String? = "",
|
||||
) : Serializable {
|
||||
fun isStandardRoom() = isStandardRoom == true
|
||||
|
||||
fun asStandardRoom() {
|
||||
isStandardRoom = true
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "GameInfo(isShow=$isShow, mgId='$mgId', name='$name', pic='$pic', pic2=$pic2, remark='$remark', seq=$seq, isSelect=$isSelect, skipContent='$skipContent', ruleValue='$ruleValue', isStandardRoom=$isStandardRoom)"
|
||||
}
|
||||
|
||||
|
||||
fun isFirstCharge(): Boolean = code == "FIRST_CHARGE"
|
||||
fun isSeizeTreasure(): Boolean = code == "SEIZE_TREASURE"
|
||||
fun isFindLove(): Boolean = code == "FIND_LOVE"
|
||||
fun isLeadercc(): Boolean = code == "LEADERCC"
|
||||
fun isNauticalAdventure(): Boolean = code == "NAUTICAL_ADVENTURE"
|
||||
fun isBaiShunGame() = code == "BAISHUN"
|
||||
}
|
||||
@@ -64,6 +64,19 @@ object LanguageHelper : ILog {
|
||||
}
|
||||
}
|
||||
|
||||
fun getH5GameLeaderccLan(): String {
|
||||
val locale = getCurrentLanguage()
|
||||
return if (locale == Locale.ENGLISH) {
|
||||
"en-Us"
|
||||
} else if (locale == Locale.TRADITIONAL_CHINESE) {
|
||||
"zh-Tw"
|
||||
} else if (locale.language.equals("ar", true)) {
|
||||
return "ar-EG"
|
||||
} else {
|
||||
"en-Us"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取Locale
|
||||
* @param language (四端一致的类型)
|
||||
|
||||
166
mode.json
@@ -1,92 +1,80 @@
|
||||
{
|
||||
"contents": [
|
||||
{
|
||||
"height": 20,
|
||||
"image": "https://img.molistar.xyz/default_avatar_molistar.png",
|
||||
"key": "avatar",
|
||||
"type": "IMAGE",
|
||||
"width": 20
|
||||
},
|
||||
{
|
||||
"key": "nick",
|
||||
"text": {
|
||||
"ar": "英文区",
|
||||
"en": "英文区",
|
||||
"zh": "英文区"
|
||||
[
|
||||
{
|
||||
"baiShunGame": true,
|
||||
"code": "BAISHUN",
|
||||
"createTime": "2024-07-29 15:14:21",
|
||||
"findLove": false,
|
||||
"firstCharge": false,
|
||||
"icon": "https://image.pekolive.com/DragonTiger.png",
|
||||
"id": 120,
|
||||
"leadercc": false,
|
||||
"name": "DragonTiger",
|
||||
"nauticalAdventure": false,
|
||||
"ruleValue": {
|
||||
"PLATFORM": "",
|
||||
"IOS_LOW_VERSION": "",
|
||||
"ANDROID_LOW_VERSION": "",
|
||||
"USER_PHONE": "",
|
||||
"RESERVE": {
|
||||
"appChannel": "molistar",
|
||||
"appId": 9498014797,
|
||||
"code": "5f41ff10-af28-4b2b-a649-07fc3b239a3b",
|
||||
"gameConfig": {
|
||||
"currencyIcon": "https://image.molistar.xyz/ic_gold.png",
|
||||
"sceneMode": 1
|
||||
},
|
||||
"gameMode": "2",
|
||||
"gsp": 101
|
||||
},
|
||||
"textColor": "#FEF23E",
|
||||
"type": "TEXT"
|
||||
"NOT_CHANNELS": "",
|
||||
"ANDROID_HIGH_VERSION": "",
|
||||
"IOS_HIGH_VERSION": "",
|
||||
"USER_LEVEL": ""
|
||||
},
|
||||
{
|
||||
"height": 20,
|
||||
"image": "https://image.pekolive.com/Lucky77.png",
|
||||
"key": "gameIcon",
|
||||
"type": "IMAGE",
|
||||
"width": 20
|
||||
},
|
||||
{
|
||||
"key": "diamondNum",
|
||||
"text": {
|
||||
"ar": "60000",
|
||||
"en": "60000",
|
||||
"zh": "60000"
|
||||
},
|
||||
"textColor": "#00EAFF",
|
||||
"type": "TEXT"
|
||||
}
|
||||
],
|
||||
"dimensionRatio": "375:60",
|
||||
"fontSize": 12,
|
||||
"nodeList": [
|
||||
{
|
||||
"content": {
|
||||
"$ref": "$.contents[2]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": " ",
|
||||
"textColor": "#FFFFFF"
|
||||
},
|
||||
{
|
||||
"content": {
|
||||
"$ref": "$.contents[0]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": " ",
|
||||
"textColor": "#FFFFFF"
|
||||
},
|
||||
{
|
||||
"content": {
|
||||
"$ref": "$.contents[1]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": " Win ",
|
||||
"textColor": "#FFFFFF"
|
||||
},
|
||||
{
|
||||
"content": {
|
||||
"$ref": "$.contents[3]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": " Coins",
|
||||
"textColor": "#FFFFFF"
|
||||
}
|
||||
],
|
||||
"partitionId": 1,
|
||||
"resourceContent": "https://image.molistar.xyz/mini_game_floating_2.svga",
|
||||
"resourceHeight": 60,
|
||||
"resourceType": "SVGA",
|
||||
"resourceWidth": 375,
|
||||
"skipContent": "136",
|
||||
"skipType": 7,
|
||||
"svgaTextKey": "noble_text_tx",
|
||||
"template": {
|
||||
"ar": "{gameIcon} {avatar} {nick} Win {diamondNum} Coins",
|
||||
"en": "{gameIcon} {avatar} {nick} Win {diamondNum} Coins",
|
||||
"zh": "{gameIcon} {avatar} {nick} Win {diamondNum} Coins"
|
||||
"seizeTreasure": false,
|
||||
"seqNo": 0,
|
||||
"showType": 2,
|
||||
"skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/dragon-tiger/1.0.3/web-mobile/index.html",
|
||||
"skipType": 3,
|
||||
"skipUri": "https://game-center-test.jieyou.shop/game-packages/common-web/dragon-tiger/1.0.3/web-mobile/index.html",
|
||||
"type": 3,
|
||||
"updateTime": "2024-07-29 16:09:39"
|
||||
},
|
||||
"textColor": "#FFFFFF"
|
||||
}
|
||||
{
|
||||
"baiShunGame": false,
|
||||
"code": "LEADERCC",
|
||||
"createTime": "2024-10-21 15:21:06",
|
||||
"endTime": "2025-10-30 00:00:00",
|
||||
"findLove": false,
|
||||
"firstCharge": false,
|
||||
"icon": "https://image.pekolive.com/luck5y.png",
|
||||
"id": 138,
|
||||
"leadercc": true,
|
||||
"name": "Lucky Wheel",
|
||||
"nauticalAdventure": false,
|
||||
"ruleValue": {
|
||||
"PLATFORM": "",
|
||||
"IOS_LOW_VERSION": "",
|
||||
"ANDROID_LOW_VERSION": "",
|
||||
"USER_PHONE": "",
|
||||
"RESERVE": {
|
||||
"appChannel": "molistar",
|
||||
"appId": 123456,
|
||||
"code": "c5f9a679-a180-488d-8ea7-827eaee08396"
|
||||
},
|
||||
"NOT_CHANNELS": "",
|
||||
"ANDROID_HIGH_VERSION": "",
|
||||
"IOS_HIGH_VERSION": "",
|
||||
"USER_LEVEL": ""
|
||||
},
|
||||
"seizeTreasure": false,
|
||||
"seqNo": 1,
|
||||
"showType": 2,
|
||||
"skipContent": "https://gztest.leadercc.com/molistar_games/wheel_medium/index.html?pl=molistar",
|
||||
"skipType": 3,
|
||||
"skipUri": "https://gztest.leadercc.com/molistar_games/wheel_medium/index.html?pl=molistar",
|
||||
"startTime": "2024-10-20 00:00:00",
|
||||
"type": 3,
|
||||
"updateTime": "2024-10-22 16:05:25"
|
||||
}
|
||||
]
|
||||
|
||||