UWP Unity 接入
Universal Windows Platform 微软平台
slug: /client/unity/uwp
Universal Windows Platform Unity 接入
一、接入步骤
Unity PlayerSettings配置
Scripting Define Symbols
- 添加UWP_SDK
导入电魂Uinty (UWP)SDK资源文件
电魂Unity 资源如下
导入UWP SDK
拷贝电魂CPP文件和MG渠道 UWP SDK到Visual Studio 工程中并引入 效果如下
添加电魂SDK引用
在MainPage.xaml.cpp类中 导入头文件
#include "DHUWPSDKHelper.h"
调用SDK初始化方法,可以放在MainPage::MainPage()方法中
DHSDKInit();
导入json 插件
打开 工具->NuGet包管理器->管理解决方案的NuGet程序包
浏览输入nlohman插件,下载安装到工程中
安装MG SDK
之前步骤已将MG SDK的包拷贝到工程目录中,(包名称MiracleGames.Sdk.Uwp.2.7.3.nupkg) 然后在前面打开的NuGet管理界面中搜索到SDK包安装即可
工程功能配置
双击打开Package.appxmanifest,点击功能,添加Internet和专用网络 权限
配置渠道回调地址
同样在Package.appxmanifest中 在内容URI 中配置域名 https://api.mguwp.com https://api.mguwp.net 如下图
二、接口调用
1.设置参数
不同包的参数不同,SDK侧会提供对应参数,游戏调用接口配置进去即可
DHHostPlatformSDK.DHHostPlatformParam param = new DHHostPlatformSDK.DHHostPlatformParam();
param.DHAppId = "1196183373";//电魂开放平台配置的appid
param.DHChannelId = "3492"; //电魂开放平台配置的渠道id
param.DHInviteCode = "585D0B805AEF45B6B"; //电魂开放平台配置的InviteCode,固定即可
param.HostPlatformAppId = "EDCDDDEC72";// MG 渠道后台 AppKey
param.HostUrl = DHHostPlatformSDK.DHHostPlatformConst.HOST_HONGKONG; //环境
param.mainChannel = "101104";// 电魂开放平台配置的二级渠道;
param.subChannel = "101108";// 电魂开放平台配置的三级渠道;
DHUWPSDK.setHostPlatformParam(JsonUtility.ToJson(param));
2.初始化
所有其他功能性接口例如登录,支付等需要在SDK初始化成功后才能调用,否则可能会失败或者异常 调用初始化接口
DHSDKHelper.init(mUnionSdkCallback);
回调接口
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
Debug.Log("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
message("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateUIText?.Invoke(1, "request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateRoomUIAction?.Invoke(requestCode, resultCode, resultData);
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_INIT)
{
// 初始化成功 返回调用
Debug.Log("初始化成功");
}
} else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
if (requestCode == DHSDKHelper.DHSDKConst.REQ_INIT)
{
// 初始化失败调用
}
}
3.登录接口
登录接口
DHSDKHelper.login(mUnionSdkCallback);
回调接口
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
Debug.Log("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
message("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateUIText?.Invoke(1, "request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateRoomUIAction?.Invoke(requestCode, resultCode, resultData);
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_LOGIN)
{
/**
登录成功后 返回调用 请查看各返回字段说明
json 数据格式
*/
Debug.Log("login:" + resultData);
// sdk登录成功后 需要游戏服务端做校验 详细校验过程 请查看服务端文档登录校验说明
var loginJson = LitJson.JSON.Parse(resultData);
Debug.Log("loginJson:" + loginJson.ToString());
string logintype = loginJson["loginType"].ToString();
string Token = loginJson["token"].ToString();
uid = loginJson["accountId"].ToString();
uname = loginJson["account"].ToString();
}
} else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
if (requestCode == DHSDKHelper.DHSDKConst.REQ_LOGIN)
{
//登录失败
}
}
注意:SDK登录成功返回用户accountid,token等信息后,游戏还需要去服务端校验这些信息
登录成功返回参数 | 参数名称 | 参数类型 | 参数含义 | | :--- | :--- | :--- | | logintype | NSString | 登录类型 | | token | NSString | 账号token | | account | NSString | 电魂账号名 | | accountid | NSString | 电魂账号id,为数字组成 | | sign | NSString | 电魂账号sign |
4.支付
调用支付接口
DHSDKHelper.DHSDKPayInfo payInfo = new DHSDKHelper.DHSDKPayInfo();
payInfo.Uid = "9453082";//必传,用户id 我们sdk这边电魂id 授权或电魂登录返回数据中的accountid
payInfo.RoleId = "123321"; //必传,角色id 没有可以填空
payInfo.ProNum = "1"; //必传,商品数量
payInfo.Price = "18"; //必传,商品价格 单位分
payInfo.Currency = "CNY"; // 选传,货币类型 国内CNY 海外USD
payInfo.CPOrderId = "1234563344332234343243234"; //必传,游戏支付订单号
payInfo.RoleLevel = "10"; //必传,游戏角色等级
payInfo.ProId = "com.overseas.totnewnew.rcdiamond.6"; //必传,支付道具id
// 重要参数说明 角色大区id 如果游戏存在大区概念 正式发布游戏时请填入角色大区id 测试环境填100 没有则 测试支付环境下填100 正式发布填1
payInfo.AreaId = "100";
//角色详细信息,用于切换三方支付等使用,其中roleLevel必传
JsonData gameInfoJson = new JsonData();
gameInfoJson["roleLevel"] = "10"; //角色等级。例如:8
gameInfoJson["VIPLevel"] = "1"; //角色VIP等级。例如:2
gameInfoJson["currencyType"] = "USD"; //货币单位(国际货币单位标准),如果其它参数传递了金额,则货币单位一定要带上。例如:CNY
gameInfoJson["roleMoney"] = "600"; //角色当前金钱数量。例如:600
gameInfoJson["CEValue"] = "100"; //战斗力值。例如:100
gameInfoJson["EXPValue"] = "10000"; //经验值。例如:10000
payInfo.GameInfo = gameInfoJson.ToJson();
payInfo.Uname = "user name"; // 选传,角色名称
payInfo.ProName = "Gold"; // 必传,商品名称
payInfo.Memo = "This is gold"; // 选传,附加信息
DHSDKHelper.pay(payInfo, mUnionSdkCallback);
gameInfo字段参数
用于后台判断逻辑例如判断是否达到条件切换支付方式等
注:roleLvel必传,其它暂时不必须
名称 | 类型 | 含义 |
---|---|---|
currencyType | NSString | 货币单位(国际货币单位标准),如果其它参数传递了金额,则货币单位一定要带上。例如:CNY |
totalPay | NSString | 总充值金额(单位:分)。例如:6000 |
todayPay | NSString | 今天总充值金额(单位:分)。例如:600 |
totalPayCount | NSString | 总充值次数。例如:10 |
todayPayCount | NSString | 今天充值笔数。例如:1 |
roleMoney | NSString | 角色当前金钱数量。例如:600 |
maxRechage | NSString | 角色最大充值金额(单位:分)。例如:600 |
totayMaxRechage | NSString | 角色今天最大充值金额(单位:分)。例如:600 |
roleLevel | NSString | 角色等级。例如:8 |
VIPLevel | NSString | 角色VIP等级。例如:2 |
CEValue | NSString | 战斗力值。例如:100 |
EXPValue | NSString | 经验值。例如:10000 |
gameVersion | NSString | 游戏版本号。例如:1.1 |
loginTime | NSString | 角色登录时间。例如:2020-2-18 11:00:00 |
lastLoginTime | NSString | 角色上次登录事件。例如:2020-02-17 12:00 |
registerTime | NSString | 角色注册时间。例如:2019-12-12 9:09:00 |
onlineTime | NSString | 角色在线时长(单位:秒)。例如:1000 |
gameStage | NSString | 角色游戏关卡数。例如:12 |
roleMember | NSString | 角色会员状态。例如:dayCard;monthcard;yearCard |
回调接口
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
Debug.Log("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
message("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateUIText?.Invoke(1, "request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateRoomUIAction?.Invoke(requestCode, resultCode, resultData);
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_PAY)
{
//支付成功
}
} else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
if (requestCode == DHSDKHelper.DHSDKConst.REQ_PAY)
{
//支付失败
}
}
5.设置退屏广告
调用接口
JsonData json = new JsonData();
json["placementId"] = "FD1A9AB7F5"; //广告位id
JsonData jsonParam = new JsonData();
jsonParam["plugin_type"] = "tools";
jsonParam["unionsdk_type"] = "platform";
jsonParam["event_type"] = "ExitAds";
jsonParam["event_key"] = "";
jsonParam["jsonstring"] = json.ToJson();
DHSDKHelper.exec(jsonParam.ToJson(), mUnionSdkCallback);
回调
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
Debug.Log("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
message("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateUIText?.Invoke(1, "request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateRoomUIAction?.Invoke(requestCode, resultCode, resultData);
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["event_type"].ToString(); //请求类型
string result = execJson["result"].ToString(); //请求结果
if(event_type == "ExitAds")
{
if (result == "0")
{
//请求成功
}
else
{
//请求失败
}
}
}
} else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
//请求失败
}
}
6.打开评论界面
调用接口
JsonData jsonParam2 = new JsonData();
jsonParam2["plugin_type"] = "tools";
jsonParam2["unionsdk_type"] = "platform";
jsonParam2["event_type"] = "review";
jsonParam2["event_key"] = "";
DHSDKHelper.exec(jsonParam2.ToJson(), mUnionSdkCallback);
回调
public void onDHSDKResult(int requestCode, int resultCode, String resultData)
{
Debug.Log("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
message("request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateUIText?.Invoke(1, "request:" + requestCode + ", result:" + resultCode + ", Data:" + resultData);
updateRoomUIAction?.Invoke(requestCode, resultCode, resultData);
if (resultCode == DHSDKHelper.DHSDKConst.RET_OK)
{
// 所有接口成功返回调用逻辑
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
var execJson = LitJson.JSON.Parse(resultData);
Debug.Log("execJson:" + execJson.ToString());
string event_type = execJson["event_type"].ToString(); //请求类型
string result = execJson["result"].ToString(); //请求结果
if(event_type == "review")
{
if (result == "0")
{
//请求成功
}
else
{
//请求失败
}
}
}
} else if (resultCode == DHSDKHelper.DHSDKConst.RET_FAIL)
{
if (requestCode == DHSDKHelper.DHSDKConst.REQ_EXEC)
{
//请求失败
}
}