Skip to content

Unity接入

IMPORTANT

在接入SDK之前, 建议先请仔细阅读:接入流程
SDK提供了Unity的Demo,里面对Android/iOS层的逻辑进行了简单的封装,故本文档仅供参考,游戏层也可以自行处理调用逻辑

基础配置

1、将UnityDemo/Assets/Scripts/SDK目录拷贝到游戏工程的Assets/Scripts目录下, 如果游戏层已经存在SDK目录,可以重新创建一个目录,将上述目录中的代码拷贝进去;SDK目录下是封装好的Unity层的API调用组件。

2、 将UnityDemo/Assets/Plugins/文件拷贝到游戏工程的Assets/Plugins/下。Plugins/Android目录下,是Android平台相关的SDK库和配置文件;Plugins/iOS目录下,是iOS平台相关的SDK库和配置文件。

初始化

游戏层应尽快调用初始化接口, 后续所有的接口,都需要在初始化接口调用之后调用。

WARNING

该初始化接口仅仅是Unity层的初始化。 实际渠道SDK的初始化, 在原生层的Activity中onCreate中就已经触发了,所以游戏层不要依赖初始化回调做一些逻辑。

csharp
U8SDKInterface.Instance.Init();


// 设置回调:
U8SDKInterface.Instance.OnLoginSuc = delegate(U8LoginResult result)
{
    // SDK登录成功回调, result为SDK登录结果
    // result.userID: 用户在SDK中的唯一用户ID
    // result.sdkUserID: 当前渠道SDK中的唯一用户ID
    // result.username: 当前渠道SDK中的唯一用户ID
    // result.sdkUsername: 当前渠道SDK中的唯一用户ID
    // result.token: 登陆token,需要和userID一起发给服务端,服务端去SDK服务器做登录验证,具体协议参考服务端文档
};

U8SDKInterface.Instance.OnLogout = delegate()
{
    // 当玩家从SDK中登出时,会触发该回调。 游戏层需要引导玩家返回到游戏登录界面重新登录进入游戏
};

U8SDKInterface.Instance.OnLoginFailed = delegate()
{
    // 登录失败回调
};

U8SDKInterface.Instance.OnPaySuc = delegate()
{
    // 支付成功回调
};

U8SDKInterface.Instance.OnPayFailed = delegate()
{
    // 支付失败回调
};

登录

在玩家进入游戏之前, 需要调用登录接口,弹出渠道SDK的登录界面:

csharp
U8SDKInterface.Instance.Login();

当玩家登录成功后, 会通过OnLoginSuc回调,通知结果给游戏层:

csharp
U8SDKInterface.Instance.OnLoginSuc = delegate(U8LoginResult result)
{
    // SDK登录成功回调, result为SDK登录结果
    // result.userID: 用户在SDK中的唯一用户ID
    // result.sdkUserID: 当前渠道SDK中的唯一用户ID
    // result.username: 当前渠道SDK中的唯一用户ID
    // result.sdkUsername: 当前渠道SDK中的唯一用户ID
    // result.token: 登陆token,需要和userID一起发给服务端,服务端去SDK服务器做登录验证,具体协议参考服务端文档
};

当玩家登录失败,会通过OnLoginFailed回调,通知给游戏层:

csharp
U8SDKInterface.Instance.OnLoginFailed = delegate()
{
    // 登录失败回调
};

登出

如果游戏内有登出按钮, 当玩家点击登出按钮的时候, 主动调用登出接口后(不用等待回调结果),立即返回到游戏登陆界面(不用等待回调结果)

csharp
U8SDKInterface.Instance.Logout();

注意, 还有另外一种登出: 玩家从渠道SDK的悬浮窗->用户中心中点击登出/切换账号,此时U8SDK会通过OnLogout回调通知游戏。 游戏层收到该回调后,需要引导玩家返回到游戏登录界面。(重要,影响渠道审核)

csharp
U8SDKInterface.Instance.OnLogout = delegate()
{
    // 当玩家从SDK中登出时,会触发该回调。 游戏层需要引导玩家返回到游戏登录界面重新登录进入游戏
};

角色数据上报

在玩家创建角色、进入游戏、等级升级以及退出游戏时,需要上报角色信息。 (重要,影响渠道审核)

csharp
U8ExtraGameData data = new U8ExtraGameData();
data.roleID = "1";              //玩家角色ID
data.roleName = "测试角色";      //玩家角色名称
data.roleLevel = "15";          // 玩家角色等级
data.serverID = 10;           // 当前服务器ID
data.serverName = "地狱之恋";    // 当前
data.moneyNum = 100;                 // 当前角色拥有的游戏币数量
data.roleCreateTime = "0";          // 角色创建时间,从1970年到现在的时间,单位秒
data.roleLevelUpTime = "0";     // 角色等级变化时间,从1970年到现在的时间,单位秒

data.dataType = U8ExtraGameData.TYPE_CREATE_ROLE;        //上报类型. 2: 创建角色;3:进入游戏;4:等级提升;5:退出游戏

U8SDKInterface.Instance.SubmitGameData(data);

支付

在游戏中购买道具/游戏币时,调用支付接口。

csharp
U8PayParams data = new U8PayParams();
data.productId = "1";                             //游戏内商品ID,可以和google后台的商品ID不一致。 在SDK后台配置商品ID的映射关系即可
data.productName = "元宝";                        //商品名称,不能为空
data.productDesc = "购买100元宝,赠送20元宝";      //商品描述,不能为空
data.price = 1;                                	 //商品价格,单位元
data.buyNum = 1;                          	     //购买数量,固定1
data.coinNum = 300;								 //身上拥有的游戏币数量
data.serverId = "10";                            //服务器ID,不能为空
data.serverName = "地狱之恋";                     //服务器名称,不能为空
data.roleId = "1";                               //角色ID,不能为空
data.roleName = "测试角色";                       //角色名称,不能为空
data.roleLevel = "15";                           //角色等级,不能为空
data.vip = "1";									 // vip
data.payNotifyUrl = "http://localhost:8080/payCallback";    //游戏服的支付回调地址,用于接收支付回调通知,如果不设置,也可以在SDK后台设置
data.cpOrderId = "test_00000001";               //游戏自己的订单号
data.extension = "test_data";                   //扩展数据, 支付成功回调通知游戏服务器的时候,会原封不动返回这个值

U8SDKInterface.Instance.Pay(data);

支付成功后,会通过OnPaySuc回调,通知给游戏:

csharp
U8SDKInterface.Instance.OnPaySuc = delegate()
{
    // 支付成功回调
};

支付失败后,会通过OnPayFailed回调,通知给游戏:

csharp
U8SDKInterface.Instance.OnPayFailed = delegate()
{
    // 支付失败回调
};

退出游戏

游戏应在退出游戏时,调用此接口, 部分渠道会弹出退出确认框。 注意:没有这个部分渠道会审核失败。

csharp
if (Input.GetKeyUp(KeyCode.Escape))
{
    if (U8SDKInterface.Instance.IsSupportExit())		
    {
    	U8SDKInterface.Instance.SDKExit();				

    } else {
    	//游戏自己的退出确认框
        Application.Quit();
    }
}

广告接口(可选)

IMPORTANT

如果游戏是IAA游戏或需要通过广告变现, 可以接入U8聚合广告接口。 之后通过U8打包工具,将具体的广告SDK打入进去即可,无需单独接入各个广告平台的SDK。

在接入SDK之前, 需要先获取广告参数,建议先请仔细阅读:获取广告参数

目前支持的广告类型有: 开屏广告/自动开屏、 插屏广告、 横幅广告(Banner)、激励视频广告。

设置广告监听

在广告事件发生时, SDK会通过OnAdResult回调,通知游戏:

csharp
U8AdInterface.Instance.OnAdResult = delegate (U8AdResult result)
{

    if (result.adType.Equals("rewardVideo")) {
        // 激励视频广告回调
        if (result.eventType.Equals("onReward")) {
            // 给玩家发放道具
            UnityEngine.Debug.Log("Callback->onReward.");

        } else if(result.eventType.Equals("onFailed")) {
            // 广告失败,可以重新加载

        } else if(result.eventType.Equals("onLoaded")) {
            // 广告加载成功回调, 可以在这里播放
            U8AdInterface.Instance.ShowRewardAd("1163989897326174230");
        }

    } else if (result.adType.Equals("interstitial")) {
        // 插屏广告回调
        if(result.eventType.Equals("onFailed")) {
            // 广告失败,可以重新加载

        } else if (result.eventType.Equals("onLoaded")) {
            // 广告成功加载,可以在这里播放
            U8AdInterface.Instance.ShowInterstitialAd("879620241503559681");

        } else if (result.eventType.Equals("onShow")) {
            // 广告播放回调
        }
    } else if (result.adType.Equals("banner")) {
        // 横幅广告回调

        if(result.eventType.Equals("onFailed")) {
            // 广告失败,可以重新加载

        } else if (result.eventType.Equals("onLoaded")) {
            // 广告成功加载

        } else if (result.eventType.Equals("onShow")) {
            // 广告播放回调
        }                
    } else if (result.adType.Equals("splash")) {
        // 开屏广告回调

        if(result.eventType.Equals("onFailed")) {
            // 广告失败,可以重新加载

        } else if (result.eventType.Equals("onLoaded")) {
            // 广告成功加载,可以在这里播放
            U8AdInterface.Instance.ShowSplashAd("879620241503559680");

        } else if (result.eventType.Equals("onShow")) {
            // 广告播放回调
        }                
    }

};
1、 激励视频广告
  1. 加载广告
csharp
U8AdInterface.Instance.LoadRewardAd(adId, rewardName, rewardNum);

参数说明:

参数名称参数类型参数说明
adIdstringU8SDK后台创建的激励视频类型的广告位ID,如果还不知道怎么创建,可以参考文档:获取广告参数
rewardNamestring奖励物品的名称
rewardNumint奖励物品的数量
  1. 展示广告
csharp
if (U8AdInterface.Instance.IsRewardAdReady()) {
	U8AdInterface.Instance.ShowRewardAd(adId);
}
  1. 广告回调

