文章目录
文档修订记录
文档版本 | 文档更新日期 | 文档更新内容 |
---|---|---|
3.3.83 | 2025.01.16 | 1.「渠道平台指引」华为、vivo、OPPO小游戏新增创建桌面图标接口 |
3.3.82 | 2025.01.03 | 1.「渠道平台指引」新增美团小游戏 角色上报、添加快捷方式、获取启动参数、一键订阅二楼任务等特殊接口和回调 |
3.3.82 | 2025.01.03 | 1.「渠道平台指引」新增美团小游戏 角色上报、添加快捷方式、获取启动参数、一键订阅二楼任务等特殊接口和回调 |
3.3.78 | 2024.12.09 | 1.新增支付宝小游戏 2.新增特殊方法接口 3.「渠道平台指引」新增支付宝小游戏行为数据上报,设首、复访任务,游戏圈等特殊接口和回调 |
3.3.76 | 2024.11.28 | 1.接入华为快游戏、OPPO小游戏、vivo小游戏;2.新增「打开客服对话」接口 |
3.3.73 | 2024.11.08 | 1.聚合接口初版。2.接入支付宝小游戏 |
接入须知
1.各个渠道如何配置,请跳转到快游戏接入配置指引:
2.服务端验证接入,请查看快游戏服务端文档请查阅:点击跳转
接入准备
1.下载对接资源:点我下载
2.将NebulaQuick.unitypackage
导入到您的Unity工程的Assets
文件夹下。
3.将你要对接的渠道资源NebulaQuick_xxx.unitypackage
导入到您的Unity工程的Assets
文件夹下,例如支付宝的渠道资源名称为NebulaQuick_alipay.unitypackage
。注意:一个工程只能导入一种渠道资源,否则会造成不同渠道资源之间的冲突。
4.从星云开放平台下载目标渠道的 'fy-config.json' ,拷贝到Untiy工程的'Assets/Resources'目录下。下载路径:星云开放平台->对接中心->渠道打包->渠道配置->找到目标快游戏渠道->点击"下载配置文件"。注意:每个渠道要单独下载对应的配置文件,不可公用,否则无法正常使用。
接口
必接
接口:游戏必须要接入选接
接口:按照游戏发行需求来接入- 回调:某些接口有相应的回调游戏需要进行处理,具体请查看本文档的「回调」章节
- 案例:更详细案例可以参考对接资源中的范例'NBDemo/Assets/Scripts/SDKManager.cs'
初始化(必接)
1.方法
public void Init(string gameVersion)
2.说明
- 作用:用来加载SDK的初始化配置
- 调用时机:游戏需要在刚启动游戏的时候调用
- 回调说明:初始化完成后会回调初始化回调,并返回星云配置参数,包括星云开放平台AppID、渠道ID等
3.调用范例
Nebula.NebulaSDKBridge.Instance.Init("1.0.0");
4.参数说明
参数 | 类型 | 说明 | 是否必传 |
---|---|---|---|
gameVersion | string | 游戏版本号 | 是 |
5.回调方法
// 初始化回调
Nebula.NebulaSDKBridgeCallback.InitCallback
登录(必接)
1.方法
public void Login()
2.说明
- 作用:获取用户登录信息
- 调用时机:初始化完成后,玩家需要登录时调用
- 登录流程:点我查看
- 回调说明:登录后会回调LoginCallback并返回用户信息
3.调用范例
Nebula.NebulaSDKBridge.Instance.Login();
4.参数说明
无
5.回调方法
// 登录回调
Nebula.NebulaSDKBridgeCallback.LoginCallback
支付(必接)
1.方法
/// <summary>
/// 支付
/// </summary>
/// <param name="goodsPrice">商品价格,单位:分</param>
/// <param name="tradeNo">游戏订单号</param>
/// <param name="goodsId">商品 ID</param>
/// <param name="goodsName">商品名称</param>
/// <param name="playerId">角色 ID</param>
/// <param name="playerName">玩家名称</param>
/// <param name="playerLevel">玩家等级</param>
/// <param name="vipLevel">VIP 等级</param>
/// <param name="serverId">服务器 ID</param>
/// <param name="zoneId">分区 ID</param>
/// <param name="sandbox">沙箱支付,0=正式支付、1=沙箱支付</param>
/// <param name="notifyURL">回调地址</param>
/// <param name="notifyExt">额外参数</param>
public void Pay(NebulaSDKPayParams payParams)
2.说明
- 作用:拉起支付界面
- 调用时机:玩家进行商品购买时调用
- 支付流程:点我查看
- 服务端回调:需配置游戏服务端的支付回调地址,支付完成后会通过此地址回调支付结果,配置路径:星云开放平台->对接中心->SDK对接->SDK列表->基础接入参数->游戏支付回调地址
- 注意事项:客户端的支付回调不能作为支付成功的依据,不能在此处发放道具,客户端的支付回调只可以用来控制游戏界面显示,例如loading框的关闭、遮罩层的关闭。
判断支付是否成功要根据服务端的支付回调
。具体的服务端回调请看服务端接入文档
3.调用范例
var payParams = new NebulaSDKPayParams();
payParams.goodsPrice = PayAmount;
payParams.tradeNo = GameOrderId;
payParams.goodsId = GoodsId;
payParams.goodsName = GoodsName;
payParams.playerId = PlayerID;
payParams.playerName = PlayerName;
payParams.playerLevel = PlayerLevel;
payParams.vipLevel = "1";
payParams.serverId = ServerID;
payParams.zoneId = "1";
payParams.sandbox = 0;
payParams.notifyURL = "";
payParams.notifyExt = "";
Nebula.NebulaSDKBridge.Instance.Pay(payParams);
4.参数说明
参数 | 类型 | 默认值 | 说明 | 必传 |
---|---|---|---|---|
goodsPrice | int | - | 商品价格,单位:分,对应服务端支付回调的 total_amount 参数 | 是 |
tradeNo | string | - | 游戏订单号,由游戏生成并管理。服务端支付回调会回传,游戏需进行唯一性校验,防止重复下发商品给玩家,50个字符内。 对应服务端支付回调的out_trade_no参数 | 是 |
goodsId | string | - | 商品 ID,对应服务端支付回调的 goods_id 参数 | 是 |
goodsName | string | - | 商品名称 | 是 |
playerId | string | - | 角色 ID,对应服务端支付回调的 player_id 参数 | 是 |
playerName | string | - | 玩家名称 | 是 |
playerLevel | string | - | 玩家等级 | 是 |
vipLevel | string | 0 | VIP 等级 | 否 |
serverId | string | - | 服务器 ID,对应服务端支付回调的 server_id 参数 | 是 |
zoneId | string | 1 | 分区 ID,对应小游戏平台的支付分区 | 否 |
sandbox | int | 0 | 沙箱支付,0=正式支付、1=沙箱支付 | 否 |
notifyUrl | string | - | 1.通过该值能在客户端动态传递服务端支付回调地址;2.若您在客户端传递了该地址,则支付完成后会通过此地址回调支付结果;3.若您同时也在星云后台配置了支付回调地址,会优先回调客户端传递的地址;4.需要先配置支付回调可信域名,请前往"星云后台->对接中心->回调配置->支付回调可信域名"进行配置,否则无法回调成功;5.若您在客户端传递了该地址,在游戏包体发布之前,建议您仔细检查该参数是否配置正确,以防止包体发布后支付出现问题 | 否 |
notifyExt | string | - | 额外参数,游戏的透传参数可通过此参数传递,支付完成后平台服务端会回调此参数给游戏服务端。对应服务端支付回调的notify_ext参数 | 否 |
5.回调方法
// 支付回调
Nebula.NebulaSDKBridgeCallback.PayCallback
激励视频广告(选接)
1.方法
/// <summary>
/// 展示激励视频广告
/// </summary>
/// <param name="adUnitId">广告ID</param>
public void ShowRewardedVideoAd(string adUnitId)
2.说明
- 调用此接口将拉起展示激励视频广告
- 在激励视频广告回调中,判断是否下发观看广告奖励
- 在调用此接口之前请在第三方渠道后台先配置好广告,并获取到adUnitId,各个渠道的广告配置方法请查看接入须知"接入配置指引"
3.调用范例
Nebula.NebulaSDKBridge.Instance.ShowRewardedVideoAd("xxx");
4.回调方法
Nebula.NebulaSDKBridgeCallback.RewardedVideoAdCallback
打开客服对话(选接)
1.方法
/// <summary>
/// 打开客服对话
/// </summary>
/// <param name="customerServiceParams"></param>
public void OpenCustomerServiceConversation(NebulaSDKCustomerServiceParams customerServiceParams)
2.说明
- 调用此接口将拉起客服对话页面
3.调用范例
var csParams = new NebulaSDKCustomerServiceParams();
csParams.source = 3;
csParams.serverId = ServerID;
csParams.serverName = ServerName;
csParams.playerId = PlayerID;
csParams.playerName = PlayerName;
csParams.playerLevel = PlayerLevel;
csParams.vipLevel = "1";
Nebula.NebulaSDKBridge.Instance.OpenCustomerServiceConversation(csParams);
4.参数说明
参数 | 类型 | 默认值 | 说明 | 必传 |
---|---|---|---|---|
source | int | - | 提交入口。2:SDK登录后进入游戏前; 3:进入游戏后 | 是 |
serverId | string | - | 游戏服id | 否 |
serverName | string | - | 游戏服名称 | 否 |
playerId | string | - | 角色id | 否 |
playerName | string | - | 角色名称 | 否 |
playerLevel | string | - | 角色等级 | 否 |
vipLevel | string | - | 角色vip等级 | 否 |
5.回调方法
Nebula.NebulaSDKBridgeCallback.CustomerServiceCallback
获取配置参数(选接)
1.说明
- 如果想在初始化之前就获取到星云的配置参数,可以直接读取fy-config.json,参考如下调用范例
2.调用范例
var json = Resources.Load<TextAsset>("fy-config");
Debug.Log($"###fy-config>>{json}");
var config = JsonUtility.FromJson<Nebula.NebulaSDKConfig>(json.text);
// 星云开放平台AppID
var appId = config.nbAppId;
// 星云开放平台渠道ID
var channelId = config.nbChannelId;
// 星云开放平台渠道模板标识
var channelTemplateCode = config.nbChannelTemplateCode;
// 星云开放平台通行证标识
var passportCode = config.passportCode;
// 星云开放平台支付标识
var paymentCode = config.paymentCode;
3.参数说明
参数 | 类型 | 说明 |
---|---|---|
nbAppId | string | 星云开放平台AppID |
nbChannelId | string | 星云开放平台渠道ID,如果游戏要对渠道做差异化处理时,可以使用此ID作为区分 |
nbChannelTemplateCode | string | 星云开放平台渠道模板标识,用来标明该渠道使用的是哪个渠道模板(一级渠道,在“对接中心-渠道打包-渠道配置”中添加渠道时所选的渠道模板),如果游戏要对不同渠道模板做差异化处理时,可以使用此标识作为区分,例如:针对不同渠道模板进行玩家信息隔离。所有渠道的渠道模板标识请看渠道版本信息 |
passportCode | string | 星云开放平台通行证标识,用来标明该渠道用什么通行证进行登录 |
paymentCode | string | 星云开放平台支付标识,用来标明该渠道用什么支付方式 |
回调
-
说明:请在游戏代码中,设置好的相应的委托方法,并编写游戏的回调逻辑
-
案例:更详细案例可以参考对接资源中的范例'Script/Menu.cs'
-
统一返回对象格式如下:
属性名 | 说明 |
---|---|
status | 成功success 、失败error |
code | 响应状态码,根据不同状态进行处理和错误原因排查 |
msg | 提示消息 |
data | 返回值,响应结果不同请求数据格式参照方法说明文档 |
- code统一错误码:
错误码 | 说明 |
---|---|
10001 | 网络请求失败 |
10002 | 初始化失败 |
10003 | 启动参数获取失败 |
10004 | 配置文件无法读取 |
10005 | 渠道类型无法获取 |
20001 | 登录失败 |
20002 | 登录取消 |
20003 | 第三方渠道登录失败 |
20004 | 服务端登录验证失败 |
30001 | 支付失败 |
30002 | 渠道支付配置关闭 |
30003 | 支付取消 |
30004 | 创建聚合订单失败 |
30005 | 支付配置获取失败 |
30006 | 第三方渠道支付失败 |
40001 | 广告播放未完成 |
40002 | 广告加载失败 |
初始化回调
1.方法
Nebula.NebulaSDKBridgeCallback.InitCallback
2.说明
- 初始化后会回调此方法,并返回配置参数
- 应在确保收到初始化成功回调后才能调用其他接口
3.参数
data参数:
无
4.使用方式
Nebula.NebulaSDKBridgeCallback.InitCallback = (initInfo) =>
{
Debug.Log($"###InitCallback>>status:{initInfo.status}>>code:{initInfo.code}>>msg:{initInfo.msg}");
if ("success".Equals(initInfo.status))
{
// 初始化成功
}
else
{
// 初始化失败
}
}
登录回调
1.方法
Nebula.NebulaSDKBridgeCallback.LoginCallback
2.说明
- 调用登录后会回调此方法,游戏在此方法中做登录的逻辑处理
3.参数
data参数:
参数 | 类型 | 说明 |
---|---|---|
nbOpenId | string | 聚合渠道用户 openId,可作为游戏内玩家的唯一用户标识 |
openId | string | 小游戏 openId,可作为用户扩展属性值使用 |
token | string | 星云通行证凭证 Token |
4.使用方式
Nebula.NebulaSDKBridgeCallback.LoginCallback = (loginInfo) =>
{
Debug.Log("###LoginCallback>>status:"+ loginInfo.status + ">>code:" + loginInfo.code + ">>msg:" + loginInfo.msg + ">>openId:" + loginInfo.data.openId + ">>token:" + loginInfo.data.token + ">>nbOpenId:" + loginInfo.data.nbOpenId);
if ("success".Equals(loginInfo.status))
{
// 登录成功
}
else
{
// 登录失败
}
};
支付回调
1.方法
Nebula.NebulaSDKBridgeCallback.PayCallback
2.说明
- 调用支付后会回调此方法,游戏在此方法中做支付的逻辑处理
- 此回调只是客户端的支付成功回调,不能作为发放道具的依据,具体是否真正支付成功,需要等服务端的支付成功回调
3.参数
data参数:
属性 | 类型 | 说明 |
---|---|---|
orderNo | string | 星云订单号 |
4.使用方法
Nebula.NebulaSDKBridgeCallback.PayCallback = (payInfo) =>
{
Debug.Log("###PayCallback>>status:"+ payInfo.status + ">>code:" + payInfo.code + ">>msg:" + payInfo.msg + ">>orderNo:" + payInfo.data.orderNo);
if ("success".Equals(payInfo.status))
{
// 支付成功
} else
{
// 支付失败
}
};
激励视频广告回调
1.方法
Nebula.NebulaSDKBridgeCallback.RewardedVideoAdCallback
2.说明
- 调用完成激励视频广告接口后回调,游戏在此处确定是否下发观看广告奖励
3.参数
data 参数:
属性 | 类型 | 说明 |
---|---|---|
adUnitId | string | 广告ID |
4.使用方法
Nebula.NebulaSDKBridgeCallback.RewardedVideoAdCallback = (rewardedVideoAdInfo) =>
{
Debug.Log("###RewardedVideoAdCallback>>status:" + rewardedVideoAdInfo.status + ">>code:" + rewardedVideoAdInfo.code + ">>msg:" + rewardedVideoAdInfo.msg + ">>adUnitId:" + rewardedVideoAdInfo.data.adUnitId);
if ("success".Equals(rewardedVideoAdInfo.status))
{
// 广告播放完成
Debug.Log("###广告播放完成");
}
else
{
// 广告播放失败
Debug.Log("###广告播放失败");
}
};
打开客服对话回调
1.方法
Nebula.NebulaSDKBridgeCallback.CustomerServiceCallback
2.说明
- 调用完成打开客服对话接口后回调,游戏在此处确定是否打开成功
3.参数
data 参数:无
4.使用方法
Nebula.NebulaSDKBridgeCallback.CustomerServiceCallback = (info) =>
{
LogManager.Instance.Add("###CustomerServiceCallback>>status:" + info.status + ">>code:" + info.code + ">>msg:" + info.msg );
if ("success".Equals(info.status))
{
LogManager.Instance.Add("###打开客服成功");
}
else
{
LogManager.Instance.Add("###打开客服失败");
}
};
渠道平台指引
支付宝小游戏
特殊接口
- 特殊回调
Nebula.NebulaSDKBridgeCallback.Callback = (method, result) =>
{
LogManager.Instance.Add($"###Callback>>method:{method}>>result:{result}");
// GetLaunchOptions:当调用GetLaunchOptions之后回调
// OnShow:当从外部页面(如支付宝用户中心)返回游戏时回调
if (method == "GetLaunchOptions" || method == "OnShow")
{
var jsonData = JsonMapper.ToObject(result);
// 是否展示设首任务。true:是,false:否。如果为true,要显示设首和复访任务;如果为false,则要隐藏设首和复访任务。
bool gameCenterBackflow = (bool)jsonData["gameCenterBackflow"];
// 是否已设首成功,true:是,false:否。如果为true,未领取过奖励的用户可以领取奖励;如果为false,则要引导用户跳转设首
bool addHomepageResult = (bool)jsonData["addHomepageResult"];
// 启动小游戏的场景值
int scene = (int)jsonData["scene"];
// 来源渠道,游戏中心:gamecenter。如果 sourceChannel 为 gamecenter,则复访任务完成,给用户发放奖励;如果未获取到 sourceChannel 字段,则向用户提示领取失败
string sourceChannel = (string)jsonData["sourceChannel"];
// 支付宝返回的原始数据
string originalData = (string)jsonData["originalData"];
}
else if (method == "GameClubButtonOnTap") // GameClubButtonOnTap:点击游戏圈按钮之后回调
{
}
else if (method == "GetGameClubData") // GetGameClubData:当调用GetGameClubData后回调
{
// result格式:[{"value":1734418420, "dataType":1},{"value":0,"dataType":3},{"value":0,"dataType":4},{"value":0,"dataType":5},{"value":0,"dataType":6},{"value":0,"dataType":7},{"value":0,"dataType":8},{"value":0,"dataType":9}]
// result 说明:
/// 1:⽤户最新加⼊游戏圈的时间,秒级Unix时间戳(有加入游戏圈value才有值)
/// 3:⽤户禁⾔状态,0:正常 1:禁言
/// 4:当天(⾃然⽇)点赞贴⼦数
/// 5:当天(⾃然⽇)评论贴⼦数
/// 6:当天(⾃然⽇)发表贴⼦数
/// 7:当天(⾃然⽇)发表视频贴⼦数
/// 8:当天(⾃然⽇)赞官⽅贴⼦数
/// 9:当天(⾃然⽇)评论官⽅贴⼦数
}
};
- 支付宝游戏上报:
var jsonData = new JsonData();
jsonData["action_code"] = "xxx";
var json = jsonData.ToJson();
Nebula.NebulaSDKBridge.Instance.Call("Report", json);
- 报告游戏加载完成:
Nebula.NebulaSDKBridge.Instance.Call("ReportLoadingCompleted", "");
- 默认授权或主动授权完成时进⾏上报
Nebula.NebulaSDKBridge.Instance.Call("ReportAuthorized", "");
- 报告游戏⻆⾊创建完成,initial:是否是第⼀次创建⻆⾊进⼊(新⽤户)
var jsonData1 = new JsonData();
jsonData1["initial"] = true;
var json1 = jsonData1.ToJson();
Nebula.NebulaSDKBridge.Instance.Call("ReportGameCharacterCreated", json1);
- 报告成功进⼊游戏游玩界⾯
Nebula.NebulaSDKBridge.Instance.Call("ReportGamePlay", "");
- 报告自定义事件接口,
设首复访上报时使用
。eventId:事件名称
var jsonData = new JsonData();
jsonData["eventId"] = "xxx";
var json = jsonData.ToJson();
Nebula.NebulaSDKBridge.Instance.Call("ReportCustomEvent", json);
- 获取启动参数,
必须在登录成功回调后调用
Nebula.NebulaSDKBridge.Instance.Call("GetLaunchOptions", "");
- 跳转设首任务
Nebula.NebulaSDKBridge.Instance.Call("SetHomePage", "");
- 跳转复访任务
Nebula.NebulaSDKBridge.Instance.Call("SetReturnVistPage", "");
- 游戏圈按钮,有其他疑问请参考游戏圈按钮官方文档
var param = new JsonData();
// 操作游戏圈按钮的方法。Show:显示游戏圈按钮,Hide:隐藏游戏圈按钮,Destroy:销毁游戏圈按钮
param["method"] = "Show";
// 必填,按钮类型。0:text类型,可以设置背景⾊和⽂本的按钮;1:image类型,只能设置背景贴图的按钮,背景贴图会直接拉伸到按钮的宽⾼
param["type"] = 1;
// 按钮文案。注意:type=“text”时必填
param["text"] = "xxx";
// 按钮的背景图⽚,仅当 type 为 image 时有效
param["image"] = "https://mdn.alipayobjects.com/paladin_unity/afts/img/1e7STKNyP1cAAAAAAAAAAAAADkqsAQBr/original";
// 必填,游戏圈按钮的图标,仅当 type 参数为 image 时有效。0:blue, 1:white, 2:dark, 3:light
param["icon"] = 1;
// 传游戏圈的圈⼦ID,进⼊到指定圈⼦下
param["openlink"] = "xxx";
// 按钮离屏幕左边距
param["left"] = 0;
// 按钮离屏幕上边距
param["top"] = 200;
// 按钮宽度
param["width"] = 50;
// 按钮⾼度
param["height"] = 50;
// 按钮背景颜⾊,格式为 6 位 16 进制数
param["backgroundColor"] = "#000000";
// 按钮边框颜⾊,格式为 6 位 16 进制数
param["borderColor"] = "#ffffff";
// 按钮边框宽度
param["borderWidth"] = 2;
// 按钮圆⻆幅度
param["borderRadius"] = 5;
// ⽂案颜⾊
param["color"] = "#ffffff";
// ⽂案对⻬⽅式
param["textAlign"] = 1;
// ⽂案字体⼤⼩
param["fontSize"] = 18;
var paramJson = param.ToJson();
Nebula.NebulaSDKBridge.Instance.Call("GameClubButton", paramJson);
- 获取游戏圈相关数据,对应特殊回调:GetGameClubData,有其他疑问请参考:获取游戏圈数据官方文档
/// 需要获取的数据指标的对象数组:
/// 1:⽤户最新加⼊游戏圈的时间
/// 3:⽤户禁⾔状态
/// 4:当天(⾃然⽇)点赞贴⼦数
/// 5:当天(⾃然⽇)评论贴⼦数
/// 6:当天(⾃然⽇)发表贴⼦数
/// 7:当天(⾃然⽇)发表视频贴⼦数
/// 8:当天(⾃然⽇)赞官⽅贴⼦数
/// 9:当天(⾃然⽇)评论官⽅贴⼦数
int[] intArray = new int[] { 1, 3, 4, 5, 6, 7, 8, 9 };
string paramJson = JsonMapper.ToJson(intArray);
Nebula.NebulaSDKBridge.Instance.Call("GetGameClubData", paramJson);
调试说明
-
安装支付宝小游戏开发工具:打开控制台输入以下命令
npm install -g minidev@latest
-
导出工程:找到Unity工具栏的"支付宝小游戏"插件,设置好信息,点击"生成并转换"
-
生成预览版:控制台cd到刚刚导出的目录中的"alipay"文件夹,输入以下命令(-a为应用ID)
minidev preview -a 206017xxx
-
测试预览版:确保你有加入支付宝小游戏开发者,打开支付宝扫一扫刚才生成的二维码,可以拉起游戏进行测试
-
上传:控制台cd到刚刚导出的目录中的"alipay"文件夹,输入以下命令(-a为应用ID,-v为版本号)
minidev upload -a 206017xxx -v 0.0.1 --game
-
参考文档:支付宝小游戏文档
注意
- 设置服务器域名白名单:
- 需要将星云SDK用到的域名添加到白名单,否则无法正常使用
gate-nebula.737.com
api-combine.feiyu.com
feishu-develop-tracker.cn-shanghai.log.aliyuncs.com
2. 需要将游戏用到的域名添加到白名单,否则无法正常请求。
3. 添加路径:控制台-开发设置-服务器域名白名单设置。添加完要重新打包,否则刚刚添加的白名单不生效。
-
内购测试:
- 如果要测试内购功能,需要先开通虚拟支付,并添加uid白名单。
- 如果添加完白名单还是无法拉起支付,可能需要重新打包生效。
- 参考文档:接入准备
-
激励视频广告测试:
- 调试广告接口的时候,广告页面显示空白,属于正常现象,弹出页面就可以了。
游戏对接时使用到的adUnitId不是广告配置中的"广告位id",而是"spaceCode"!"spaceCode"获取路径:广告位管理-编辑-spaceCode
。
设首、复访任务说明
- 设首任务对接流程:
- 复访任务对接流程:
- 设首复访任务测试需要添加白名单:商家平台运营中心 >选择 小游戏 > 进入 小游戏详情页 > 设首复访
- 有其他疑问请参考:
官方文档
华为小游戏
特殊接口
-
特殊回调
Nebula.NebulaSDKBridgeCallback.Callback = (method, result) => { // 创建桌面图标回调 if (method == "InstallShortcut") { var jsonData = JsonMapper.ToObject(result); string status = jsonData.OptGetString("status"); if (status == "success") { Debug.Log("创建桌面图标成功"); } else { string msg = jsonData.OptGetString("message"); Debug.Log(msg); } } };
-
创建桌面图标接口
Nebula.NebulaSDKBridge.Instance.Call("InstallShortcut", "");
调试说明
-
下载安装华为小游戏开发者工具,下载地址
-
导出工程:使用Unity自带的工具导出WebGL工程,导出前要根据文档中的提示进行设置,参考文档
-
使用开发者工具转换工程,参考文档:华为快游戏转换文档
-
真机测试:
- 使用数据线将华为手机连接到电脑设备
- 华为手机和开发者工具需登录同一个开发者账号,否则无法运行
- 点击开始运行,会自动在手机安装宿主App,然后拉起运行快游戏
- 使用数据线将华为手机连接到电脑设备
注意事项
-
证书文件和密钥文件:
- 生成:开发者工具->工具栏->工具->生成证书
- 配置:需在华为开发者中心配置SHA256证书指纹,需配置刚刚生成证书时生成的Fingerprint
- 证书配置:开发者工具所配置的证书,需与开发者中心配置的证书指纹对应,否则无法登录
-
激励视频广告测试:
- 使用华为提供的测试的广告ID进行测试:teste7hm5vx799
- 华为运营验收通过后,将测试ID替换为正式ID,正式ID需联系运营配置广告。
- 参考文档:华为广告测试验证及上线
-
支付测试:
- 需要在华为开发后台配置好商品,并在支付接口goodsId传入配置好的商品ID
- 华为小游戏有提供沙盒测试,将开发者账号加入沙盒测试白名单,测试时无需真实支付
官方文档
OPPO小游戏
特殊接口
-
特殊回调
Nebula.NebulaSDKBridgeCallback.Callback = (method, result) => { // 创建桌面图标回调 if (method == "InstallShortcut") { var jsonData = JsonMapper.ToObject(result); string status = jsonData.OptGetString("status"); if (status == "success") { Debug.Log("创建桌面图标成功"); } else { string msg = jsonData.OptGetString("message"); Debug.Log(msg); } } };
-
创建桌面图标
Nebula.NebulaSDKBridge.Instance.Call("InstallShortcut", "");
调试说明
-
下载安装OPPO小游戏开发工具:下载地址
-
导出工程(windows系统):
- 使用OPPO Unity插件导出工程,参考文档
-
导出工程(mac系统):
- 使用Unity编辑器导出WebGL工程,导出前要根据文档中的提示进行设置,参考文档
- 安装命名行工具:
npm install -g @oppo-minigame/cli
3. 使用命令行工具转换小游戏。-u:Unity版本号;-p:游戏包名;-g:游戏名称;-s:签名私钥;-e:签名证书;-o:横竖屏,不写默认竖屏,传landscape为横屏:
quickgame unity -u 2021.3.14f1 -p com.feiyu.stepbystep.nearme.gamecenter -g NBDemo -s ../sign/release/private.pem -e ../sign/release/certificate.pem
- 真机测试:使用OPPO 小游戏开发者工具进行测试,参考文档
- 查看调试日志:电脑和手机同一局域网,chrome浏览器内输入下面的url,IP换成你的手机局域网ip,端口从12345~12348,例如:
devtools://devtools/bundled/inspector.html?v8only=true&ws=192.168.0.3:12345/00010002-0003-4004-8005-000600070008
注意事项
- 如果导出的工程无法运行,卡在loading界面,看看导出的小游戏工程中的Build是否包含oppo.loader.js,如果没有则需清除一下Unity工程的缓存,工具栏->Assets->Reimport All
- 不支持http请求
- 激励视频广告测试:需到OPPO商务后台创建广告,获取到广告ID,参考文档
官方文档
vivo小游戏
特殊接口
-
特殊回调
Nebula.NebulaSDKBridgeCallback.Callback = (method, result) => { // 创建桌面图标回调 if (method == "InstallShortcut") { var jsonData = JsonMapper.ToObject(result); string status = jsonData.OptGetString("status"); if (status == "success") { Debug.Log("创建桌面图标成功"); } else { string msg = jsonData.OptGetString("message"); Debug.Log(msg); } } };
-
创建桌面图标
Nebula.NebulaSDKBridge.Instance.Call("InstallShortcut", "");
调试说明
-
vivo手机安装2个应用:vivo小游戏引擎、vivo小游戏调试器
-
转换小游戏并导出工程:Unity菜单栏->vivo小游戏->转换小游戏,根据游戏情况填写导出参数,点击生成并转换
-
安装依赖:打开电脑控制台 cd 到导出的目录中的webgl_vivo目录执行命令
npm install
-
编译项目:还是在刚刚的控制台窗口,webgl_vivo目录下执行命令
npm run build
-
运行项目:打开另一个控制台窗口,还是cd 到webgl_vivo目录,执行命令
npm run server
-
vivo手机连接电脑,打开手机的小游戏调试器,点击"在线更新",即可拉起游戏界面
-
参考文档:转换工具导出vivo小游戏
注意
- 如果修改完代码要重新调试,不需要关闭正在运行
npm run server
的窗口,可以在转换小游戏后,重新执行npm run build
,并在小游戏调试器点击"在线更新"即可
官方文档
美团小游戏
特殊接口
- 特殊回调
Nebula.NebulaSDKBridgeCallback.Callback = (method, result) =>
{
Debug.Log($"###Callback>>method:{method}>>result:{result}");
// GetLaunchOptions:当调用GetLaunchOptions之后回调
// OnShow:当从外部页面返回游戏时回调
if (method == "GetLaunchOptions" || method == "OnShow")
{
var jsonData = JsonMapper.ToObject(result);
// 能否展示一键订阅二楼任务。true:能,false:否。如果为true,则展示一键订阅二楼按钮。如果为false,则不展示。
bool showEnable = (bool)jsonData["showEnable"];
// 是否已订阅二楼。true:是,false:否。如果为true,未领取过奖励的用户可以领取奖励;如果为false,引导用户订阅。
bool isSubscribe = (bool)jsonData["isSubscribe"];
// 启动小游戏的场景值
int scene = (int)jsonData["scene"];
// 来源渠道参数
string innerSource = (string)jsonData["innerSource"];
// 是否为二楼复访。true:是,false:否。如果为true,则表示从二楼复访进入小游戏;如果为false,则表示不是从二楼复访进入小游戏。
string fromSecondFloor = (bool)jsonData["fromSecondFloor"];
}
else if (method == "UpdateSecondFloorChannel") // 一键订阅二楼回调
{
var jsonData = JsonMapper.ToObject(result);
var status = (string)jsonData["status"];
var message = (string)jsonData["message"];
if (status == "success")
{
// 一键订阅二楼成功
}
else
{
// 一键订阅二楼失败
}
}
else if (method == "CreateShortcut") // 添加桌面快捷方式回调
{
var jsonData = JsonMapper.ToObject(result);
var status = (string)jsonData["status"];
var message = (string)jsonData["message"];
if (status == "success")
{
// 添加桌面快捷方式成功
}
else
{
// 添加桌面快捷方式失败
}
}
};
- 角色上报接口
说明:
1. 每次创角动作结束之后进行一次上报
2. 每次切换服务区时进行一次上报
3. 每次退出游戏时进行一次上报
var jsonData = new JsonData();
// 创建时间,时间戳,eg: Date.now(),当创角上报时必传
jsonData["createTime"] = "1735553976";
// 服务区id,非必传
jsonData["serviceId"] = "1";
// 角色 id,必传
jsonData["roleId"] = "roleId1";
// 角色等级,必传
jsonData["level"] = "1";
Nebula.NebulaSDKBridge.Instance.Call("ReportMV", jsonData.ToJson());
- 添加快捷方式
说明:
1. 不支持重复添加
2. 回调特殊回调的 CreateShortcut
JsonData jsonData = new JsonData();
// 快捷方式显示的名称,必传
jsonData["label"] = "NBDemo";
// 快捷方式跳转目标页面,必传,需要与美团的运营人员索取,否则无法正常打开
jsonData["target"] = "imeituan://www.meituan.com/mgc?mgc_id=mgctedrrftskcype&inner_source=11181_desk&query=inner_source%3D11181_desk&lch=mhqN_TW-u0kBgiK_vBi78KQNw&_page_new=1";
Nebula.NebulaSDKBridge.Instance.Call("CreateShortcut", jsonData.ToJson());
- 获取启动参数
说明:
1. 调用后回调 GetLaunchOptions
Nebula.NebulaSDKBridge.Instance.Call("GetLaunchOptions", "");
- 一键订阅二楼任务
说明:
1. 调用后回调 UpdateSecondFloorChannel
Nebula.NebulaSDKBridge.Instance.Call("UpdateSecondFloorChannel", "");
调试说明
-
使用美团小游戏转换插件生成小游戏文件
-
命令行安装调试工具:
npm i -g mgc-cli-exter
-
生成 mgc.config.js配置文件(在导出目录执行):
mgc config
-
生成Debug测试二维码(在 mgc.config.js 的同级目录执行):
mgc debug
-
iOS调试:使用美团App扫码
- 版本号大于等于11.2.200
- 需要使用特殊的URL生成二维码再进行扫码,请查看注意事项
-
Android调试:
- 需要使用专用的APK测试包, 点击下载
-
具体调试、分包、上架方式请参考美团官方文档:
注意事项
-
iOS需要使用特殊的URL生成二维码再进行扫码测试:
- 使用 mgc debug 命令生成二维码时会同时给出测试URL,在URL后面串上:
&manualHorn=%7B%22structure%22%3A2%2C%22enableUnityGame_mgctedrrftskcype%22%3A1%7D
- 使用二维码生成工具将以上URL生产二维码
- URL范例如下:
imeituan://www.meituan.com/mgc?mgc_id=mgctedrrftskcype&mgc_debug_version=1.1.37&debug=1&manualHorn=%7B%22structure%22%3A2%2C%22enableUnityGame_mgctedrrftskcype%22%3A1%7D
- 使用 mgc debug 命令生成二维码时会同时给出测试URL,在URL后面串上:
-
还未上架的游戏,测试二楼复访,需使用特殊的URL生成二维码测试地址
- 使用 mgc debug 命令生成二维码时会同时给出测试URL,在URL后面串上:
&inner_source=11181_syxlel&query=inner_source%3D11181_syxlel
- iOS测试可以在iOS特殊地址基础上串上以上字符串
- 使用二维码生成工具将以上URL生产二维码
- URL范例如下:
imeituan://www.meituan.com/mgc?mgc_id=mgctedrrftskcype&mgc_debug_version=1.1.37&debug=1&manualHorn=%7B%22structure%22%3A2%2C%22enableUnityGame_mgctedrrftskcype%22%3A1%7D&inner_source=11181_syxlel&query=inner_source%3D11181_syxlel
- 使用 mgc debug 命令生成二维码时会同时给出测试URL,在URL后面串上:
-
测试二楼复访需添加白名单,添加方式:联系美团技术人员添加
一键订阅二楼、二楼复访说明
- 一键订阅二楼流程图:
- 二楼复访流程图: