Commit ca0273d7 authored by mengcuiguang's avatar mengcuiguang

升级枫岚sdk

parent d5f3b302
......@@ -9,8 +9,8 @@ android {
applicationId "com.wenshu.youyou"
minSdkVersion rootProject.ext.androidMinSdkVersion
targetSdkVersion rootProject.ext.androidTargetSdkVersion
versionCode 4
versionName "1.0.4"
versionCode 5
versionName "1.0.5"
flavorDimensions "default"
// dex突破65535的限制
......
No preview for this file type
No preview for this file type
......@@ -12,6 +12,7 @@ import androidx.multidex.MultiDexApplication;
import com.hjq.toast.ToastUtils;
import com.wenshu.youyou.common.Constant;
import com.wenshu.youyou.manager.KsManager;
import com.wenshu.youyou.manager.MhManager;
import com.wenshu.youyou.manager.MiitHelper;
import com.wenshu.youyou.manager.RsNewsManager;
......
//package com.wenshu.youyou.ad.video
//
//import android.app.Activity
//import com.maplehaze.adsdk.video.RewardVideoAd
//import com.wenshu.youyou.ad.video.base.BaseVideoAd
//import com.wenshu.youyou.ad.video.base.VideoAdStatusListener
//import com.wenshu.youyou.common.AppConfig
//import com.wenshu.youyou.common.Constant
//import com.wenshu.youyou.manager.MhManager
//import com.wenshu.youyou.manager.TrackManager
//import com.wenshu.youyou.utils.LogUtil
//
//private val TAG = MhVideoAdManager::class.java.simpleName
//
///**
// * 枫岚广告视频
// */
//class MhVideoAdManager private constructor() :
// BaseVideoAd() {
//
// private var videoAdStatusListener: VideoAdStatusListener? = null
// private var mRewardVideoAd: RewardVideoAd? = null
//
// private var isClickScreen: Boolean = true
//
// companion object {
// private var _inst: MhVideoAdManager? = null
// fun getInstance(): MhVideoAdManager? {
// return if (_inst != null) {
// _inst
// } else {
// _inst = MhVideoAdManager()
// _inst
// }
// }
// }
//
// override fun loadAd(activity: Activity, curCoin: Int, carrierType: String, extraId: String?) {
// isClickScreen = true
//
// val postId: String = when (carrierType) {
// Constant.CARRIER_VERSUS_VIDEO -> MhManager.POS_ID
// Constant.CARRIER_HOMEWATER -> MhManager.POS_ID
// Constant.CARRIER_CHALLENGE_TURN, Constant.CARRIER_DRAWCASH -> MhManager.POS_ID
// Constant.CARRIER_CHALLENGE_CARD -> MhManager.POS_ID
// else -> MhManager.POS_ID
// }
//
// val orientation = RewardVideoAd.VERTICAL
//
// mRewardVideoAd = RewardVideoAd(activity, MhManager.APP_ID, postId, orientation, object : RewardVideoAd.RewardVideoListener {
// override fun onADCached() {
// LogUtil.d(TAG, "onADCached")
// mRewardVideoAd?.showAd(activity)
// }
//
// override fun onADShow() {
// LogUtil.d(TAG, "onADShow")
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_ZERO, "", "")
// }
//
// override fun onReward() {
// LogUtil.d(TAG, "onReward")
// }
//
// override fun onADClick() {
// if (AppConfig.needReportClickAdEvent) {
// TrackManager.getInstance().reportClickAdEvent()
// }
//
// LogUtil.d(TAG, "onADClick")
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_TWO, "", "")
// if (isClickScreen) {
// // 防止重复
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_FOUR, "", "")
// isClickScreen = false
// }
//
// videoAdStatusListener?.adDownload()
// }
//
// override fun onVideoComplete() {
// LogUtil.d(TAG, "onVideoComplete")
// }
//
// override fun onADClose() {
// LogUtil.d(TAG, "onADClose")
//
// TrackManager.getInstance().reportAddCoinMsg(activity, getAdMapVO(carrierType, Constant.AD_SOURCE_FL, extraId, curCoin))
//
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_THREE, "", "")
//
// videoAdStatusListener?.adSuccess()
// }
//
// override fun onADError(p0: Int) {
// LogUtil.d(TAG, "onADError->$p0")
//
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_ONE, (p0).toString(), "")
//
// videoAdStatusListener?.adFail()
// }
//
// })
//
// mRewardVideoAd?.loadAd()
// }
//
// fun setVideoAdStatusListener(videoAdStatusListener: VideoAdStatusListener?) {
// this.videoAdStatusListener = videoAdStatusListener
// }
//
// override fun onDestroy() {
// mRewardVideoAd = null
// }
//}
\ No newline at end of file
package com.wenshu.youyou.ad.video
import android.app.Activity
import com.maplehaze.adsdk.video.RewardVideoAd
import com.wenshu.youyou.ad.video.base.BaseVideoAd
import com.wenshu.youyou.ad.video.base.VideoAdStatusListener
import com.wenshu.youyou.common.AppConfig
import com.wenshu.youyou.common.Constant
import com.wenshu.youyou.manager.MhManager
import com.wenshu.youyou.manager.TrackManager
import com.wenshu.youyou.utils.LogUtil
private val TAG = MhVideoAdManager::class.java.simpleName
/**
* 枫岚广告视频
*/
class MhVideoAdManager private constructor() :
BaseVideoAd() {
private var videoAdStatusListener: VideoAdStatusListener? = null
private var mRewardVideoAd: RewardVideoAd? = null
private var isClickScreen: Boolean = true
companion object {
private var _inst: MhVideoAdManager? = null
fun getInstance(): MhVideoAdManager? {
return if (_inst != null) {
_inst
} else {
_inst = MhVideoAdManager()
_inst
}
}
}
override fun loadAd(activity: Activity, curCoin: Int, carrierType: String, extraId: String?) {
isClickScreen = true
val postId: String = when (carrierType) {
Constant.CARRIER_VERSUS_VIDEO -> MhManager.POS_ID
Constant.CARRIER_HOMEWATER -> MhManager.POS_ID
Constant.CARRIER_CHALLENGE_TURN, Constant.CARRIER_DRAWCASH -> MhManager.POS_ID
Constant.CARRIER_CHALLENGE_CARD -> MhManager.POS_ID
else -> MhManager.POS_ID
}
val orientation = RewardVideoAd.VERTICAL
mRewardVideoAd = RewardVideoAd(activity, MhManager.APP_ID, postId, orientation, object : RewardVideoAd.RewardVideoListener {
override fun onADCached() {
LogUtil.d(TAG, "onADCached")
mRewardVideoAd?.showAd(activity)
}
override fun onADShow() {
LogUtil.d(TAG, "onADShow")
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_ZERO, "", "")
}
override fun onReward() {
LogUtil.d(TAG, "onReward")
}
override fun onADClick() {
if (AppConfig.needReportClickAdEvent) {
TrackManager.getInstance().reportClickAdEvent()
}
LogUtil.d(TAG, "onADClick")
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_TWO, "", "")
if (isClickScreen) {
// 防止重复
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_FOUR, "", "")
isClickScreen = false
}
videoAdStatusListener?.adDownload()
}
override fun onVideoComplete() {
LogUtil.d(TAG, "onVideoComplete")
}
override fun onADClose() {
LogUtil.d(TAG, "onADClose")
TrackManager.getInstance().reportAddCoinMsg(activity, getAdMapVO(carrierType, Constant.AD_SOURCE_FL, extraId, curCoin))
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_THREE, "", "")
videoAdStatusListener?.adSuccess()
}
override fun onADError(p0: Int) {
LogUtil.d(TAG, "onADError->$p0")
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_FL, Constant.EVENT_TYPE_ONE, (p0).toString(), "")
videoAdStatusListener?.adFail()
}
})
mRewardVideoAd?.loadAd()
}
fun setVideoAdStatusListener(videoAdStatusListener: VideoAdStatusListener?) {
this.videoAdStatusListener = videoAdStatusListener
}
override fun onDestroy() {
mRewardVideoAd = null
}
}
\ No newline at end of file
......@@ -38,6 +38,7 @@ public class VideoAdingManager {
private ShVideoAdManager shVideoAdManager;
private CsjFullVideoAdManager csjFullVideoAdManager;
private KsVideoAdManager ksVideoAdManager;
private MhVideoAdManager mhVideoAdManager;
private int wnWeight;
private int ylhWeight;
......@@ -45,6 +46,7 @@ public class VideoAdingManager {
private int shVideoWeight;
private int csjFullVideoWeight;
private int ksVideoWeight;
private int flVideoWeight;
private ArrayList<WeightBean> weightList;
......@@ -80,6 +82,7 @@ public class VideoAdingManager {
shVideoAdManager = ShVideoAdManager.Companion.getInstance(activity);
csjFullVideoAdManager = CsjFullVideoAdManager.getInstance(activity);
ksVideoAdManager = KsVideoAdManager.Companion.getInstance();
mhVideoAdManager = MhVideoAdManager.Companion.getInstance();
weightList = new ArrayList<>();
}
......@@ -136,6 +139,7 @@ public class VideoAdingManager {
this.csjVideoWeight = csjVideoWeight;
this.ylhWeight = ylhWeight;
this.wnWeight = wnWeight;
this.flVideoWeight = flVideoWeight;
this.shVideoWeight = shVideoWeight;
this.csjFullVideoWeight = csjFullVideoWeight;
this.ksVideoWeight = ksVideoWeight;
......@@ -295,6 +299,11 @@ public class VideoAdingManager {
weight = weight + wnWeight;
LogUtil.d(TAG, "权重值:sdhzWeight:" + wnWeight);
}
if (AppConfig.flVideoAdCount > 0) {
weightList.add(new WeightBean(flVideoWeight, Constant.FL_VEDIO_AD));
weight = weight + flVideoWeight;
LogUtil.d(TAG, "权重值:flVideoWeight:" + flVideoWeight);
}
// 权重随机
if (weightList != null && weightList.size() > 0 && weight > 0) {
......@@ -373,13 +382,16 @@ public class VideoAdingManager {
shVideoAdManager.onDestroy();
shVideoAdManager = null;
}
if (mReceiverBroadcastReceiver != null) {
activity.stopService(new Intent(activity, AppInstallService.class));
activity.unregisterReceiver(mReceiverBroadcastReceiver);
mReceiverBroadcastReceiver = null;
}
if (mhVideoAdManager != null) {
mhVideoAdManager.setVideoAdStatusListener(null);
mhVideoAdManager.onDestroy();
mhVideoAdManager = null;
}
activity = null;
}
......@@ -629,6 +641,43 @@ public class VideoAdingManager {
});
ksVideoAdManager.loadAd(activity, bean.getCurCoin(), bean.getCarrierType(), bean.getExtraId());
} else if (TextUtils.equals(videoAdType, Constant.FL_VEDIO_AD)) {
// 枫岚广告激励视频
if (mhVideoAdManager == null) {
if (activity == null) {
if (videoAdingListener != null) {
videoAdingListener.videoAdingListenerError(Constant.FL_VEDIO_AD);
}
return;
}
mhVideoAdManager = MhVideoAdManager.Companion.getInstance();
}
mhVideoAdManager.setVideoAdStatusListener(new VideoAdStatusListener() {
@Override
public void adSuccess() {
AppConfig.flVideoAdCount--;
if (videoAdingListener != null) {
videoAdingListener.videoAdingListenerSuccess(Constant.FL_VEDIO_AD);
}
}
@Override
public void adFail() {
if (videoAdingListener != null) {
videoAdingListener.videoAdingListenerFail(Constant.FL_VEDIO_AD);
}
}
@Override
public void adDownload() {
isVideoAdDownload = true;
// 注册下载任务监听
registerBroad();
}
});
mhVideoAdManager.loadAd(activity, bean.getCurCoin(), bean.getCarrierType(), bean.getExtraId());
}
} catch (Exception e) {
e.printStackTrace();
......
......@@ -9,8 +9,8 @@ import com.maplehaze.adsdk.MaplehazeSDK
*/
object MhManager {
const val APP_ID = ""
const val POS_ID = ""
const val APP_ID = "10230"
const val POS_ID = "56930"
/**
* 初始化
......
......@@ -133,4 +133,10 @@ public class TrackManager {
trackPresenter.reportAddCoinMsg(activity, vo);
}
}
public void reportErrornterface(String url, String request) {
if (trackPresenter != null ) {
trackPresenter.reportErrornterface(url, request);
}
}
}
......@@ -304,4 +304,26 @@ public class TrackPresenter extends BaseTrackPresenter {
}
});
}
public void reportErrornterface(String url, String request) {
HashMap<String, Object> vo = new HashMap<>();
vo.put("url", url);
vo.put("request", request);
AppHttpManager.getInstance(loanApplication)
.call(loanService.reportErrornterface(vo),
new BaseSubscriber<BaseResponse<JsonObject>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(BaseResponse<JsonObject> baseResponse) {
}
});
}
}
......@@ -638,6 +638,14 @@ public interface LoanService {
@POST("na/getAdcodesInOpenApp")
Observable<BaseResponse<CodeBean>> getAdcodesInOpenApp();
/**
* 临时使用-接口加密异常时调用
*
* @return
*/
@POST("common/reportErrornterface")
Observable<BaseResponse<JsonObject>> reportErrornterface(@Body Map<String, Object> vo);
/**
* 默认http工厂
......
......@@ -6,14 +6,19 @@ import com.bytedance.hume.readapk.HumeSDK;
import com.google.gson.Gson;
import com.wenshu.youyou.BuildConfig;
import com.wenshu.youyou.WenshuApplication;
import com.wenshu.youyou.manager.TrackManager;
import com.wenshu.youyou.manager.UserManager;
import com.wenshu.youyou.mvp.model.AppRequest;
import com.wenshu.youyou.utils.AESUtils;
import com.wenshu.youyou.utils.Base64;
import com.wenshu.youyou.utils.LogUtil;
import com.wenshu.youyou.utils.MD5;
import com.wenshu.library.utils.CommonUtils;
import org.json.JSONObject;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import okhttp3.Interceptor;
......@@ -22,6 +27,9 @@ import okhttp3.MultipartBody;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.Buffer;
import okio.BufferedSource;
/**
* 用拦截器对传输数据加密
......@@ -41,9 +49,26 @@ public class OkHttpInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
String tokenID = UserManager.getInstance().getTokenID();
long time = System.currentTimeMillis();
String channel = createChannel();
Request request = chain.request();
// 加密
request = encrypt(request, tokenID, time, channel);
// header
Request builder = addHeader(request, tokenID, time, channel);
// 解密
Response response = chain.proceed(builder);
response = decrypt(response);
return response;
}
/**
* 创建渠道
*
* @return
*/
private String createChannel() {
String channel = CommonUtils.getAppMetaData(WenshuApplication.getContext(), "CHANNEL_NAME");
try {
// 穿山甲分包渠道
......@@ -55,31 +80,39 @@ public class OkHttpInterceptor implements Interceptor {
} catch (Exception e) {
e.printStackTrace();
}
return channel;
}
Request request = chain.request();
request = encrypt(request, tokenID, time, channel);//加密方法
Request builder = request.newBuilder().
/**
* 添加header
*
* @param request
* @param tokenID
* @param time
* @param channel
* @return
*/
private Request addHeader(Request request, String tokenID, long time, String channel) throws UnsupportedEncodingException {
return request.newBuilder().
addHeader("version", BuildConfig.VERSION_NAME).
addHeader("token", tokenID).
addHeader("channel", channel).
addHeader("new-session", MD5.GetMD5Code(String.valueOf(time))).
addHeader("last-session", Base64.encode(String.valueOf(time).getBytes("UTF-8"))).
build();
return chain.proceed(builder);
}
// json加密
/**
* json加密
*
* @param request
* @param tokenID
* @param time
* @param channel
* @return
* @throws IOException
*/
private Request encrypt(Request request, String tokenID, long time, String channel) throws IOException {
//这个是请求的url,也就是咱们前面配置的baseUrl
String url = request.url().toString();
//是否加密标识
boolean isSign = true;
if (!TextUtils.isEmpty(url)) {
isSign = !url.contains("common/");
}
//获取请求body,只有@Body 参数的requestBody 才不会为 null
RequestBody requestBody = request.body();
if (requestBody != null) {
......@@ -96,7 +129,7 @@ public class OkHttpInterceptor implements Interceptor {
String checkStr = valueStr;
//加密
if (isSign && !TextUtils.isEmpty(valueStr)) {
if (isSign(request) && !TextUtils.isEmpty(valueStr)) {
valueStr = AESUtils.encrypt(valueStr, aesKey);
}
......@@ -123,25 +156,62 @@ public class OkHttpInterceptor implements Interceptor {
return request;
}
// json解密
// private Response decrypt(Response response) throws IOException {
// if (response.isSuccessful()) {
// //the response data
// ResponseBody body = response.body();
// BufferedSource source = body.source();
// source.request(Long.MAX_VALUE); // Buffer the entire body.
// Buffer buffer = source.buffer();
// Charset charset = Charset.defaultCharset();
// MediaType contentType = body.contentType();
// if (contentType != null) {
// charset = contentType.charset(charset);
// }
// String string = buffer.clone().readString(charset);
// //解密方法,需要自己去实现
// String bodyString = AESUtils.decrypt(string, aesKey);
// ResponseBody responseBody = ResponseBody.create(contentType, bodyString);
// response = response.newBuilder().body(responseBody).build();
// }
// return response;
// }
/**
* json解密
*
* @param response
* @return
* @throws IOException
*/
private Response decrypt(Response response) throws IOException {
if (response.isSuccessful() && isSign(response.request())) {
//the response data
ResponseBody body = response.body();
BufferedSource source = body.source();
source.request(Long.MAX_VALUE); // Buffer the entire body.
Buffer buffer = source.buffer();
Charset charset = Charset.defaultCharset();
MediaType contentType = body.contentType();
if (contentType != null) {
charset = contentType.charset(charset);
}
String rspString = buffer.clone().readString(charset);
// 解密
try {
JSONObject json = new JSONObject(rspString);
if (!json.isNull("data")) {
Object data = json.get("data");
rspString = AESUtils.detrypt(data.toString(), aesKey);
JSONObject jsonArray = new JSONObject(rspString);
json.put("data", jsonArray);
rspString = json.toString();
// rspString = json.toString().replace("\\", "");
}
} catch (Exception e) {
LogUtil.d("OkHttpInterceptor", "json解密失败。url:" + response.request().url().toString() + "\n\n 响应报文:" + buffer.clone().readString(charset));
TrackManager.getInstance().reportErrornterface(response.request().url().toString(), buffer.clone().readString(charset));
e.printStackTrace();
}
ResponseBody responseBody = ResponseBody.create(contentType, rspString);
response = response.newBuilder().body(responseBody).build();
}
return response;
}
/**
* 是否加/解密 - 接口非common都加/解密
*
* @param request
* @return true=加/解密
*/
private boolean isSign(Request request) {
String url = request.url().toString();
//是否加密标识
boolean isSign = true;
if (!TextUtils.isEmpty(url)) {
isSign = !url.contains("common/");
}
return isSign;
}
}
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