添加推送

This commit is contained in:
wangyu 2026-01-26 15:18:49 +08:00
parent 30eabe1f42
commit a2ad52a560
17 changed files with 263 additions and 47 deletions

View File

@ -0,0 +1 @@
{"agcgw":{"url":"connect-drcn.dbankcloud.cn","backurl":"connect-drcn.hispace.hicloud.com","websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn","websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com"},"agcgw_all":{"SG":"connect-dra.dbankcloud.cn","SG_back":"connect-dra.hispace.hicloud.com","CN":"connect-drcn.dbankcloud.cn","CN_back":"connect-drcn.hispace.hicloud.com","RU":"connect-drru.hispace.dbankcloud.ru","RU_back":"connect-drru.hispace.dbankcloud.cn","DE":"connect-dre.dbankcloud.cn","DE_back":"connect-dre.hispace.hicloud.com"},"websocketgw_all":{"SG":"connect-ws-dra.hispace.dbankcloud.cn","SG_back":"connect-ws-dra.hispace.dbankcloud.com","CN":"connect-ws-drcn.hispace.dbankcloud.cn","CN_back":"connect-ws-drcn.hispace.dbankcloud.com","RU":"connect-ws-drru.hispace.dbankcloud.ru","RU_back":"connect-ws-drru.hispace.dbankcloud.cn","DE":"connect-ws-dre.hispace.dbankcloud.cn","DE_back":"connect-ws-dre.hispace.dbankcloud.com"},"client":{"cp_id":"10086000857368069","product_id":"461323198430317227","client_id":"1767315365546720896","client_secret":"E850E689CE235C825BECC77648A7183C12B83DED658DB9299DE327BDBA8371C2","project_id":"461323198430317227","app_id":"116691541","api_key":"DgEDAFb9kA1N7as7xG6yopyuQl8jtjXgqaU8CTZ8royzaRgSWCFIvzAyo7PrRwF3DGbHZ3+Mf5KH7m6Un16Rs+MB5xkbUwj+B4qn/Q==","package_name":"com.cheng.BoLe"},"oauth_client":{"client_id":"116691541","client_type":1},"app_info":{"app_id":"116691541","package_name":"com.cheng.BoLe"},"service":{"analytics":{"collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn","collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn","collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn","collector_url_ru":"datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com","collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn","resource_id":"p1","channel_id":""},"ml":{"mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"},"cloudstorage":{"storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn","storage_url_ru":"https://agc-storage-drru.cloud.huawei.ru","storage_url_sg":"https://ops-dra.agcstorage.link","storage_url_de":"https://ops-dre.agcstorage.link","storage_url_cn":"https://agc-storage-drcn.platform.dbankcloud.cn","storage_url_ru_back":"https://agc-storage-drru.cloud.huawei.ru","storage_url_sg_back":"https://agc-storage-dra.cloud.huawei.asia","storage_url_de_back":"https://agc-storage-dre.cloud.huawei.eu","storage_url_cn_back":"https://agc-storage-drcn.cloud.huawei.com.cn"},"search":{"url":"https://search-drcn.cloud.huawei.com"},"edukit":{"edu_url":"edukit.cloud.huawei.com.cn","dh_url":"edukit.cloud.huawei.com.cn"}},"region":"CN","configuration_version":"3.0","appInfos":[{"package_name":"com.cheng.BoLe","client":{"app_id":"116691541"},"app_info":{"package_name":"com.cheng.BoLe","app_id":"116691541"},"oauth_client":{"client_type":1,"client_id":"116691541"}},{"package_name":"cn.zuom8.jisuloca","client":{"app_id":"116209939"},"app_info":{"package_name":"cn.zuom8.jisuloca","app_id":"116209939"},"oauth_client":{"client_type":1,"client_id":"116209939"}},{"package_name":"cn.zuom8.smartdrive","client":{"app_id":"115184955"},"app_info":{"package_name":"cn.zuom8.smartdrive","app_id":"115184955"},"oauth_client":{"client_type":1,"client_id":"115184955"}}]}

