Commit 26c3ba94 authored by shiyl's avatar shiyl

封装H5调原生的网络请求协议

parent 859fd465
...@@ -32,7 +32,6 @@ android { ...@@ -32,7 +32,6 @@ android {
buildTypes { buildTypes {
debug { debug {
// applicationIdSuffix ".debug"
buildConfigField "boolean", "ENV_DEBUG", "true" buildConfigField "boolean", "ENV_DEBUG", "true"
buildConfigField("String", "API_URL", rootProject.ext.buildParams.debug.API_URL) buildConfigField("String", "API_URL", rootProject.ext.buildParams.debug.API_URL)
buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".debug.fileprovider" + '\"') buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".debug.fileprovider" + '\"')
......
...@@ -16,6 +16,7 @@ import com.yidian.common.http.ApiSetCookiesInterceptor ...@@ -16,6 +16,7 @@ import com.yidian.common.http.ApiSetCookiesInterceptor
import com.yidian.common.services.AppUpgradeService import com.yidian.common.services.AppUpgradeService
import com.yidian.common.services.XEventService import com.yidian.common.services.XEventService
import com.yidian.common.services.XPageService import com.yidian.common.services.XPageService
import com.yidian.common.services.http.MBHttpReqService
import com.yidian.common.utils.UMConfigUtils import com.yidian.common.utils.UMConfigUtils
import com.yidian.commonutil.CommonUtilLifecycleModule import com.yidian.commonutil.CommonUtilLifecycleModule
import com.yidian.framework.mobile.xdiamond.SecretUtil import com.yidian.framework.mobile.xdiamond.SecretUtil
...@@ -93,8 +94,8 @@ open class YdBaseApplication : Application() { ...@@ -93,8 +94,8 @@ open class YdBaseApplication : Application() {
SecretUtil.init(BuildConfig.IS_ENCRYPT_DEBUG_KEY) SecretUtil.init(BuildConfig.IS_ENCRYPT_DEBUG_KEY)
// 初始化App升级 // 初始化App升级
initAppUpgrade() initAppUpgrade()
initSmartRefreshLayout()
} }
initSmartRefreshLayout()
} }
/** /**
...@@ -153,7 +154,7 @@ open class YdBaseApplication : Application() { ...@@ -153,7 +154,7 @@ open class YdBaseApplication : Application() {
XBridManager.init( XBridManager.init(
XBridApp(applicationContext) { XBridApp(applicationContext) {
assetRoot = "www"//对应assets目录下存放xbrid资源对应的目录名 assetRoot = "www"//对应assets目录下存放xbrid资源对应的目录名
appId = "com.yidian.subway"//当前应用包名 appId = applicationContext.packageName //当前应用包名
platformId = 16 //需要去平台申请 platformId = 16 //需要去平台申请
appVersion = AppConfig.cv//当前应用版本号 appVersion = AppConfig.cv//当前应用版本号
deviceFinger = FtDeviceFingerManager.getDeviceFinger()//设备指纹 deviceFinger = FtDeviceFingerManager.getDeviceFinger()//设备指纹
...@@ -204,9 +205,10 @@ open class YdBaseApplication : Application() { ...@@ -204,9 +205,10 @@ open class YdBaseApplication : Application() {
} }
private fun loadService() { private fun loadService() {
Zap.addService(XPageService.name, XPageService()) Zap.addService(XPageService.SERVICE_NAME, XPageService())
Zap.addService(XEventService.name, XEventService()) Zap.addService(XEventService.SERVICE_NAME, XEventService())
Zap.addService(AppUpgradeService.SERVICE_NAME, AppUpgradeService()) Zap.addService(AppUpgradeService.SERVICE_NAME, AppUpgradeService())
Zap.addService(MBHttpReqService.SERVICE_NAME, MBHttpReqService())
} }
/** /**
......
package com.yidian.common.http package com.yidian.common.http
import com.yidian.common.BuildConfig
class URLs { class URLs {
companion object { companion object {
val BASE_URL: String
private const val BASE_URL_DEBUG = "http://bp-dev.go2yd.com"
private const val BASE_URL_PRO = "http://bp-dev.go2yd.com"
init {
BASE_URL = if (BuildConfig.ENV_DEBUG) {
BASE_URL_DEBUG
} else {
BASE_URL_PRO
}
}
const val userInfo = "/user/user/info" const val userInfo = "/user/user/info"
// 生活圈B端 // 生活圈B端
......
...@@ -16,58 +16,58 @@ import org.json.JSONObject ...@@ -16,58 +16,58 @@ import org.json.JSONObject
**/ **/
class XEventService : ZapService() { class XEventService : ZapService() {
override fun onAction( override fun onAction(
path: String, path: String,
action: String, action: String,
params: Any, params: Any,
options: Any, options: Any,
resolver: ResultResolver resolver: ResultResolver
) { ) {
when (action) { when (action) {
"postEvent" -> { "postEvent" -> {
params as JSONObject params as JSONObject
val name: String = params["name"] as String val name: String = params["name"] as String
val body = params["body"] val body = params["body"]
XEventManager.post(XBaseEvent(name, body)) XEventManager.post(XBaseEvent(name, body))
//向flutter发送Event事件 //向flutter发送Event事件
ZapTicket("flutter-event") ZapTicket("flutter-event")
.withAction("handleEvent") .withAction("handleEvent")
.withServiceParams(params) .withServiceParams(params)
.onLost { result -> .onLost { result ->
Log.d(TAG, "onLost: $result") Log.d(TAG, "onLost: $result")
} }
.onResult { result -> .onResult { result ->
Log.d(TAG, "flutter-event+onResult: $result") Log.d(TAG, "flutter-event+onResult: $result")
}.ship() }.ship()
XBridManager.postEvent(name, body, null) XBridManager.postEvent(name, body, null)
resolver.success("事件已发送") resolver.success("事件已发送")
} }
}
} }
}
override fun onInit() { override fun onInit() {
} }
override fun onExit() { override fun onExit() {
} }
companion object { companion object {
const val name: String = "xevent" const val SERVICE_NAME: String = "xevent"
private val TAG = "XEventService" private val TAG = "XEventService"
fun postEvent(xbaseEvent: XBaseEvent) { fun postEvent(xbaseEvent: XBaseEvent) {
val jsonObject = JSONObject() val jsonObject = JSONObject()
jsonObject.put("name", xbaseEvent.name) jsonObject.put("name", xbaseEvent.name)
jsonObject.put("body", xbaseEvent.body) jsonObject.put("body", xbaseEvent.body)
ZapTicket(name) ZapTicket(SERVICE_NAME)
.withAction("postEvent") .withAction("postEvent")
.withServiceParams(jsonObject) .withServiceParams(jsonObject)
.onLost { result -> .onLost { result ->
Log.d(TAG, "onLost: $result") Log.d(TAG, "onLost: $result")
}
.onResult { result ->
Log.d(TAG, "onResult: $result")
}.ship()
} }
.onResult { result ->
Log.d(TAG, "onResult: $result")
}.ship()
} }
}
} }
\ No newline at end of file
...@@ -11,41 +11,41 @@ import com.yidian.yac.core.zap.ZapService ...@@ -11,41 +11,41 @@ import com.yidian.yac.core.zap.ZapService
**/ **/
class XPageService : ZapService() { class XPageService : ZapService() {
companion object { companion object {
const val name: String = "xpage" const val SERVICE_NAME: String = "xpage"
}
override fun onAction(
path: String,
action: String,
params: Any,
options: Any,
resolver: ResultResolver
) {
params as Map<String, Any>
val name = params["pageName"] as String
val pageParams = params["pageParams"] as Map<String, Any>
when (action) {
"push" -> {
XPageManager.push(name, pageParams)
}
"pop" -> {
XPageManager.pop(pageParams)
}
"popTo" -> {
XPageManager.popTo(name, pageParams)
}
"popToRoot" -> {
XPageManager.popToRoot(pageParams)
}
} }
}
override fun onAction( override fun onInit() {
path: String, }
action: String,
params: Any,
options: Any,
resolver: ResultResolver
) {
params as Map<String, Any>
val name = params["pageName"] as String
val pageParams = params["pageParams"] as Map<String, Any>
when (action) {
"push" -> {
XPageManager.push(name, pageParams)
}
"pop" -> {
XPageManager.pop(pageParams)
}
"popTo" -> {
XPageManager.popTo(name, pageParams)
}
"popToRoot" -> {
XPageManager.popToRoot(pageParams)
}
}
}
override fun onInit() {
}
override fun onExit() { override fun onExit() {
} }
} }
\ No newline at end of file
package com.yidian.common.services.http
import com.google.gson.Gson
import com.yidian.common.BuildConfig
import com.yidian.common.http.HttpResult
import com.yidian.common.services.http.callback.IMBRequestCallBack
import com.yidian.xarc.xrouter.ResultResolver
import com.yidian.yac.core.zap.ZapService
import org.json.JSONObject
/**
* 网络请求服务类
*/
class MBHttpReqService : ZapService() {
companion object {
const val SERVICE_NAME: String = "MBHttpReqService"
}
private lateinit var resolver: ResultResolver
override fun onAction(path: String, action: String, params: Any, options: Any, resolver: ResultResolver) {
this.resolver = resolver
try {
//params
val realParams = params as JSONObject
val apiPath = realParams.optString("path")
val requestParams = realParams.optJSONObject("params")
//options
val requestOptions = options as JSONObject
val method = requestOptions.optString("method", "POST")
val host = requestOptions.optString("host", BuildConfig.API_URL)
val url = host + apiPath
val paramsMap: HashMap<String, String?> = parseParams(requestParams)
//发起请求
when (method) {
"GET", "get" -> {
MBRemoteDataSource.launchGetRequest(iMBRequestCallBackImpl, paramsMap, url)
}
"POST", "post" -> {
MBRemoteDataSource.launchPostRequest(iMBRequestCallBackImpl, paramsMap, url)
}
else -> {
resolver.fail(-1000, "request error", "不支持的请求方式")
}
}
} catch (e: Exception) {
e.printStackTrace()
resolver.fail(-1001, "other error", "其他错误")
}
}
override fun onExit() {
}
override fun onInit() {
}
private fun parseParams(requestParams: JSONObject?): HashMap<String, String?> {
var hashMap: HashMap<String, String?> = HashMap()
if (requestParams != null) {
hashMap = HashMap()
var key: String?
while (requestParams.keys().hasNext()) {
key = requestParams.keys().next()
hashMap[key] = requestParams.optString(key)
}
}
return hashMap
}
private val iMBRequestCallBackImpl = object : IMBRequestCallBack {
override fun getRequestSuccess(response: Any?) {
val params = Gson().toJson(response)
resolver.success(JSONObject(params))
}
override fun getRequestFailure(response: HttpResult<Any?>?) {
response?.let {
resolver.fail(response.code, null, response.reason)
}
}
}
}
package com.yidian.common.services.http
import com.yidian.common.http.HttpParamsUtils
import com.yidian.common.http.HttpResult
import com.yidian.common.http.HttpResultSubscriber
import com.yidian.common.http.TransformUtil
import com.yidian.common.services.http.callback.IMBRequestCallBack
import com.yidian.http.ServiceFactory
object MBRemoteDataSource {
/**
* 发起get请求
*/
fun launchGetRequest(apiCallback: IMBRequestCallBack, requestParams: HashMap<String, String?>, url: String) {
val timeStamp = System.currentTimeMillis()
val publicParamsMap = HttpParamsUtils.getPublicParamsMap(timeStamp)
val privateParamsMap = HttpParamsUtils.getPrivateParamsMap(requestParams, timeStamp)
ServiceFactory.getInstance().createService(MBService::class.java)
.mbGetRequest(url, publicParamsMap, privateParamsMap)
.compose(TransformUtil.defaultSchedulers())
.subscribe(object : HttpResultSubscriber<Any?>() {
override fun onSuccess(result: HttpResult<Any?>?) {
apiCallback.getRequestSuccess(result)
}
override fun onFailer(result: HttpResult<Any?>?) {
apiCallback.getRequestFailure(result)
}
})
}
/**
* 发起post请求
*/
fun launchPostRequest(apiCallback: IMBRequestCallBack, requestParams: HashMap<String, String?>, url: String) {
val timeStamp = System.currentTimeMillis()
val publicParamsMap = HttpParamsUtils.getPublicParamsMap(timeStamp)
val privateParamsMap = HttpParamsUtils.getPrivateParamsMap(requestParams, timeStamp)
ServiceFactory.getInstance().createService(MBService::class.java)
.mbPostRequest(url, publicParamsMap, privateParamsMap)
.compose(TransformUtil.defaultSchedulers())
.subscribe(object : HttpResultSubscriber<Any?>() {
override fun onSuccess(result: HttpResult<Any?>?) {
apiCallback.getRequestSuccess(result)
}
override fun onFailer(result: HttpResult<Any?>?) {
apiCallback.getRequestFailure(result)
}
})
}
}
package com.yidian.common.services.http
import com.yidian.common.http.HttpResult
import io.reactivex.rxjava3.core.Observable
import retrofit2.http.*
/**
* H5网络请求服务协议的请求
*/
interface MBService {
/**
* get请求
*/
@GET
fun mbGetRequest(
@Url url: String,
@QueryMap commonParams: Map<String, String>,
@QueryMap params: Map<String, String?>
): Observable<HttpResult<Any?>>
/**
* post请求
*/
@Headers("Content-Type: application/json")
@POST
fun mbPostRequest(
@Url url: String,
@QueryMap commonParams: Map<String, String>,
@Body requestParams: Map<String, String?>
): Observable<HttpResult<Any?>>
}
package com.yidian.common.services.http.callback
import com.yidian.common.http.HttpResult
interface IMBRequestCallBack {
fun getRequestSuccess(response: Any?)
fun getRequestFailure(response: HttpResult<Any?>?)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment