diff --git a/StatisticReporter/src/main/java/com/gamedog/statisticreporter/adjust/AdjustManager.kt b/StatisticReporter/src/main/java/com/gamedog/statisticreporter/adjust/AdjustManager.kt index 60ed9e8..2123104 100644 --- a/StatisticReporter/src/main/java/com/gamedog/statisticreporter/adjust/AdjustManager.kt +++ b/StatisticReporter/src/main/java/com/gamedog/statisticreporter/adjust/AdjustManager.kt @@ -183,15 +183,19 @@ class AdjustManager private constructor() { // 设置当前用户渠道类型 - val userChannelType = if (StatisticLogger.isLogEnabled()) { - // 内部版本强制设置为买量类型 - StatisticLogger.d("内部版本强制设置为买量类型") - UserChannelController.UserChannelType.PAID - } else { - determineUserChannelType(attr) - } +// val userChannelType = if (StatisticLogger.isLogEnabled()) { +// // 内部版本强制设置为买量类型 +// StatisticLogger.d("内部版本强制设置为买量类型") +// UserChannelController.UserChannelType.PAID +// } else { +// determineUserChannelType(attr) +// } + val userChannelType = determineUserChannelType(attr) StatisticLogger.d("根据归因数据判断用户渠道类型: $userChannelType") +// val userChannelType = UserChannelController.UserChannelType.NATURAL +// StatisticLogger.d("根据归因数据判断用户渠道类型: $userChannelType") + // 设置用户渠道类型 val success = UserChannelController.setChannel(userChannelType) if (success) { diff --git a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyViewModel.kt b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyViewModel.kt index 3467cd8..fb39dc4 100644 --- a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyViewModel.kt +++ b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyViewModel.kt @@ -19,7 +19,8 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch - +import org.json.JSONArray +import org.json.JSONObject class ZeroBuyViewModel : ViewModel() { @@ -47,30 +48,38 @@ class ZeroBuyViewModel : ViewModel() { val joinZeroBuyItemIds = SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS) requestParams.put("activity_id", itemId.toString()) + val jsonObj = JSONObject().apply { + put("app_id",AndroidUtil.getPackageId()) + put("device_id",DeviceUtil.generateDeviceId()) + put("activity_id", itemId) + put("purchase_ids", JSONArray(joinZeroBuyItemIds)) + if (userId > 0) { + put("user_id", userId) + } + } - val result = NetworkUtil.post("${VidiConst.URL_ZERO_BUY}/any", requestHeaders, requestParams, joinZeroBuyItemIds) + + val result = NetworkUtil.postJsonGeneric("${VidiConst.URL_ZERO_BUY}/any", jsonObj.toString(), requestHeaders) when (result) { is Result.Success -> { - val respObj = AndroidUtil.json2Object(result.data.string()) + val respObj = result.data + if (respObj.code == CODE_HAS_JOINED_BEFORE || respObj.code == 0) { + // save + val joinedActivityList = SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS).toMutableList() + if (!joinedActivityList.contains(itemId)) { + joinedActivityList.add(itemId) + SpUtil.instance().putList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS, joinedActivityList) + } - respObj?.let { - if (it.code == CODE_HAS_JOINED_BEFORE || it.code == 0) { - // save - val joinedActivityList = if(joinZeroBuyItemIds == null) mutableListOf() else joinZeroBuyItemIds.toMutableList() - if (!joinedActivityList.contains(itemId)) { - joinedActivityList.add(itemId) - SpUtil.instance().putList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS, joinedActivityList) - } - - // flow set - _ZeroBuyJoinResult.value = Result.Success(it.current_purchases[0]) - - // return + // flow set + val joinItem = respObj.current_purchases?.firstOrNull() + if (joinItem != null) { + _ZeroBuyJoinResult.value = Result.Success(joinItem) return@launch } } - _ZeroBuyJoinResult.value = Result.Error(Throwable("empty response")) + _ZeroBuyJoinResult.value = Result.Error(Throwable("empty response or code error: ${respObj.code}")) } is Result.Error -> { _ZeroBuyJoinResult.value = Result.Error(result.exception, result.message) @@ -94,20 +103,29 @@ class ZeroBuyViewModel : ViewModel() { requestParams.put("user_id", userId.toString()) } val joinZeroBuyItemIds = SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS) - val result = NetworkUtil.post("${VidiConst.URL_ZERO_BUY}/any", requestHeaders, requestParams, joinZeroBuyItemIds) + + val jsonObj = JSONObject().apply { + put("app_id",AndroidUtil.getPackageId()) + put("device_id",DeviceUtil.generateDeviceId()) + put("purchase_ids", JSONArray(joinZeroBuyItemIds)) + if (userId > 0) { + put("user_id", userId) + } + } + + + val result = NetworkUtil.postJsonGeneric("${VidiConst.URL_ZERO_BUY}/any", jsonObj.toString(), requestHeaders) when (result) { is Result.Success -> { - val respObj = AndroidUtil.json2Object(result.data.string()) + val respObj = result.data - respObj?.user_id?.let { - if (userId <= 0) { - AccountManager.saveUserIdInfo(it) - - saveHasJoinedZeroIds(it, respObj.current_purchases) + if (userId <= 0) { + respObj.user_id.let { id -> + AccountManager.saveUserIdInfo(id) + saveHasJoinedZeroIds(id, respObj.current_purchases) } } - - _ZeroBuyListData.value = Result.Success(respObj!!) + _ZeroBuyListData.value = Result.Success(respObj) } is Result.Error -> { _ZeroBuyListData.value = Result.Error(result.exception, result.message) @@ -118,11 +136,11 @@ class ZeroBuyViewModel : ViewModel() { } } - private fun saveHasJoinedZeroIds(userId: Int, currentPurchases: List) { - val joinZeroBuyItemIds = SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS).toMutableList() - currentPurchases.forEach { zero -> + private fun saveHasJoinedZeroIds(userId: Int, currentPurchases: List?) { + val joinZeroBuyItemIds = SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS)?.toMutableList() ?: mutableListOf() + currentPurchases?.forEach { zero -> zero.current_users?.let { - if (it.contains(userId) && !joinZeroBuyItemIds.contains(userId)) { + if (it.contains(userId) && !joinZeroBuyItemIds.contains(zero.id)) { joinZeroBuyItemIds.add(zero.id) } } diff --git a/app/src/main/java/com/gamedog/vididin/manager/ZeroManager.kt b/app/src/main/java/com/gamedog/vididin/manager/ZeroManager.kt index bace556..5c7371b 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/ZeroManager.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/ZeroManager.kt @@ -31,6 +31,8 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch +import org.json.JSONArray +import org.json.JSONObject import java.util.concurrent.locks.ReentrantLock import kotlin.Int @@ -173,8 +175,24 @@ class ZeroManager private constructor() { val signOriginStr = "${zeroWithdrawItem.purchase_id}-${userId}-${bankCPFAccount}-${accountType}-${bankCPFAccount}-${accountType}-${ZEROBUY_SECRET}" requestParams.put("sign", MD5Util.md5(signOriginStr)!!) + val jsonObj = JSONObject().apply { + put("app_id",AndroidUtil.getPackageId()) + put("device_id",DeviceUtil.generateDeviceId()) + put("activity_id", zeroWithdrawItem.purchase_id) + put("order_id", zeroWithdrawItem.orderId) + if (userId > 0) { + put("user_id", userId) + } + put("account", bankCPFAccount) + put("account_type", accountType) + put("country", Country.BR.name) + put("document_type", accountType) + put("document_id", bankCPFAccount) + put("bank_code", AccountManager.getAccount().bankInfo?.bankAccount!!) + put("sign", MD5Util.md5(signOriginStr)!!) + } - val result = NetworkUtil.post("${VidiConst.URL_ZERO_BUY}/any", requestHeaders, requestParams, joinZeroBuyItemIds) + val result = NetworkUtil.postJson("${VidiConst.URL_ZERO_BUY}/any", jsonObj.toString(),requestHeaders) when (result) { is Result.Success -> { val respObj = AndroidUtil.json2Object(result.data.string()) @@ -226,8 +244,17 @@ class ZeroManager private constructor() { // withdraw check result 相关参数: requestParams.put("order_id", zeroWithdrawItem.orderId) + val jsonObj = JSONObject().apply { + put("app_id",AndroidUtil.getPackageId()) + put("device_id",DeviceUtil.generateDeviceId()) + put("activity_id", zeroWithdrawItem.purchase_id) + put("order_id", zeroWithdrawItem.orderId) + if (userId > 0) { + put("user_id", userId) + } + } - val result = NetworkUtil.post("${VidiConst.URL_ZERO_BUY}/any", requestHeaders, requestParams) + val result = NetworkUtil.postJson("${VidiConst.URL_ZERO_BUY}/any", jsonObj.toString(),requestHeaders) //val result = NetworkUtil.post("http://192.168.110.141:8081/any", requestHeaders, requestParams) when (result) { diff --git a/app/src/main/java/com/gamedog/vididin/netbase/ApiService.kt b/app/src/main/java/com/gamedog/vididin/netbase/ApiService.kt index e01b490..5a53688 100644 --- a/app/src/main/java/com/gamedog/vididin/netbase/ApiService.kt +++ b/app/src/main/java/com/gamedog/vididin/netbase/ApiService.kt @@ -32,15 +32,14 @@ interface ApiService { suspend fun postRequest( @Url url: String, @HeaderMap headers: Map = emptyMap(), - @FieldMap params: Map = emptyMap(), - @Field("JoinedPurchaseIds") JoinedPurchaseIds: List = emptyList(), + @FieldMap params: Map = emptyMap() ): ResponseBody @POST suspend fun postJsonRequest( @Url url: String, @HeaderMap headers: Map = emptyMap(), - @Body body: Any + @Body body: okhttp3.RequestBody ): ResponseBody diff --git a/app/src/main/java/com/gamedog/vididin/netbase/NetworkUtil.kt b/app/src/main/java/com/gamedog/vididin/netbase/NetworkUtil.kt index da37462..1114e0b 100644 --- a/app/src/main/java/com/gamedog/vididin/netbase/NetworkUtil.kt +++ b/app/src/main/java/com/gamedog/vididin/netbase/NetworkUtil.kt @@ -1,5 +1,8 @@ package com.gamedog.vididin.netbase +import com.ama.core.architecture.util.AndroidUtil +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.ResponseBody import retrofit2.HttpException import java.io.IOException @@ -28,11 +31,10 @@ object NetworkUtil { suspend fun post( url: String, headers: Map = emptyMap(), - params: Map = emptyMap(), - JoinedPurchaseIds : List = emptyList() + params: Map = emptyMap() ): Result { return executeRequest { - apiService.postRequest(url, headers, params, JoinedPurchaseIds) + apiService.postRequest(url, headers, params) } } @@ -43,7 +45,37 @@ object NetworkUtil { headers: Map = emptyMap() ): Result { return executeRequest { - apiService.postJsonRequest(url, headers, body) + val requestBody = when (body) { + is okhttp3.RequestBody -> body + is String -> body.toRequestBody("application/json; charset=utf-8".toMediaType()) + else -> AndroidUtil.object2Json(body).toRequestBody("application/json; charset=utf-8".toMediaType()) + } + apiService.postJsonRequest(url, headers, requestBody) + } + } + + suspend inline fun postJsonGeneric( + url: String, + body: Any, + headers: Map = emptyMap() + ): Result { + val result = postJson(url, body, headers) + return when (result) { + is Result.Success -> { + try { + val json = result.data.string() + val data = AndroidUtil.json2Object(json) + if (data != null) { + Result.Success(data) + } else { + Result.Error(Exception("JSON解析失败"), "数据解析失败") + } + } catch (e: Exception) { + Result.Error(e, "数据解析异常: ${e.message}") + } + } + is Result.Error -> Result.Error(result.exception, result.message) + is Result.Loading -> Result.Loading } }