View File

@ -3,6 +3,7 @@ plugins {
alias(libs.plugins.jetbrainsKotlinAndroid) alias(libs.plugins.jetbrainsKotlinAndroid)
id 'kotlin-kapt' id 'kotlin-kapt'
id 'kotlin-parcelize' id 'kotlin-parcelize'
id 'com.huawei.agconnect'
} }
android { android {
@ -59,6 +60,23 @@ android {
manifestPlaceholders = [ manifestPlaceholders = [
GETUI_APPID : "ej3hUPd0LR8G1CzkNtyZS3", GETUI_APPID : "ej3hUPd0LR8G1CzkNtyZS3",
GT_INSTALL_CHANNEL: "test", GT_INSTALL_CHANNEL: "test",
//
HUAWEI_APP_ID : "116691541",
//
XIAOMI_APP_ID : "2882303761520492130",
XIAOMI_APP_KEY : "5942049244130",
// OPPO
OPPO_APP_KEY : "14c5c2d077404b5f987e34f3d4fd2e97",
OPPO_APP_SECRET : "cfe7bd2037cf4f16aa1579ff6113d6c1",
// VIVO
VIVO_APP_ID : "106026636",
VIVO_APP_KEY : "be86ca063884357ff7eeb87a2de537d6",
// 耀
HONOR_APP_ID : "104542383"
] ]
} }
@ -163,8 +181,23 @@ dependencies {
implementation files('libs/humesdk-1.0.0.aar') // implementation files('libs/humesdk-1.0.0.aar') //
implementation 'com.getui:gysdk:3.1.7.0' //sdk implementation 'com.getui:gysdk:3.1.7.0' //sdk
implementation 'com.getui:gtsdk:3.3.8.0' // sdk
implementation 'com.getui:gtc:3.2.16.0' //sdk则保留一个最高版本即可 implementation 'com.getui:gtc:3.2.16.0' //sdk则保留一个最高版本即可
//
implementation 'com.getui.opt:hwp:3.1.2' //
implementation 'com.getui.opt:xmp:3.3.3' //
implementation 'com.assist-v3:oppo:3.5.0' // oppo
implementation 'com.assist-v3:vivo:3.2.0' // vivo
implementation 'com.getui.opt:honor:3.6.0' // 耀
//
implementation 'com.huawei.hms:push:6.11.0.300'
implementation 'com.huawei.agconnect:agconnect-core:1.9.1.300'
//耀
implementation 'com.hihonor.mcs:push:7.0.61.303'
//oppo厂商推送配置
implementation 'commons-codec:commons-codec:1.6'
// //
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+' implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'
// //

View File

@ -191,6 +191,15 @@
</activity> </activity>
<!--推送-->
<service
android:name=".service.PushMessageService"
android:exported="false"
android:label="PushService"
android:process=":pushservice" />
<service android:name=".service.PushIntentService" />
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider" android:authorities="${applicationId}.fileprovider"

View File

@ -10,6 +10,7 @@ import com.g.gysdk.GYManager
import com.g.gysdk.GYResponse import com.g.gysdk.GYResponse
import com.g.gysdk.GyCallBack import com.g.gysdk.GyCallBack
import com.g.gysdk.GyConfig import com.g.gysdk.GyConfig
import com.igexin.sdk.PushManager
import com.scwang.smart.refresh.header.MaterialHeader import com.scwang.smart.refresh.header.MaterialHeader
import com.scwang.smart.refresh.layout.SmartRefreshLayout import com.scwang.smart.refresh.layout.SmartRefreshLayout
import com.tencent.mmkv.MMKV import com.tencent.mmkv.MMKV
@ -78,6 +79,9 @@ class BaseApplication : MvvmApplication() {
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
} }
PushManager.getInstance().preInit(this)
PushManager.getInstance().initialize(this)
} }
} }

View File

