跳到主要内容

UWP Unity 接入

Universal Windows Platform 微软平台


slug: /client/unity/uwp

Universal Windows Platform Unity 接入

一、接入步骤

Unity PlayerSettings配置

Scripting Define Symbols

  • 添加UWP_SDK

导入电魂Uinty (UWP)SDK资源文件

电魂Unity 资源如下 图片 1.png

导入UWP SDK

拷贝电魂CPP文件和MG渠道 UWP SDK到Visual Studio 工程中并引入 图片 2.jpg 效果如下 图片 3.jpg

添加电魂SDK引用

在MainPage.xaml.cpp类中 导入头文件

#include "DHUWPSDKHelper.h"

图片 4.jpg

调用SDK初始化方法,可以放在MainPage::MainPage()方法中

DHSDKInit();

图片 5.jpg

导入json 插件

打开 工具->NuGet包管理器->管理解决方案的NuGet程序包 图片 6.png

浏览输入nlohman插件,下载安装到工程中 图片 7.jpg

安装MG SDK

之前步骤已将MG SDK的包拷贝到工程目录中,(包名称MiracleGames.Sdk.Uwp.2.7.3.nupkg) 然后在前面打开的NuGet管理界面中搜索到SDK包安装即可 图片 8.jpg

工程功能配置

双击打开Package.appxmanifest,点击功能,添加Internet和专用网络 权限

图片 9.jpg

配置渠道回调地址

同样在Package.appxmanifest中 在内容URI 中配置域名 https://api.mguwp.com https://api.mguwp.net 如下图 图片 10.png

二、接口调用

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必传,其它暂时不必须

名称类型含义
currencyTypeNSString货币单位(国际货币单位标准),如果其它参数传递了金额,则货币单位一定要带上。例如:CNY
totalPayNSString总充值金额(单位:分)。例如:6000
todayPayNSString今天总充值金额(单位:分)。例如:600
totalPayCountNSString总充值次数。例如:10
todayPayCountNSString今天充值笔数。例如:1
roleMoneyNSString角色当前金钱数量。例如:600
maxRechageNSString角色最大充值金额(单位:分)。例如:600
totayMaxRechageNSString角色今天最大充值金额(单位:分)。例如:600
roleLevelNSString角色等级。例如:8
VIPLevelNSString角色VIP等级。例如:2
CEValueNSString战斗力值。例如:100
EXPValueNSString经验值。例如:10000
gameVersionNSString游戏版本号。例如:1.1
loginTimeNSString角色登录时间。例如:2020-2-18 11:00:00
lastLoginTimeNSString角色上次登录事件。例如:2020-02-17 12:00
registerTimeNSString角色注册时间。例如:2019-12-12 9:09:00
onlineTimeNSString角色在线时长(单位:秒)。例如:1000
gameStageNSString角色游戏关卡数。例如:12
roleMemberNSString角色会员状态。例如: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)
{
//请求失败
}
}