华为接入
第一步:进入网站下载国内 我做的是国内,国外的还没做,有需要的可以联系我
第五步:创建好项目src复制过去肯定报错 因为没有添加jar和资源,所以我们要在解压,放入新项目的相应位置,然后就ok了
第六步:以上配置完成下面就是抽调接口,华为更新 可以让我们更容易对一些方法抽调灵活使用,废话不多说直接上代码
初始化:直接调用这里就可以了
HMSAgent.init(mActivity);
LxLogger.d("HuaWei初始化", "HuaWei初始化");
HMSAgent.init(mActivity);
LxLogger.d("HuaWei初始化", "HuaWei初始化");
登陆:
// showLog("game login: begin");
HMSAgent.Game.login(new LoginHandler() {
@Override
public void onResult(int retCode, GameUserData userData) {
if (retCode == HMSAgent.AgentResultCode.HMSAGENT_SUCCESS && userData != null) {
// showLog("game login: onResult: retCode=" + retCode + " user=" + userData.getDisplayName() + "|" + userData.getPlayerId() + "|" + userData.getIsAuth() + "|" + userData.getPlayerLevel());
// 当登录成功时,此方法会回调2次,
// 第1次:只回调了playerid;特点:速度快;在要求快速登录,并且对安全要求不高时可以用此playerid登录
// 第2次:回调了所有信息,userData.getIsAuth()为1;此时需要对登录结果进行验签
if (userData.getIsAuth() == 1) {
// 如果需要对登录结果进行验签,请发送请求到开发者服务器进行(安全起见,私钥要放在服务端保存)。
// 下面工具方法仅为了展示验签请求的逻辑,实际实现应该放在开发者服务端。
GameLoginSignUtil.checkLoginSign(appId, cpId, game_priv_key, game_public_key, userData, new ICheckLoginSignHandler() {
@Override
public void onCheckResult(String code, String resultDesc, boolean isCheckSuccess) {
// showLog("game login check sign: onResult: retCode=" + code + " resultDesc=" + resultDesc + " isCheckSuccess=" + isCheckSuccess);
HMSAgent.Game.login(new LoginHandler() {
@Override
public void onResult(int retCode, GameUserData userData) {
if (retCode == HMSAgent.AgentResultCode.HMSAGENT_SUCCESS && userData != null) {
// showLog("game login: onResult: retCode=" + retCode + " user=" + userData.getDisplayName() + "|" + userData.getPlayerId() + "|" + userData.getIsAuth() + "|" + userData.getPlayerLevel());
// 当登录成功时,此方法会回调2次,
// 第1次:只回调了playerid;特点:速度快;在要求快速登录,并且对安全要求不高时可以用此playerid登录
// 第2次:回调了所有信息,userData.getIsAuth()为1;此时需要对登录结果进行验签
if (userData.getIsAuth() == 1) {
// 如果需要对登录结果进行验签,请发送请求到开发者服务器进行(安全起见,私钥要放在服务端保存)。
// 下面工具方法仅为了展示验签请求的逻辑,实际实现应该放在开发者服务端。
GameLoginSignUtil.checkLoginSign(appId, cpId, game_priv_key, game_public_key, userData, new ICheckLoginSignHandler() {
@Override
public void onCheckResult(String code, String resultDesc, boolean isCheckSuccess) {
// showLog("game login check sign: onResult: retCode=" + code + " resultDesc=" + resultDesc + " isCheckSuccess=" + isCheckSuccess);
//这里给服务器传入相应的登陆参数:
}
});
}
} else {
//showLog("game login: onResult: retCode=" + retCode);
}
}
}
});
}
} else {
//showLog("game login: onResult: retCode=" + retCode);
}
}
@Override
public void onChange() {
// 此处帐号登录发生变化,需要重新登录
// showLog("game login: login changed!");
login();
}
}, 1);
public void onChange() {
// 此处帐号登录发生变化,需要重新登录
// showLog("game login: login changed!");
login();
}
}, 1);
支付接口:参数一一对应,这是最重要的和参数的类型
public void pay(Hashtable<String, String> productInfo) {
final PayReq request = new PayReq();
request.amount = productInfo.get("amount");
request.productName = productInfo.get("productName");
request.productDesc = productInfo.get("productDesc");
request.requestId = productInfo.get("requestId");
request.applicationID = "";// 应用ID,在华为开发者联盟上获取的APP ID。
request.merchantId = "";// 商户ID。来源:在华为开发者联盟上获取的“支付ID”
request.serviceCatalog = "X6";// 游戏设置为"X6",应用设置为"X5"
request.sdkChannel = 3; // 游戏设置为3,应用设置为1。
request.sign = PaySignUtil.calculateSignString(request, pay_priv_key);
LxPluginWrapper.runOnMainThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
HMSAgent.Pay.pay(request, new PayHandler() {
final PayReq request = new PayReq();
request.amount = productInfo.get("amount");
request.productName = productInfo.get("productName");
request.productDesc = productInfo.get("productDesc");
request.requestId = productInfo.get("requestId");
request.applicationID = "";// 应用ID,在华为开发者联盟上获取的APP ID。
request.merchantId = "";// 商户ID。来源:在华为开发者联盟上获取的“支付ID”
request.serviceCatalog = "X6";// 游戏设置为"X6",应用设置为"X5"
request.sdkChannel = 3; // 游戏设置为3,应用设置为1。
request.sign = PaySignUtil.calculateSignString(request, pay_priv_key);
LxPluginWrapper.runOnMainThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
HMSAgent.Pay.pay(request, new PayHandler() {
@Override
public void onResult(int retCode, PayResultInfo payInfo) {
// TODO Auto-generated method stub
if (retCode == HMSAgent.AgentResultCode.HMSAGENT_SUCCESS && payInfo != null) {
boolean checkRst = PaySignUtil.checkSign(payInfo, pay_pub_key);
LxLogger.d("game pay: onResult: pay success and checksign=" + checkRst);
if (checkRst) {
// 支付成功并且验签成功,发放商品
} else {
// 签名失败,需要查询订单状态:对于没有服务器的单机应用,调用查询订单接口查询;其他应用到开发者服务器查询订单状态。
}
} else if (retCode == HMSAgent.AgentResultCode.ON_ACTIVITY_RESULT_ERROR
|| retCode == PayStatusCodes.PAY_STATE_TIME_OUT
|| retCode == PayStatusCodes.PAY_STATE_NET_ERROR) {
// 需要查询订单状态:对于没有服务器的单机应用,调用查询订单接口查询;其他应用到开发者服务器查询订单状态。
} else {
LxLogger.d("game pay: onResult: pay fail=" + retCode);
// 其他错误码意义参照支付api参考
}
}
});
}
});
public void onResult(int retCode, PayResultInfo payInfo) {
// TODO Auto-generated method stub
if (retCode == HMSAgent.AgentResultCode.HMSAGENT_SUCCESS && payInfo != null) {
boolean checkRst = PaySignUtil.checkSign(payInfo, pay_pub_key);
LxLogger.d("game pay: onResult: pay success and checksign=" + checkRst);
if (checkRst) {
// 支付成功并且验签成功,发放商品
} else {
// 签名失败,需要查询订单状态:对于没有服务器的单机应用,调用查询订单接口查询;其他应用到开发者服务器查询订单状态。
}
} else if (retCode == HMSAgent.AgentResultCode.ON_ACTIVITY_RESULT_ERROR
|| retCode == PayStatusCodes.PAY_STATE_TIME_OUT
|| retCode == PayStatusCodes.PAY_STATE_NET_ERROR) {
// 需要查询订单状态:对于没有服务器的单机应用,调用查询订单接口查询;其他应用到开发者服务器查询订单状态。
} else {
LxLogger.d("game pay: onResult: pay fail=" + retCode);
// 其他错误码意义参照支付api参考
}
}
});
}
});
}
上传信息接口:也是接口最重要
public void submitLoginGameRole(Map<String, String> data) {
LxLogger.d("submitLoginGameRole");
for (Map.Entry<String, String> entryData : data.entrySet()) {
LxLogger.d("key:" + entryData.getKey() + " value:" + entryData.getValue());
}
GamePlayerInfo playerInfo = new GamePlayerInfo();
// HashMap<String, String> playerInfo = new HashMap<String, String>();
/**
* 将用户的等级等信息保存起来,必须的参数为RoleInfo.GAME_RANK(等级)/RoleInfo.GAME_ROLE(角色名称)
* /RoleInfo.GAME_AREA(角色所属区)/RoleInfo.GAME_SOCIATY(角色所属公会名称)
* 全部使用String类型存放
*/
/**
* the CP save the level, role, area and sociaty of the game player into
* the SDK
*/
playerInfo.area = data.get("0");
playerInfo.rank = data.get("roleLevel");
playerInfo.role = data.get("roleName");
playerInfo.sociaty = data.get("zoneName");
HMSAgent.Game.savePlayerInfo(playerInfo, new SaveInfoHandler() {
LxLogger.d("submitLoginGameRole");
for (Map.Entry<String, String> entryData : data.entrySet()) {
LxLogger.d("key:" + entryData.getKey() + " value:" + entryData.getValue());
}
GamePlayerInfo playerInfo = new GamePlayerInfo();
// HashMap<String, String> playerInfo = new HashMap<String, String>();
/**
* 将用户的等级等信息保存起来,必须的参数为RoleInfo.GAME_RANK(等级)/RoleInfo.GAME_ROLE(角色名称)
* /RoleInfo.GAME_AREA(角色所属区)/RoleInfo.GAME_SOCIATY(角色所属公会名称)
* 全部使用String类型存放
*/
/**
* the CP save the level, role, area and sociaty of the game player into
* the SDK
*/
playerInfo.area = data.get("0");
playerInfo.rank = data.get("roleLevel");
playerInfo.role = data.get("roleName");
playerInfo.sociaty = data.get("zoneName");
HMSAgent.Game.savePlayerInfo(playerInfo, new SaveInfoHandler() {
@Override
public void onResult(int retCode) {
// TODO Auto-generated method stub
LxLogger.d("game savePlayerInfo: onResult=" + retCode);
LxLogger.d("result.rtnCode != Result.RESULT_OK");
}
});
}
public void onResult(int retCode) {
// TODO Auto-generated method stub
LxLogger.d("game savePlayerInfo: onResult=" + retCode);
LxLogger.d("result.rtnCode != Result.RESULT_OK");
}
});
}
悬浮窗接口:
退出接口:
public void exit() {
LxLogger.d("exit");
System.exit(0);
}
LxLogger.d("exit");
System.exit(0);
}
接口基本已经全部完成了下面是清单文件配置,这个应该就不用说的 按着要求一步一步配置就可以 了