@ -22,13 +22,7 @@ object NotificationHelper {
private val notificationManager by lazy { Utils.getApp().getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager } private val notificationManager by lazy { Utils.getApp().getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager }
private const val DEFAULT_CHANNEL_ID = "default" private const val DEFAULT_CHANNEL_ID = "default"
private const val DOWNLOAD_CHANNEL_ID = "download" private const val MESSAGE_CHANNEL_ID = "message"
private const val FOREGROUND_CHANNEL_ID = "foreground"
private const val DOWNLOAD_GROUP = "download_group"
private const val DOWNLOAD_CANCEL_CODE = 2000
private const val DOWNLOAD_RETRY_CODE = 3000
private var _notificationId = 1000 private var _notificationId = 1000
@ -40,17 +34,17 @@ object NotificationHelper {
} }
/** /**
* 前台通知 * 消息通知
*/ */
fun startForeground(service: Service) { fun createMessageNotification(context: Context): Notification {
val channelId = createNotificationChannel(FOREGROUND_CHANNEL_ID, "Foreground", NotificationManager.IMPORTANCE_LOW) val channelId = createNotificationChannel(MESSAGE_CHANNEL_ID, "Message", NotificationManager.IMPORTANCE_HIGH)
val builder = NotificationCompat.Builder(service, channelId) val builder = NotificationCompat.Builder(context, channelId)
val notification = builder return builder
.setContentText("文件下载服务运行中") .setContentTitle("")
.setContentText("")
.setSmallIcon(R.mipmap.ic_launcher_icon) .setSmallIcon(R.mipmap.ic_launcher_icon)
.setCategory(Notification.CATEGORY_SERVICE) .setCategory(Notification.CATEGORY_MESSAGE)
.build() .build()
service.startForeground(1, notification)
} }
/** /**
@ -69,7 +63,6 @@ object NotificationHelper {
*/ */
private fun createNotificationChannel(channelId: String, channelName: String, importance: Int): String { private fun createNotificationChannel(channelId: String, channelName: String, importance: Int): String {
val channel = NotificationChannel(channelId, channelName, importance) val channel = NotificationChannel(channelId, channelName, importance)
channel.setSound(null, null)
notificationManager.createNotificationChannel(channel) notificationManager.createNotificationChannel(channel)
return channelId return channelId
} }
@ -88,13 +81,10 @@ object NotificationHelper {
/** /**
* 通知被禁用时显示提示 * 通知被禁用时显示提示
*/ */
fun showDisabledTip(activity: Activity, fm: FragmentManager, isHomePage: Boolean = false) { fun showDisabledTip(activity: Activity, fm: FragmentManager) {
if (isHomePage) { val f = TipDialog.newInstance("请开启通知权限", "未避免错过重要消息,请在设置中打开【允许通知】", "去设置", "取消", cancelable = false)
toast("平台推送消息需要通知权限,检测到您已关闭相关权限,请前往设置手动打开")
} else {
val f = TipDialog.newInstance("请开启通知权限", "为方便查看下载进度,请在设置中打开【允许通知】")
f.setOnSelectListener { f.setOnSelectListener {
if (it == DialogEnum.CLICK_OK) { if (it == DialogEnum.CLICK_CANCEL) {
try { try {
//8.0及以上 //8.0及以上
val intent = Intent() val intent = Intent()
@ -113,5 +103,4 @@ object NotificationHelper {
} }
f.show(fm, TipDialog::class.java.simpleName) f.show(fm, TipDialog::class.java.simpleName)
} }
}
} }

View File

@ -0,0 +1,68 @@
package com.cheng.blzb.service
import android.content.Context
import android.content.Intent
import com.cheng.blzb.event.PushMessageEvent
import com.cheng.blzb.manager.UserConfigManager
import com.example.base.common.RxBus
import com.example.base.utils.L
import com.google.gson.Gson
import com.igexin.sdk.GTIntentService
import com.igexin.sdk.message.GTCmdMessage
import com.igexin.sdk.message.GTNotificationMessage
import com.igexin.sdk.message.GTTransmitMessage
import java.net.URISyntaxException
class PushIntentService : GTIntentService() {
override fun onReceiveServicePid(context: Context?, pid: Int) {}
/**
* 此方法用于接收和处理透传消息透传消息个推只传递数据不做任何处理客户端接收到透传消息后需要自己去做后续动作处理如通知栏展示弹框等
* 如果开发者在客户端将透传消息创建了通知栏展示建议将展示和点击回执上报给个推
*/
override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage) {
val payload = msg.payload
val data = String(payload)
L.d("receiver payload = $data") //透传消息文本内容
}
// 接收 cid
override fun onReceiveClientId(context: Context?, clientid: String) {
L.d("PushIntentService---onReceiveClientId -> clientid = $clientid")
UserConfigManager.saveGTCid(clientid)
}
// cid 离线上线通知
override fun onReceiveOnlineState(context: Context?, online: Boolean) {}
// 各种事件处理回执
override fun onReceiveCommandResult(context: Context?, cmdMessage: GTCmdMessage?) {}
// 通知到达,只有个推通道下发的通知会回调此方法
override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) {
L.d("PushIntentService---onNotificationMessageArrived: ${Gson().toJson(msg)}")
if (msg!!.intentUri != null) {
try {
val intent = Intent.parseUri(msg.intentUri, Intent.URI_INTENT_SCHEME)
RxBus.defaultInstance.post(PushMessageEvent(intent.getStringExtra("payload") ?: "", 2))
} catch (e: URISyntaxException) {
L.d(e)
}
}
}
// 通知点击,只有个推通道下发的通知会回调此方法
override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) {
L.d("PushIntentService---onNotificationMessageClicked: ${Gson().toJson(msg)}")
if (msg!!.intentUri != null) {
try {
val intent = Intent.parseUri(msg.intentUri, Intent.URI_INTENT_SCHEME)
startActivity(intent)
} catch (e: URISyntaxException) {
L.d(e)
}
}
}
}

View File

@ -0,0 +1,6 @@
package com.cheng.blzb.service
import com.igexin.sdk.PushService
class PushMessageService: PushService() {
}

View File

@ -28,6 +28,7 @@ import com.g.gysdk.GyCallBack
import com.g.gysdk.GyConfig import com.g.gysdk.GyConfig
import com.gyf.immersionbar.BarHide import com.gyf.immersionbar.BarHide
import com.gyf.immersionbar.ImmersionBar import com.gyf.immersionbar.ImmersionBar
import com.igexin.sdk.PushManager
import com.umeng.analytics.MobclickAgent import com.umeng.analytics.MobclickAgent
import com.umeng.commonsdk.UMConfigure import com.umeng.commonsdk.UMConfigure
import org.jetbrains.anko.startActivity import org.jetbrains.anko.startActivity
@ -170,6 +171,9 @@ class LauncherActivity : BaseActivity() {
L.d("TAG-->>GYManager ePreLogin onFailed =${gyResponse.code}") L.d("TAG-->>GYManager ePreLogin onFailed =${gyResponse.code}")
} }
}) })
PushManager.getInstance().preInit(this)
PushManager.getInstance().initialize(this)
} }
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")

