根据测试反馈修改帮助反馈问题

新增小游戏跳一跳回血和必中的回调
新增关闭发红包页面后自动打开礼物栏的功能
调整小游戏跳一跳回调防抖
This commit is contained in:
2024-04-26 10:08:19 +08:00
parent 1c9493d7c8
commit 1f12187766
20 changed files with 271 additions and 50 deletions

View File

@@ -454,7 +454,7 @@ public class CommonHttpUtil {
* 上传文件 获取七牛云token的接口
*/
public static void getUploadQiNiuToken(HttpCallback callback, boolean isImg) {
HttpClient.getInstance().get("Pdluserhome.getQiNiuToken", "Pdluserhome.getQiNiuToken")
HttpClient.getInstance().get("Pdluserhome.getQiNiuToken2", "Pdluserhome.getQiNiuToken2")
.params("uid", CommonAppConfig.getInstance().getUid())
.params("token", CommonAppConfig.getInstance().getToken())
.params("ext", isImg ? ".jpeg" : ".mp4")

View File

@@ -1210,4 +1210,26 @@ public interface PDLiveApi {
@GET("/api/public/?service=User.userFeedbackRestrict")
Observable<ResponseModel<List<BaseModel>>> checkFeedback();
/**
*
* @param roomId 房间ID
* @param cmd 事件名称 生命值:addHeart 自动跳:hit
* @param value 价格
* @param gameId 游戏ID
* @param fromUid 付费用户uid
* @param toUid 目标用户uid
* @param payload 附加值
* @return
*/
@GET("/api/public/?service=Sudgameserver.createOrder")
Observable<ResponseModel<List<BaseModel>>> createGameOrder(
@Query("room_id")String roomId,
@Query("cmd")String cmd,
@Query("value")String value,
@Query("mg_id")String gameId,
@Query("from_uid")String fromUid,
@Query("to_uid")String toUid,
@Query("payload")String payload
);
}

View File

@@ -95,6 +95,7 @@ import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Query;
/**
@@ -3220,7 +3221,7 @@ public class LiveNetManager {
}
public void checkFeedback(
HttpCallback<HttpCallbackModel> callback) {
HttpCallback<HttpCallbackModel> callback) {
API.get().pdLiveApi(mContext)
.checkFeedback()
.subscribeOn(Schedulers.io())
@@ -3245,6 +3246,40 @@ public class LiveNetManager {
}).isDisposed();
}
public void createGameOrder(
String roomId,
String cmd,
String value,
String gameId,
String fromUid,
String toUid,
String roundId,
String payload
, HttpCallback<HttpCallbackModel> callback) {
API.get().pdLiveApi(mContext)
.createGameOrder(roomId, cmd, value, gameId, fromUid, toUid,payload)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<List<BaseModel>>>() {
@Override
public void accept(ResponseModel<List<BaseModel>> responseModel) {
if (callback != null) {
HttpCallbackModel model = new HttpCallbackModel();
model.setCode(responseModel.getData().getCode());
model.setMsg(responseModel.getData().getMsg());
callback.onSuccess(model);
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
if (callback != null) {
callback.onError(mContext.getString(com.yunbao.common.R.string.net_error));
}
}
}).isDisposed();
}
private MultipartBody.Part createUploadFile(File file) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
return MultipartBody.Part.createFormData("file", file.getName(), requestBody);

View File

@@ -47,7 +47,7 @@ public abstract class ImageResultCallback {
UploadQnImpl mUploadStrategy = new UploadQnImpl(mContext);
List<UploadBean> beans = new ArrayList<>();
beans.add(new UploadBean(file, UploadBean.IMG));
mUploadStrategy.upload(beans, false, new UploadCallback() {
mUploadStrategy.upload(beans, true, new UploadCallback() {
@Override
public void onFinish(List<UploadBean> list, boolean success) {
if (success) {

View File

@@ -142,7 +142,10 @@ public abstract class BaseGameViewModel implements SudFSMMGListener {
// 给装饰类设置回调
sudFSMMGDecorator.setSudFSMMGListener(this);
sudFSMMGDecorator.setGameId(gameId);
sudFSMMGDecorator.setRoomId(gameRoomId);
sudFSMMGDecorator.setUserId(getUserId());
Log.i("游戏回调",code+" "+gameId+" "+gameRoomId+" ");
// 调用游戏sdk加载游戏
ISudFSTAPP iSudFSTAPP = SudMGP.loadMG(activity, getUserId(), gameRoomId, code, gameId, getLanguageCode(), sudFSMMGDecorator);

View File

@@ -23,6 +23,10 @@ import tech.sud.mgp.core.ISudFSMStateHandle;
*/
public class SudFSMMGDecorator implements ISudFSMMG {
private static final String TAG = "游戏回调";
private long gameId;
private String gameRoomId;
private String userId;
// 回调
private SudFSMMGListener sudFSMMGListener;
@@ -227,10 +231,10 @@ public class SudFSMMGDecorator implements ISudFSMMG {
}
break;
case SudMGPMGState.MG_COMMON_GAME_STATE: // 10. 游戏状态
Log.e("onGameStateChange", "mg_common_game_state:::::" + "dataJson:::::"+dataJson);
Log.e("onGameStateChange", "mg_common_game_state:::::" + "dataJson:::::" + dataJson);
SudMGPMGState.MGCommonGameState mgCommonGameState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameState.class);
sudFSMMGCache.onGameMGCommonGameState(mgCommonGameState);
if (mgCommonGameState.gameState==2){
if (mgCommonGameState.gameState == 2) {
Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_STATE));
}
if (listener == null) {
@@ -354,6 +358,13 @@ public class SudFSMMGDecorator implements ISudFSMMG {
break;
case SudMGPMGState.MG_COMMON_GAME_CREATE_ORDER: // 25. 创建订单
SudMGPMGState.MGCommonGameCreateOrder mgCommonGameCreateOrder = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameCreateOrder.class);
if (mgCommonGameCreateOrder != null) {
mgCommonGameCreateOrder.gameId = gameId;
mgCommonGameCreateOrder.gameRoomId = gameRoomId;
mgCommonGameCreateOrder.userId = userId;
}
Log.i(TAG, "onGameStateChange: " + dataJson);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
@@ -1021,4 +1032,15 @@ public class SudFSMMGDecorator implements ISudFSMMG {
return sudFSMMGCache;
}
public void setGameId(long gameId) {
this.gameId = gameId;
}
public void setRoomId(String gameRoomId) {
this.gameRoomId = gameRoomId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}

View File

@@ -5,6 +5,7 @@
package com.yunbao.common.sud.decorator;
import com.yunbao.common.sud.decorator.game.JumpEvent;
import com.yunbao.common.sud.state.SudMGPMGState;
import com.yunbao.common.utils.ISudFSMStateHandleUtils;
@@ -271,7 +272,13 @@ public interface SudFSMMGListener {
* mg_common_game_create_order
*/
default void onGameMGCommonGameCreateOrder(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameCreateOrder model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
if ("addHeart".equals(model.cmd)) {
JumpEvent.addHeart(model);
} else if ("hit".equals(model.cmd)) {
JumpEvent.hit(model);
} else {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
}
/**

View File

@@ -0,0 +1,47 @@
package com.yunbao.common.sud.decorator.game;
import com.yunbao.common.bean.HttpCallbackModel;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.sud.state.SudMGPMGState;
import com.yunbao.common.utils.AppManager;
public class JumpEvent {
private static long clickTimer = 0;
public static void addHeart(SudMGPMGState.MGCommonGameCreateOrder order) {
createOrder(order);
}
public static void hit(SudMGPMGState.MGCommonGameCreateOrder order) {
createOrder(order);
}
private synchronized static void createOrder(SudMGPMGState.MGCommonGameCreateOrder order) {
if (System.currentTimeMillis() - clickTimer < 1000) {
//TODO 防止重复点击
return;
}
clickTimer = System.currentTimeMillis();
LiveNetManager.get(AppManager.getInstance().getLastActivity())
.createGameOrder(order.gameRoomId,
order.cmd,
order.value + "",
order.gameId + "",
order.fromUid,
order.toUid,
order.gameRoomId,
order.payload,
new HttpCallback<HttpCallbackModel>() {
@Override
public void onSuccess(HttpCallbackModel data) {
}
@Override
public void onError(String error) {
}
});
}
}

View File

@@ -496,6 +496,10 @@ public class SudMGPMGState implements Serializable {
public String toUid; // 目标用户uid
public long value; // 所属的游戏价值
public String payload; // 扩展数据 json 字符串, 特殊可选
public long gameId;
public String gameRoomId;
public String userId;
}
/**

View File

@@ -1,20 +1,12 @@
package com.yunbao.common.utils;
import static com.yalantis.ucrop.util.FileUtils.getDataColumn;
import android.Manifest;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.DocumentsProvider;
import android.provider.MediaStore;
import androidx.documentfile.provider.DocumentFile;
import androidx.fragment.app.FragmentActivity;
import androidx.core.content.FileProvider;
@@ -46,6 +38,11 @@ public class ProcessImageUtil extends ProcessResultUtil {
private File mCorpResult;//裁剪后得到的图片
private ImageResultCallback mResultCallback;
private boolean mNeedCrop;//是否需要裁剪
private boolean mNeedGif;//允许gif图
public void setNeedGif(boolean mNeedGif) {
this.mNeedGif = mNeedGif;
}
public ProcessImageUtil(FragmentActivity activity) {
super(activity);
@@ -103,6 +100,9 @@ public class ProcessImageUtil extends ProcessResultUtil {
@Override
public void onFailure() {
ToastUtil.show(mContext.getString(R.string.img_camera_cancel));
if (mResultCallback != null) {
mResultCallback.onFailure();
}
}
};
mAlumbResultCallback = new ActivityResultCallback() {
@@ -221,9 +221,14 @@ public class ProcessImageUtil extends ProcessResultUtil {
* 打开相册,选择文件
*/
private void chooseFile() {
String[] mimeTypes = {"image/png", "image/jpg", "image/jpeg"};
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.setType("*/*");
if (mNeedGif) {
mimeTypes = new String[]{"image/png", "image/jpg", "image/jpeg", "image/gif"};
}
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
if (Build.VERSION.SDK_INT < 19) {
intent.setAction(Intent.ACTION_GET_CONTENT);
} else {