From a2ad52a560a0d62d557c83e8bb92f0933ccc4eea Mon Sep 17 00:00:00 2001 From: wangyu Date: Mon, 26 Jan 2026 15:18:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/agconnect-services.json | 1 + app/build.gradle | 33 +++++++++ app/src/main/AndroidManifest.xml | 9 +++ .../java/com/cheng/blzb/BaseApplication.kt | 4 ++ .../cheng/blzb/manager/NotificationHelper.kt | 65 ++++++++---------- .../cheng/blzb/service/PushIntentService.kt | 68 +++++++++++++++++++ .../cheng/blzb/service/PushMessageService.kt | 6 ++ .../blzb/ui/activity/LauncherActivity.kt | 4 ++ .../bid/publish/goods/MyGoodsFragment.kt | 2 +- .../blzb/ui/fragment/home/HomeFragment.kt | 11 +++ .../blzb/ui/fragment/main/MainFragment.kt | 35 ++++++++-- .../detail/MerchantGoodsDetailFragment.kt | 18 ++++- .../detail/MerchantGoodsDetailViewModel.kt | 19 ++++++ .../list/MerchantGoodsListFragment.kt | 2 +- .../fragment/mine/auth/CompanyAuthFragment.kt | 9 +++ .../mine/auth/CompanyAuthViewModel.kt | 17 +++++ build.gradle | 7 ++ 17 files changed, 263 insertions(+), 47 deletions(-) create mode 100644 app/agconnect-services.json create mode 100644 app/src/main/java/com/cheng/blzb/service/PushIntentService.kt create mode 100644 app/src/main/java/com/cheng/blzb/service/PushMessageService.kt diff --git a/app/agconnect-services.json b/app/agconnect-services.json new file mode 100644 index 0000000..ee847ea --- /dev/null +++ b/app/agconnect-services.json @@ -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"}}]} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d135d1b..b8e2671 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,6 +3,7 @@ plugins { alias(libs.plugins.jetbrainsKotlinAndroid) id 'kotlin-kapt' id 'kotlin-parcelize' + id 'com.huawei.agconnect' } android { @@ -59,6 +60,23 @@ android { manifestPlaceholders = [ GETUI_APPID : "ej3hUPd0LR8G1CzkNtyZS3", 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 '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.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:+' //友盟 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5e5bfd0..73c27c4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -191,6 +191,15 @@ + + + + + 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) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/cheng/blzb/service/PushMessageService.kt b/app/src/main/java/com/cheng/blzb/service/PushMessageService.kt new file mode 100644 index 0000000..ed3f273 --- /dev/null +++ b/app/src/main/java/com/cheng/blzb/service/PushMessageService.kt @@ -0,0 +1,6 @@ +package com.cheng.blzb.service + +import com.igexin.sdk.PushService + +class PushMessageService: PushService() { +} \ No newline at end of file diff --git a/app/src/main/java/com/cheng/blzb/ui/activity/LauncherActivity.kt b/app/src/main/java/com/cheng/blzb/ui/activity/LauncherActivity.kt index a708cfb..bb83d24 100644 --- a/app/src/main/java/com/cheng/blzb/ui/activity/LauncherActivity.kt +++ b/app/src/main/java/com/cheng/blzb/ui/activity/LauncherActivity.kt @@ -28,6 +28,7 @@ import com.g.gysdk.GyCallBack import com.g.gysdk.GyConfig import com.gyf.immersionbar.BarHide import com.gyf.immersionbar.ImmersionBar +import com.igexin.sdk.PushManager import com.umeng.analytics.MobclickAgent import com.umeng.commonsdk.UMConfigure import org.jetbrains.anko.startActivity @@ -170,6 +171,9 @@ class LauncherActivity : BaseActivity() { L.d("TAG-->>GYManager ePreLogin onFailed =${gyResponse.code}") } }) + + PushManager.getInstance().preInit(this) + PushManager.getInstance().initialize(this) } @SuppressLint("UnsafeOptInUsageError") diff --git a/app/src/main/java/com/cheng/blzb/ui/fragment/bid/publish/goods/MyGoodsFragment.kt b/app/src/main/java/com/cheng/blzb/ui/fragment/bid/publish/goods/MyGoodsFragment.kt index 1756f65..bbeaab9 100644 --- a/app/src/main/java/com/cheng/blzb/ui/fragment/bid/publish/goods/MyGoodsFragment.kt +++ b/app/src/main/java/com/cheng/blzb/ui/fragment/bid/publish/goods/MyGoodsFragment.kt @@ -81,7 +81,7 @@ class MyGoodsFragment: BaseFragment() } R.id.btn_view -> { - PublicActivity.start(requireActivity(), MerchantGoodsDetailFragment::class.java, Pair("item", item)) + PublicActivity.start(requireActivity(), MerchantGoodsDetailFragment::class.java, Pair("id", item.id)) } } } diff --git a/app/src/main/java/com/cheng/blzb/ui/fragment/home/HomeFragment.kt b/app/src/main/java/com/cheng/blzb/ui/fragment/home/HomeFragment.kt index 0debc10..9b277d9 100644 --- a/app/src/main/java/com/cheng/blzb/ui/fragment/home/HomeFragment.kt +++ b/app/src/main/java/com/cheng/blzb/ui/fragment/home/HomeFragment.kt @@ -10,6 +10,7 @@ import com.cheng.blzb.common.EventConstants import com.cheng.blzb.databinding.FragmentHomeBinding import com.cheng.blzb.event.HomeRefreshEvent import com.cheng.blzb.manager.EventReportManager +import com.cheng.blzb.manager.NotificationHelper import com.cheng.blzb.manager.SearchHistoryManager import com.cheng.blzb.manager.UserConfigManager 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.search.SearchFragment 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.decoration.GridSpaceItemDecoration 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.ui.list.ListFragment import com.example.base.utils.DensityUtils +import com.example.base.utils.MMKVUtils import com.example.base.utils.SpanUtils import java.text.DecimalFormat import kotlin.math.abs @@ -60,6 +63,14 @@ class HomeFragment : ListFragment + if (!isGranted) NotificationHelper.showDisabledTip(requireActivity(), childFragmentManager) + MMKVUtils.put("request_notification_permission", false) + } + } } override fun initData() { diff --git a/app/src/main/java/com/cheng/blzb/ui/fragment/main/MainFragment.kt b/app/src/main/java/com/cheng/blzb/ui/fragment/main/MainFragment.kt index 8477606..95973b9 100644 --- a/app/src/main/java/com/cheng/blzb/ui/fragment/main/MainFragment.kt +++ b/app/src/main/java/com/cheng/blzb/ui/fragment/main/MainFragment.kt @@ -4,6 +4,8 @@ import android.text.TextUtils import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 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.databinding.FragmentMainBinding 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.dialog.PublishBidDialog 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.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.coupon.CouponFragment import com.cheng.blzb.ui.fragment.mine.vip.VipFragment @@ -153,7 +157,7 @@ class MainFragment : BaseFragment() { val pushMessageEvent = RxBus.defaultInstance.toObservable(PushMessageEvent::class.java).subscribe { 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) mViewModel.reportPushReceipt(payload.msgId, "${it.type}") } @@ -161,7 +165,7 @@ class MainFragment : BaseFragment() { addDisposable(pushMessageEvent) } - private fun handlePushMessage(payloadEntity: com.cheng.blzb.bean.PushPayloadEntity) { + private fun handlePushMessage(payloadEntity: PushPayloadEntity) { if (TextUtils.isEmpty(payloadEntity.page)) return when (payloadEntity.page) { "member_recharge" -> { @@ -169,7 +173,30 @@ class MainFragment : BaseFragment() { requireContext(), VipFragment::class.java, 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() { } private fun checkVersion() { - com.cheng.blzb.common.AppUpdate.checkUpdate(this, false) {} + AppUpdate.checkUpdate(this, false) {} } } \ No newline at end of file diff --git a/app/src/main/java/com/cheng/blzb/ui/fragment/merchant/detail/MerchantGoodsDetailFragment.kt b/app/src/main/java/com/cheng/blzb/ui/fragment/merchant/detail/MerchantGoodsDetailFragment.kt index bf467a6..c4c32d2 100644 --- a/app/src/main/java/com/cheng/blzb/ui/fragment/merchant/detail/MerchantGoodsDetailFragment.kt +++ b/app/src/main/java/com/cheng/blzb/ui/fragment/merchant/detail/MerchantGoodsDetailFragment.kt @@ -28,6 +28,7 @@ import com.example.base.utils.SpanUtils import java.text.DecimalFormat class MerchantGoodsDetailFragment : BaseFragment() { + private val id by lazy { arguments?.getString("id") ?: "" } private var goodsInfo: MerchantGoodsEntity? = null private val contactsAdapter by lazy { MerchantContactsAdapter() } @@ -60,9 +61,13 @@ class MerchantGoodsDetailFragment : BaseFragment() + + 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() { launchOnUiTryCatch({ diff --git a/app/src/main/java/com/cheng/blzb/ui/fragment/merchant/list/MerchantGoodsListFragment.kt b/app/src/main/java/com/cheng/blzb/ui/fragment/merchant/list/MerchantGoodsListFragment.kt index 14b62a6..806f1d1 100644 --- a/app/src/main/java/com/cheng/blzb/ui/fragment/merchant/list/MerchantGoodsListFragment.kt +++ b/app/src/main/java/com/cheng/blzb/ui/fragment/merchant/list/MerchantGoodsListFragment.kt @@ -64,7 +64,7 @@ class MerchantGoodsListFragment : ListFragment() val companyLiveData = MutableLiveData() val addLiveData = MutableLiveData() val imageLiveData = MutableLiveData() + 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() { showDialog() launchOnUiTryCatch({ diff --git a/build.gradle b/build.gradle index 4ce5a86..85a1cc7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,11 @@ // 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 { alias(libs.plugins.androidApplication) apply false alias(libs.plugins.jetbrainsKotlinAndroid) apply false