View File

@ -81,7 +81,7 @@ class MyGoodsFragment: BaseFragment<FragmentMyGoodsBinding, MyGoodsViewModel>()
} }
R.id.btn_view -> { R.id.btn_view -> {
PublicActivity.start(requireActivity(), MerchantGoodsDetailFragment::class.java, Pair("item", item)) PublicActivity.start(requireActivity(), MerchantGoodsDetailFragment::class.java, Pair("id", item.id))
} }
} }
} }

View File

@ -10,6 +10,7 @@ import com.cheng.blzb.common.EventConstants
import com.cheng.blzb.databinding.FragmentHomeBinding import com.cheng.blzb.databinding.FragmentHomeBinding
import com.cheng.blzb.event.HomeRefreshEvent import com.cheng.blzb.event.HomeRefreshEvent
import com.cheng.blzb.manager.EventReportManager import com.cheng.blzb.manager.EventReportManager
import com.cheng.blzb.manager.NotificationHelper
import com.cheng.blzb.manager.SearchHistoryManager import com.cheng.blzb.manager.SearchHistoryManager
import com.cheng.blzb.manager.UserConfigManager import com.cheng.blzb.manager.UserConfigManager
import com.cheng.blzb.ui.activity.PublicActivity import com.cheng.blzb.ui.activity.PublicActivity
@ -22,6 +23,7 @@ import com.cheng.blzb.ui.fragment.home.zzdb.ZZDBFragment
import com.cheng.blzb.ui.fragment.mine.vip.VipFragment import com.cheng.blzb.ui.fragment.mine.vip.VipFragment
import com.cheng.blzb.ui.fragment.search.SearchFragment import com.cheng.blzb.ui.fragment.search.SearchFragment
import com.cheng.blzb.ui.fragment.search.list.SearchListFragment import com.cheng.blzb.ui.fragment.search.list.SearchListFragment
import com.cheng.blzb.utils.PermissionUtils
import com.example.base.common.RxBus import com.example.base.common.RxBus
import com.example.base.decoration.GridSpaceItemDecoration import com.example.base.decoration.GridSpaceItemDecoration
import com.example.base.decoration.SpacesItemDecoration import com.example.base.decoration.SpacesItemDecoration
@ -29,6 +31,7 @@ import com.example.base.extensions.getColor
import com.example.base.extensions.onClick import com.example.base.extensions.onClick
import com.example.base.ui.list.ListFragment import com.example.base.ui.list.ListFragment
import com.example.base.utils.DensityUtils import com.example.base.utils.DensityUtils
import com.example.base.utils.MMKVUtils
import com.example.base.utils.SpanUtils import com.example.base.utils.SpanUtils
import java.text.DecimalFormat import java.text.DecimalFormat
import kotlin.math.abs import kotlin.math.abs
@ -60,6 +63,14 @@ class HomeFragment : ListFragment<FragmentHomeBinding, HomeViewModel, BidItemEnt
binding.rvHotKeyword.adapter = keywordAdapter binding.rvHotKeyword.adapter = keywordAdapter
binding.rvHotKeyword.addItemDecoration(SpacesItemDecoration(DensityUtils.dp2px(8f), HORIZONTAL)) binding.rvHotKeyword.addItemDecoration(SpacesItemDecoration(DensityUtils.dp2px(8f), HORIZONTAL))
NotificationHelper.createDefaultChannel()
if (MMKVUtils.getBoolean("request_notification_permission", true)) {
PermissionUtils.checkNotificationPermission(requireActivity()) { isGranted ->
if (!isGranted) NotificationHelper.showDisabledTip(requireActivity(), childFragmentManager)
MMKVUtils.put("request_notification_permission", false)
}
}
} }
override fun initData() { override fun initData() {

View File

@ -4,6 +4,8 @@ import android.text.TextUtils
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT import androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
import com.cheng.blzb.R import com.cheng.blzb.R
import com.cheng.blzb.bean.PushPayloadEntity
import com.cheng.blzb.common.AppUpdate
import com.cheng.blzb.common.EventConstants import com.cheng.blzb.common.EventConstants
import com.cheng.blzb.databinding.FragmentMainBinding import com.cheng.blzb.databinding.FragmentMainBinding
import com.cheng.blzb.event.HomeRefreshEvent import com.cheng.blzb.event.HomeRefreshEvent
@ -18,8 +20,10 @@ import com.cheng.blzb.ui.activity.PublicActivity
import com.cheng.blzb.ui.base.BasePageAdapter import com.cheng.blzb.ui.base.BasePageAdapter
import com.cheng.blzb.ui.dialog.PublishBidDialog import com.cheng.blzb.ui.dialog.PublishBidDialog
import com.cheng.blzb.ui.dialog.VipLoginTipDialog import com.cheng.blzb.ui.dialog.VipLoginTipDialog
import com.cheng.blzb.ui.fragment.bid.detail.BidDetailFragment
import com.cheng.blzb.ui.fragment.home.HomeFragment import com.cheng.blzb.ui.fragment.home.HomeFragment
import com.cheng.blzb.ui.fragment.merchant.MerchantFragment import com.cheng.blzb.ui.fragment.merchant.MerchantFragment
import com.cheng.blzb.ui.fragment.merchant.detail.MerchantGoodsDetailFragment
import com.cheng.blzb.ui.fragment.mine.MineFragment import com.cheng.blzb.ui.fragment.mine.MineFragment
import com.cheng.blzb.ui.fragment.mine.coupon.CouponFragment import com.cheng.blzb.ui.fragment.mine.coupon.CouponFragment
import com.cheng.blzb.ui.fragment.mine.vip.VipFragment import com.cheng.blzb.ui.fragment.mine.vip.VipFragment
@ -153,7 +157,7 @@ class MainFragment : BaseFragment<FragmentMainBinding, MainViewModel>() {
val pushMessageEvent = RxBus.defaultInstance.toObservable(PushMessageEvent::class.java).subscribe { val pushMessageEvent = RxBus.defaultInstance.toObservable(PushMessageEvent::class.java).subscribe {
if (!TextUtils.isEmpty(it.payload)) { if (!TextUtils.isEmpty(it.payload)) {
val payload = Gson().fromJson(it.payload, com.cheng.blzb.bean.PushPayloadEntity::class.java) val payload = Gson().fromJson(it.payload, PushPayloadEntity::class.java)
if (it.type == 3) handlePushMessage(payload) if (it.type == 3) handlePushMessage(payload)
mViewModel.reportPushReceipt(payload.msgId, "${it.type}") mViewModel.reportPushReceipt(payload.msgId, "${it.type}")
} }
@ -161,7 +165,7 @@ class MainFragment : BaseFragment<FragmentMainBinding, MainViewModel>() {
addDisposable(pushMessageEvent) addDisposable(pushMessageEvent)
} }
private fun handlePushMessage(payloadEntity: com.cheng.blzb.bean.PushPayloadEntity) { private fun handlePushMessage(payloadEntity: PushPayloadEntity) {
if (TextUtils.isEmpty(payloadEntity.page)) return if (TextUtils.isEmpty(payloadEntity.page)) return
when (payloadEntity.page) { when (payloadEntity.page) {
"member_recharge" -> { "member_recharge" -> {
@ -169,7 +173,30 @@ class MainFragment : BaseFragment<FragmentMainBinding, MainViewModel>() {
requireContext(), requireContext(),
VipFragment::class.java, VipFragment::class.java,
Pair("origin", parseData("source", payloadEntity.params)), Pair("origin", parseData("source", payloadEntity.params)),
// Pair("goodsType", parseData("type", payloadEntity.params)) Pair("goodsType", parseData("type", payloadEntity.params))
)
}
"bid_info" -> {
val bidId = parseData("bid_info_id", payloadEntity.params)
if (TextUtils.isEmpty(bidId)) {
toast("标讯id为空")
return
}
PublicActivity.start(requireActivity(),
BidDetailFragment::class.java,
Pair("source", parseData("source", payloadEntity.params)),
Pair("goodsType", parseData("type", payloadEntity.params)),
Pair("info_source", parseData("info_source", payloadEntity.params)),
Pair("id", bidId),
Pair("origin", "push")
)
}
"goods_details" -> {
PublicActivity.start(requireActivity(),
MerchantGoodsDetailFragment::class.java,
Pair("id", parseData("goods_id", payloadEntity.params))
) )
} }
} }
@ -191,6 +218,6 @@ class MainFragment : BaseFragment<FragmentMainBinding, MainViewModel>() {
} }
private fun checkVersion() { private fun checkVersion() {
com.cheng.blzb.common.AppUpdate.checkUpdate(this, false) {} AppUpdate.checkUpdate(this, false) {}
} }
} }

View File

@ -28,6 +28,7 @@ import com.example.base.utils.SpanUtils
import java.text.DecimalFormat import java.text.DecimalFormat
class MerchantGoodsDetailFragment : BaseFragment<FragmentMerchantGoodsDetailBinding, MerchantGoodsDetailViewModel>() { class MerchantGoodsDetailFragment : BaseFragment<FragmentMerchantGoodsDetailBinding, MerchantGoodsDetailViewModel>() {
private val id by lazy { arguments?.getString("id") ?: "" }
private var goodsInfo: MerchantGoodsEntity? = null private var goodsInfo: MerchantGoodsEntity? = null
private val contactsAdapter by lazy { MerchantContactsAdapter() } private val contactsAdapter by lazy { MerchantContactsAdapter() }
@ -60,9 +61,13 @@ class MerchantGoodsDetailFragment : BaseFragment<FragmentMerchantGoodsDetailBind
} else { } else {
arguments?.getSerializable("item") as? MerchantGoodsEntity arguments?.getSerializable("item") as? MerchantGoodsEntity
} }
if (goodsInfo != null) {
setData() setData()
mViewModel.sendAuth() EventReportManager.eventReport(EventConstants.JUMP_TO_GOODS_DETAIL, "", "{\"id\": ${goodsInfo!!.id}}")
EventReportManager.eventReport(EventConstants.JUMP_TO_GOODS_DETAIL, "", "{\"id\": ${goodsInfo?.id}}") } else {
mViewModel.getGoodsInfo(id)
EventReportManager.eventReport(EventConstants.JUMP_TO_GOODS_DETAIL, "", "{\"id\": ${id}}")
}
} }
override fun initListener() { override fun initListener() {
@ -72,6 +77,7 @@ class MerchantGoodsDetailFragment : BaseFragment<FragmentMerchantGoodsDetailBind
} }
binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
@SuppressLint("SetTextI18n")
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
super.onPageSelected(position) super.onPageSelected(position)
binding.tvIndicator.text = "${position + 1}/${imageAdapter.data.size}" binding.tvIndicator.text = "${position + 1}/${imageAdapter.data.size}"
@ -96,6 +102,10 @@ class MerchantGoodsDetailFragment : BaseFragment<FragmentMerchantGoodsDetailBind
override fun initObserve() { override fun initObserve() {
super.initObserve() super.initObserve()
mViewModel.infoLiveData.observe(this) {
goodsInfo = it
setData()
}
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@ -146,6 +156,8 @@ class MerchantGoodsDetailFragment : BaseFragment<FragmentMerchantGoodsDetailBind
binding.tvLocation.text = if (TextUtils.isEmpty(goodsInfo!!.city_name)) "全国" else goodsInfo!!.city_name binding.tvLocation.text = if (TextUtils.isEmpty(goodsInfo!!.city_name)) "全国" else goodsInfo!!.city_name
binding.tvViewCount.text = "已浏览 ${if (!TextUtils.isEmpty(goodsInfo!!.view_count)) goodsInfo!!.view_count else 0}" binding.tvViewCount.text = "已浏览 ${if (!TextUtils.isEmpty(goodsInfo!!.view_count)) goodsInfo!!.view_count else 0}"
mViewModel.sendAuth()
} }
} }
} }