广告事件触发时,SDK会通过OnAdResult回调给游戏,其中adType为rewardVideoeventType为具体的事件名称。 目前主要有如下事件:

bash

onReward: 符合发放奖励的条件,给玩家发放奖励
onLoaded: 广告加载成功
onShow: 广告曝光成功
onFailed: 广告加载或播放失败
onClicked: 广告被点击
onSkip: 广告被跳过
onClosed: 广告被关闭
2、 插屏广告
  1. 加载广告
csharp
U8AdInterface.Instance.LoadInterstitialAd(adId);

参数说明:

参数名称参数类型参数说明
adIdstringU8SDK后台创建的插屏广告类型的广告位ID,如果还不知道怎么创建,可以参考文档:获取广告参数
  1. 展示广告
csharp
if (U8AdInterface.Instance.IsInterstitialAdReady()) {
	U8AdInterface.Instance.ShowInterstitialAd(adId);
}
  1. 广告回调

广告事件触发时,SDK会通过OnAdResult回调给游戏,其中adType为interstitialeventType为具体的事件名称。 目前主要有如下事件:

bash

onLoaded: 广告加载成功
onShow: 广告曝光成功
onFailed: 广告加载或播放失败
onClicked: 广告被点击
onSkip: 广告被跳过
onClosed: 广告被关闭
3、 横幅广告
  1. 展示广告
csharp
U8AdInterface.Instance.ShowBannerAd(adId, posType);

参数说明:

参数名称参数类型参数说明
adIdstringU8SDK后台创建的Banner广告类型的广告位ID,如果还不知道怎么创建,可以参考文档:获取广告参数
posTypeintBanner广告的位置,1:位于屏幕最上方;2:位于屏幕最下方
  1. 广告回调

广告事件触发时,SDK会通过OnAdResult回调给游戏,其中adType为bannereventType为具体的事件名称。 目前主要有如下事件:

bash

onLoaded: 广告加载成功
onShow: 广告曝光成功
onFailed: 广告加载或播放失败
onClicked: 广告被点击
onSkip: 广告被跳过
onClosed: 广告被关闭
4、 开屏广告

自动开屏广告(仅Android平台支持)

因为开屏广告一般是作为启动屏展示, 结合U8聚合SDK提供的分包工具, 我们支持自动将开屏广告作为启动屏(启动Activity),无需游戏开发者接入, 只需要在后台广告参数中打开开关,配置好广告位ID即可:

U8聚合广告-自动开屏

按上图配置后,通过U8聚合SDK打包工具分包后, 就可以测试开屏广告效果了。

但是,请注意, 自动开屏广告也有一定的局限性:


如果在游戏层自行实现开屏广告, 可以按如下说明调用:

  1. 加载广告
csharp
U8AdInterface.Instance.LoadSplashId(adId);

参数说明:

参数名称参数类型参数说明
adIdstringU8SDK后台创建的开屏广告类型的广告位ID,如果还不知道怎么创建,可以参考文档:获取广告参数
  1. 展示广告
csharp
if (U8AdInterface.Instance.IsSplashAdReady()) {
	U8AdInterface.Instance.ShowSplashAd(adId);
}
  1. 广告回调

广告事件触发时,SDK会通过OnAdResult回调给游戏,其中adType为splasheventType为具体的事件名称。 目前主要有如下事件:

bash

onLoaded: 广告加载成功
onShow: 广告曝光成功
onFailed: 广告加载或播放失败
onClicked: 广告被点击
onSkip: 广告被跳过
onClosed: 广告被关闭

其他接口

1、获取当前渠道号

csharp

string currChannel = U8SDKInterface.Instance.getCurrChannel();

2、自定义事件埋点

WARNING

Unity中的代码,我们已经在初始化注册登录创建角色进入游戏角色等级升级支付几个时机做了自动上报,游戏层不用在这些时机再次上报了。

SDK中已经内置了一些数据统计/买量埋点上报插件SDK, 游戏层如果需要上报一些自定义事件到这些平台,可以调用如下接口:

csharp
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("param1", "1");
map.Add("param2", "2");
U8SDKInterface.Instance.EventUpload("eventName", map);  //eventName对应事件名称,map:事件参数

eventName在定义时请注意, 如下事件名称为SDK内置名称,

bash
register: 注册
login: 登录
purchase: 支付
createRole: 创建角色
enterGame: 进入游戏
levelUp: 角色等级升级

要使得上报成效, 还需要在U8打包工具中,给对应渠道开启对应的第三方埋点上报/统计插件SDK。

目前Android平台支持的统计/埋点SDK如下:

插件SDK名称SDK目录
友盟统计umengaction
头条买量埋点上报toutiaoaction
腾讯广点通埋点上报tengxunaction
热云reyunaction
快手埋点上报kuaishouaction
百度埋点上报baiduaction
Appsflyer埋点上报appsflyeraction

iOS平台支持的统计/埋点SDK如下:

插件SDK名称SDK目录
友盟统计UmengAction

版权所有© 2021-2030 上海丞诺网络科技有限公司