View File

@ -1,12 +1,31 @@
package com.cheng.blzb.ui.fragment.merchant.detail package com.cheng.blzb.ui.fragment.merchant.detail
import androidx.lifecycle.MutableLiveData
import com.cheng.blzb.bean.MerchantGoodsEntity
import com.cheng.blzb.net.ApiFactory import com.cheng.blzb.net.ApiFactory
import com.example.base.extensions.toast
import com.example.base.utils.L import com.example.base.utils.L
import com.example.base.viewmodel.BaseViewModel import com.example.base.viewmodel.BaseViewModel
import com.google.gson.JsonObject import com.google.gson.JsonObject
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
class MerchantGoodsDetailViewModel: BaseViewModel() { class MerchantGoodsDetailViewModel: BaseViewModel() {
val infoLiveData = MutableLiveData<MerchantGoodsEntity>()
fun getGoodsInfo(id: String) {
showDialog()
launchOnUiTryCatch({
val response = ApiFactory.apiService.getGoodsInfo(id)
if (response.status) {
infoLiveData.postValue(response.data)
} else toast(response.message, true)
dismissDialog()
}, {
dismissDialog()
setError(it)
L.d(it)
})
}
fun sendAuth() { fun sendAuth() {
launchOnUiTryCatch({ launchOnUiTryCatch({

View File

@ -64,7 +64,7 @@ class MerchantGoodsListFragment : ListFragment<FragmentMerchantGoodsListBinding,
super.initObserve() super.initObserve()
mViewModel.authLiveData.observe(this) { mViewModel.authLiveData.observe(this) {
if (it.auth) { if (it.auth) {
PublicActivity.start(requireActivity(), MerchantGoodsDetailFragment::class.java, Pair("item", item)) PublicActivity.start(requireActivity(), MerchantGoodsDetailFragment::class.java, Pair("id", item!!.id))
} else { } else {
PublicActivity.start(requireContext(), VipFragment::class.java, Pair("origin", "view_goods")) PublicActivity.start(requireContext(), VipFragment::class.java, Pair("origin", "view_goods"))
} }

View File

@ -79,6 +79,11 @@ class CompanyAuthFragment : BaseFragment<FragmentCompanyAuthBinding, CompanyAuth
mViewModel.getCompanyInfo() mViewModel.getCompanyInfo()
} }
override fun onResume() {
super.onResume()
mViewModel.userInfo()
}
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
@ -162,6 +167,10 @@ class CompanyAuthFragment : BaseFragment<FragmentCompanyAuthBinding, CompanyAuth
override fun initObserve() { override fun initObserve() {
super.initObserve() super.initObserve()
mViewModel.userInfoLiveData.observe(this) {
UserConfigManager.userInfoLiveData.postValue(it)
}
mViewModel.addLiveData.observe(this) { mViewModel.addLiveData.observe(this) {
toast("提交成功") toast("提交成功")
requireActivity().finish() requireActivity().finish()

View File

@ -4,6 +4,7 @@ import android.content.Context
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.cheng.blzb.bean.CompanyEntity import com.cheng.blzb.bean.CompanyEntity
import com.cheng.blzb.bean.UploadFileEntity import com.cheng.blzb.bean.UploadFileEntity
import com.cheng.blzb.bean.UserEntity
import com.cheng.blzb.net.ApiFactory import com.cheng.blzb.net.ApiFactory
import com.cheng.blzb.utils.BitmapUtils import com.cheng.blzb.utils.BitmapUtils
import com.example.base.extensions.toast import com.example.base.extensions.toast
@ -14,10 +15,26 @@ import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
class CompanyAuthViewModel: BaseViewModel() { class CompanyAuthViewModel: BaseViewModel() {
val userInfoLiveData = MutableLiveData<UserEntity>()
val companyLiveData = MutableLiveData<CompanyEntity>() val companyLiveData = MutableLiveData<CompanyEntity>()
val addLiveData = MutableLiveData<Any>() val addLiveData = MutableLiveData<Any>()
val imageLiveData = MutableLiveData<UploadFileEntity>() val imageLiveData = MutableLiveData<UploadFileEntity>()
fun userInfo() {
showDialog()
launchOnUiTryCatch({
val response = ApiFactory.apiService.userInfo()
if (response.status) {
userInfoLiveData.postValue(response.data)
} else toast(response.message, true)
dismissDialog()
}, {
dismissDialog()
setError(it)
L.d(it)
})
}
fun getCompanyInfo() { fun getCompanyInfo() {
showDialog() showDialog()
launchOnUiTryCatch({ launchOnUiTryCatch({

View File

@ -1,4 +1,11 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:8.0'
// AGC插件配置AGC插件依赖关系选择合适的AGC插件版本
classpath 'com.huawei.agconnect:agcp:1.9.1.300'
}
}
plugins { plugins {
alias(libs.plugins.androidApplication) apply false alias(libs.plugins.androidApplication) apply false
alias(libs.plugins.jetbrainsKotlinAndroid) apply false alias(libs.plugins.jetbrainsKotlinAndroid) apply false