聚合渠道SDK-Unity(C#)

SDK合规指南

聚合渠道SDK合规指南

1 文档修订记录

文档版本 文档更新日期 文档更新内容
3.3.57 2024.06.03 1.新增「4.13 广告追踪数据获取」接口
3.3.51 2024.03.05 1.新增「4.12 广告监测上报」接口
3.3.42 2022.10.12 1.「4.7 支付」新增notifyURL参数
3.3.30 2021.11.18 从聚合SDK独立拆分

2 接入准备

推荐C#4 以上版本,如果游戏是4及以下版本,可能会无法支持新特性

推荐Unity2018及以上版本

2.1 添加文件

  • 将文件FYBase.unitypackageFYCombine.unitypackage先后导入到您的Unity工程的Assets文件夹下
  • 导入方式:打开UNITY工程,菜单栏Assets=>Import Package=>Custom Package... ,之后选择文件导入工程

2.2 配置DLL文件平台属性

UNITY项目中,选择对应Dll文件,在Inspector面板=>Select platforms for plugin 勾选对应平台

如果已经配置,请忽略此步骤

  • Assets\Plugins\FYBase\FYBase.dll勾选"Any Platform",并勾选"iOS"和“Android”以排除这2平台
  • Assets\Plugins\FYBase\Android\FYBase.dll选择平台为"Android",注意"Any Platform"不要打钩
  • Assets\Plugins\FYBase\iOS\FYBase.dll选择平台为"iOS",注意"Any Platform"不要打钩
  • Assets\Plugins\FYCombine\FYCombine.dll选择平台为"Any Platform"

2.3 添加SDK配置

1.打开"星云平台->对接中心->SDK对接->SDK 列表->基础接入参数",找到 App ID、App Key、Company ID

UNITY配置界面

2.在UNITY打开星云配置界面

UNITY配置界面

3.将 App ID、App Key 、Company ID 填入对应输入框,选择游戏屏幕朝向,点击确定,完成配置。注意:此步骤会生成SDK的一些配置,如果这一步没有执行,可能会造成接口调用没有任何响应。

UNITY配置界面

2.4 开启调试模式

1.将配置界面中的Debug勾选并点击确定,即可开启「调试模式」;取消勾选并点击确定,即关闭「调试模式」。

2.开启「调试模式」会显示客户端的悬浮球,点击进入调试工具可以查看接口/回调的调用信息,具体调试方法可查看文档

悬浮球

2.5 引入命名空间

游戏代码中引入以下命名空间,开始接入。

using FYCombine;

3 界面跳转标准规范

为了您能快速接入,并避免大多数对接问题,请按照标准规范来对接。

3.1 登录流程

登录流程

3.2 首屏-切换账号流程

首屏-切换账号流程

3.3 游戏中-切换账号流程

游戏中-切换账号流程

4 客户端接口与回调

接口接入的要诀?

  • 必接接口一定要接入,选接接口根据需要接入
  • 必传参数一定要传,能传的参数尽量都传

接口的回调何时注册?

  • 第一种方式:在初始化回调成功后注册其余的回调
  • 第二种方式:在每次调用对应接口前都预先注册对应的回调
  • 综合使用:先使用第一种方式,之后如需改变再重新注册

4.1客户端回调

1.初始化回调 FYCombineInitCallback

  • 游戏应在确保收到此回调后才能调用聚合渠道模块其他接口

  • 游戏不需管是否初始化成功,只要关心有没有收到初始化回调即可,也不需要重新调用初始化,SDK内部自己会处理初始化失败的情况

  • 使用方式:

FYCombineBridge.Instance.FYCombineInitCallback = (isSuccess) => {
    // TODO: 初始化完成
};

2.登录回调 FYCombineLoginCallback

  • 收到此回调的「登录成功」时,需将登录参数传到游戏服务器,再请求聚合服务端做登录校验,校验成功才算登录成功,具体校验方式请看服务端接入文档

  • 游戏收到此回调的「登录取消」或「登录失败」时,需向用户提供再次登录的按钮,以便用户能重新登录

  • 假如在游戏正在进行中,收到此回调的「登录成功」通知时,并且 open_id 变了,此时需要退出到登录首屏,切换成另外一个角色,并重新进入游戏

  • 关于identityBirthday、identityAge这两个参数的使用,因不同渠道给到聚合的可能是生日也可能是年龄,所以若需使用这2个值,需对这2个值共同进行判断,如果identityAge有值就使用identityAge,如果没有就解析identityBirthday

  • 使用方式:

FYCombineBridge.Instance.FYCombineLoginCallback = new FYCombineLoginCallback((loginSuccessInfo) => {
    //TODO: 登录成功
    //loginSuccessInfo.openId;              // 游戏维度唯一用户ID,一般游戏只用到openId即可;
    //loginSuccessInfo.token;               // 登录校验码,有效时间 7天,请在有效时间内完成校验,如超出时间需重新调用登录接口获取新校验码
    //loginSuccessInfo.userId;              // 第三方用户ID;
    //loginSuccessInfo.unionId;             // 全渠道唯一用户ID;
    //loginSuccessInfo.channelId;           // 渠道ID;
    //loginSuccessInfo.identityBirthday;    // 身份证生日,格式:"1991-12-31"(有可能空);
    //loginSuccessInfo.identityAge;         // 身份证年龄(有可能空);
    //loginSuccessInfo.paymentCode;         // 支付标识;
    //loginSuccessInfo.passportCode;        // 通行证标识;
}, (commonInfo) => {
    //TODO: 登录取消
    //需向用户提供再次登录的按钮,以便用户能重新登录
}, (commonInfo) =>
{
    //TODO: 登录失败,需向用户提供再次登录的按钮,以便用户能重新登录
    //commonInfo.message; // 失败原因
});

3.支付回调 FYCombinePayCallback

  • 收到此回调的「支付成功」通知时,不能马上发放道具,游戏需要根据服务端的支付回调作为支付是否成功的依据,具体的服务端回调请看服务端接入文档

  • 此回调只可以用来控制游戏界面显示,例如 loading 框的关闭、遮罩层的关闭

  • 使用方式:

FYCombineBridge.Instance.FYCombinePayCallback = new FYCombinePayCallback((payInfo) => {
    //TODO: 支付成功
    //payInfo.gameOrderId; // 游戏订单号
    //payInfo.orderId;// 星云订单号
}, (payInfo) => {
    //TODO: 取消支付
}, (payInfo) => {
    //TODO: 支付失败
    //payInfo.message // 失败原因
}, (payInfo) => {   
    //TODO: 支付状态未知
    //第三方渠道没有给明确的客户端支付状态,建议游戏提示“如若购买成功,稍后即到账”类似的不是很明确的提示
    //若后续有出"九游(UC)"这个渠道,请处理这个逻辑
});

4.退出游戏回调 FYCombineExitGameCallback

  • 此回调是 Android 独有的

  • 当接收到此回调时,如果 isExit 为 true 则直接退出,为 false 时需弹出游戏自定义的退出框

  • 使用方式:

FYCombineBridge.Instance.FYCombineExitGameCallback = (isExit) => {
    if (isExit)
    {
        //游戏在此时直接关闭应用
    }
    else {
        //游戏可以选择弹出自定义退出框
    }
};

5.登出回调 FYCombineLogoutCallback

  • 当游戏调用「登出接口」,本SDK会执行此回调,游戏在此处判断是否在游戏内,如果在游戏内则退出到游戏登录首屏

  • 一些第三方通行证自带登出按钮,当用户点击登出按钮时,也会执行此回调

  • 使用方式:

    FYCombineBridge.Instance.FYCombineLogoutCallback = (isLogout) => {
    // TODO: 退出到登录首页
    };

6.实名认证回调 FYCombineRealNameCallback

  • 当用户填写了实名认证信息并提交完成,将触发此回调的「认证成功」,并提供相关的实名信息

  • 关于identityBirthday、identityAge这两个参数的使用,因不同渠道给到聚合的可能是生日也可能是年龄,所以若需使用这2个值,需对这2个值共同进行判断,如果identityAge有值就使用identityAge,如果没有就解析identityBirthday

  • 使用方式:

FYCombineBridge.Instance.FYCombineRealNameCallback = new FYCombineRealNameCallback((realNameSuccessInfo) =>
{
    //TODO: 认证成功
    //realNameSuccessInfo包含认证信息,游戏可以在此对用户进行奖励
    //realNameSuccessInfo.identityBirthday;//身份证生日,格式:"1991-12-31"(有可能空)
    //realNameSuc.identityAge;//身份证年龄(有可能空)
}, (unRealNameInfo) =>
{
    //TODO: 未实名游客时间
    //可以用来给游戏提示距离实名认证弹出还有多少时间。每隔10s会回调一次
    //unRealNameInfo.totalTime;//游客时间总时长,单位:秒
    //unRealNameInfo.remainTime;//游客剩余时长,单位:秒
}, (commonInfo) =>
{
    //TODO: 实名认证取消
}, (commonInfo) =>
{
    //TODO: 实名认证失败
    //commonInfo.message; // 失败原因
});

7.获取本地化商品信息回调 FYCombineQueryLocalProductsCallback

  • 当用户调用QueryLocalProducts接口后,将触发此回调,返回商品信息列表

  • 还在母包测试阶段,会返回测试用的商品信息,用于调试;待打出正式渠道包后,会根据真实情况,返回正确的本地化商品信息,具体的能获取到什么以苹果后台或谷歌后台的配置为准

  • 如果回调失败或者返回的本地化商品信息为空,请使用原始的商品信息进行展示

  • 使用方式:

FYCombineBridge.Instance.FYCombineQueryLocalProductsCallback = new FYCombineQueryLocalProductsCallback((localProductInfos)=> {
    //TODO: 获取本地化商品信息回调成功
    //localProductInfos.localProductInfos;//商品信息列表List<LocalProductInfo>
}, (commonInfo)=> {
   //TODO: 获取本地化商品信息回调失败,请展示原始的商品信息
   //commonInfo.message; // 失败原因
});
  • LocalProductInfo包含字段
参数 说明
productId 商品 ID
title 本地化标题
desc 本地化说明
price 本地化价格,例如:10
formatPrice 本地化价格,包含货币单位,例如:$10
currencyCode 本地化货币代号,例如:CNY

8.绑定回调FYCombineBindCallback

  • 当用户触发账号绑定时,如果绑定成功,则回调成功;如果取消绑定或者绑定失败,则返回绑定失败

  • 绑定成功可以到服务端查询用户的绑定信息,具体请看服务端接入文档的「登录校验接口」

  • 使用方式:

FYCombineBridge.Instance.FYCombineBindCallback = (isSuccess) =>
{
    if(isSuccess){
        //TODO: 绑定成功
    }else{
        //TODO: 绑定失败
    }
};

4.2 初始化接口(必接)

1.方法

  • void DoInit(string gameVersion)

2.说明

  • 游戏需要在刚启动游戏的时候调用

3.调用

FYCombineBridge.Instance.DoInit(gameVersion);

4.参数

参数 说明 是否必传
gameVersion 游戏版本号

5.回调

  • 初始化回调 FYCombineInitCallback

4.3 登录接口(必接)

1.方法

  • void DoLogin()

2.说明

  • 启动完游戏显示首页时调用

  • 玩家点击游戏界面的「进入游戏」时,需要判断是否有登录成功,如有则可以进入游戏;否则再次调用「账号登录接口」,让玩家重新登录,直到登录成功

3.调用

FYCombineBridge.Instance.DoLogin();

4.参数

5.回调

  • 登录回调 FYCombineLoginCallback

4.4 切换账号接口(必接)

1.方法

  • void DoSwitchAccount()

2.说明

  • 在需要切换账号时调用,该接口会弹出登录窗口,让用户重新登录

  • 与「登录接口」不同的是,「登录接口」非首次登录会自动登录,而此接口必定会弹出登录窗口

3.调用

FYCombineBridge.Instance.DoSwitchAccount();

4.参数

5.回调

  • 登录回调 FYCombineLoginCallback

4.5 用户中心接口(必接)

1.方法

  • void DoUserCenter(string playerId, string playerName, string playerLevel, string serverId, string serverName, string vipLevel="0")

2.说明

  • 需在游戏内的设置界面,放置一个「用户中心」按钮,点击按钮调用此接口

  • 调用此接口将弹出用户中心界面

3.调用

FYCombineBridge.Instance.DoUserCenter(playerId,playerName,playerLevel,serverId,serverName,vipLevel);

4.参数

参数 说明 是否必传
playerId 玩家ID
playerName 玩家名字
playerLevel 玩家等级,数字格式
serverId 服务器ID,数字格式
serverName 区服名称
vipLevel vip等级,数字格式,如果游戏没有vip等级则传"0"

5.回调

4.6 登出接口(选接)

1.方法

  • void DoLogout()

2.说明

  • 退出用户账号,并回调「登出回调」

3.调用

FYCombineBridge.Instance.DoLogout();

4.参数

5.回调

  • 登出回调 FYCombineLogoutCallback

4.7 支付接口(选接)

1.方法

  • void DoPay(string playerId, string playerName, string playerLevel, string serverId, string serverName, string goodsId, string goodsName, string payAmount, string gameOrderId, PaySignType paySignType, string vipLevel = "0", string notifyExt = "", string notifyURL = "")

2.说明

  • 调用此接口将拉起支付界面
  • 建议游戏制定的商品标识格式为:com.feiyu.app_id.xxxx,以保证商品 id 的唯一性
  • 打开"星云平台->对接中心->SDK对接->SDK列表->基础接入参数->游戏支付回调地址",配置游戏服务端的支付回调地址,支付完成后会通过此地址回调支付结果
    图片
  • 收到客户端支付回调时,不能马上发放道具,游戏需要根据服务端的支付回调作为支付是否成功的依据,具体的服务端回调请看服务端接入文档
  • 客户端的支付回调只可以用来控制游戏界面显示,例如loading框的关闭、遮罩层的关闭

3.调用

FYCombineBridge.Instance.DoPay(playerId, playerName, playerLevel, serverId,serverName, goodsId, goodsName, payAmount, gameOrderId, paySignType, vipLevel, notifyExt,notifyURL);

4.参数

参数 说明 是否必传
playerId 玩家ID。对应服务端支付回调的player_id参数
playerName 玩家名字
playerLevel 玩家等级,数字格式
serverId 服务器ID,数字格式 。对应服务端支付回调的server_id参数
serverName 服务器名字
goodsId 商品标识,建议格式:com.feiyu.app_id.xxxx,例:com.feiyu.20001.store1 。对应服务端支付回调的goods_id参数
goodsName 商品名称
payAmount 支付金额,单位:分 (海外游戏传美分),数字格式。对应服务端支付回调的total_amount参数
gameOrderId 游戏订单号,由游戏生成并管理。服务端支付回调会回传,游戏需进行唯一性校验,防止重复下发商息给玩家。字符串类型,50个字符内。 对应服务端支付回调的out_trade_no参数
paySignType 签名类型,游戏服务器接收回调通知签名方式,需要游戏传递:md5/rsa
vipLevel vip等级,数字格式,如果游戏没有vip等级则传"0"
notifyExt 额外参数,游戏的透传参数可通过此参数传递,支付完成后平台服务端会回调此参数给游戏服务端。对应服务端支付回调的notify_ext参数
notifyURL 1.通过该值能在客户端动态传递服务端支付回调地址;2.若您在客户端传递了该地址,则支付完成后会通过此地址回调支付结果;3.若您同时也在星云后台配置了支付回调地址,会优先回调客户端传递的地址;4.需要先配置支付回调可信域名,请前往"星云后台->对接中心->回调配置->支付回调可信域名"进行配置,否则无法回调成功;5.若您在客户端传递了该地址,在游戏包体发布之前,建议您仔细检查该参数是否配置正确,以防止包体发布后支付出现问题

5.回调

  • 支付回调 FYCombinePayCallback

4.8 退出游戏接口(选接)

1.方法

  • void DoExitGame()

2.说明

  • 仅 Android 有效
  • 当用户按手机返回键,意图退出应用时调用

3.调用

FYCombineBridge.Instance.DoExitGame();

4.参数

5.回调

  • 退出游戏回调 FYCombineExitGameCallback

4.9 第三方收集信息接口(选接)

1.方法

  • void DoCollectInfo(CollectMethod method, string playerId, string playerName, string playerLevel, string serverId, string serverName, string playerTime)

2.说明

  • 用于收集第三方SDK收集游戏数据。
  • 如果后续有出"B站"、"九游(UC)"、"OPPO"、"vivo"、"华为" 这几个渠道中任意一个,请对接此接口,否则上架渠道会被拒。

3.调用

FYCombineBridge.Instance.DoCollectInfo(method, playerId, playerName, playerLevel, serverId, serverName, playerTime);

4.参数

参数 说明 是否必传
method 进入区服:enterServer,创建角色:createRole ,角色升级:levelUp
playerId 角色ID
playerName 角色名称
playerLevel 角色等级,数字格式
serverId 区服ID,数字格式
serverName 区服名称
playerTime 角色创建时间,必须取服务端时间,必须为时间戳

5.回调

  • 暂无

4.10 获取配置参数接口(选接)

1.说明

  • 游戏有用到聚合 SDK 的一些配置参数,可以从以下接口获取。

2.调用方式

  • 获取APP ID
string appID= FYCombineBridge.Instance.GetAppId();
  • 获取渠道ID,如果游戏要对渠道做差异化处理时,可以使用此ID作为区分;渠道ID列表,请查看星云平台->对接中心->渠道打包->渠道配置;在母包阶段,Android获取到的渠道ID默认为10000,iOS获取到的渠道ID默认为10001
string channelId= FYCombineBridge.Instance.GetChannelId();
  • 获取设备 ID,此 ID 为 SDK 生成的标识设备的唯一 ID,不是 IDFA 或 AndroidID
string deviceId= FYCombineBridge.Instance.GetDeviceId();
  • 获取IDFA(The Identifier for Advertisers)【仅iOS有效】,若用户关闭 IDFA 功能,有可能取不到值
string IDFA= FYCombineBridge.Instance.GetIDFA();
  • 通行证标识,用来标明该渠道用什么通行证进行登录,如果游戏要对不同通行证做差异化处理时,可以使用此标识作为区分,例如:feiyu3、uc、yingyongbao,所有渠道的通行证标识请看渠道版本信息
string passportCode= FYCombineBridge.Instance.GetPassportCode();
  • 支付标识,用来标明该渠道用什么支付方式,一般和通行证代号一致,有一些特殊的渠道登录和支付不一致,例如:苹果渠道,登录是飞鱼通行证(feiyu3),支付则是苹果支付(apple),所有渠道的支付标识请看渠道版本信息
string paymentCode = FYCombineBridge.Instance.GetPaymentCode();

4.11 获取本地化商品信息接口(选接)

1.方法

  • void QueryLocalProducts(params string[] products)

2.说明

  • 如果后续有出"官方Apple渠道"、"海外官方Apple渠道"、"海外官方Android渠道"这几个渠道中的任意一个,请对接此接口

  • 应用场景1:获取本地化商品信息。当游戏在不同国家或地区发行时,想要展示不同的商品信息,请调用此接口,在回调中接收商品信息;能获取到的什么本地化商品信息,取决于您在苹果后台或谷歌后台的本地化商品配置,如果没有配置,则会回调失败或回调空,此时您应该使用原始的商品信息进行展示;在母包阶段,会回调测试用的商品信息用于调试,请在打出渠道包后再核实一下真实的商品信息是否展示正确;应尽量在发起支付提前久一点调用此接口,因为系统需要有一点时间(10秒内)异步去获取商品信息,并应避免重复调用此接口,正确做法:在进入游戏后调用一次此接口,并将获取到的商品信息缓存下来,在用户查看商店时,将缓存下来的商品信息用于展示

  • 应用场景2:加速内购拉起。游戏拉起苹果内购或者谷歌内购比较慢,是由于首次拉起该商品内购时,系统需要时间请求该商品信息,如果想要提高内购拉起速度,请在在进入游戏后调用一次此接口,系统会进行一次内购商品信息获取并缓存下来,后续再拉起商品内购就会很快;如果只是单纯想要提高内购拉起速度,而不需要进行本地化商品展示,则不需要在回调中处理任何逻辑

3.调用

string[] products = new string[] { "com.feiyu.xxx.product1","com.feiyu.xxx.product2", "com.feiyu.xxx.product3" };
FYCombineBridge.Instance.QueryLocalProducts(products);

4.参数

参数名 说明 是否必传
products 商品 ID 数组

5.回调

  • 获取本地化商品信息回调 FYCombineQueryLocalProductsCallback

4.12 广告监测上报(选接)

1.方法

  • void DoADTrackingReport (string eventName, string paramsJson)

2.说明

  • 作用:此接口用来触发第三方渠道的广告监测事件上报
  • 使用说明,以华为渠道为例:
    • 对接:游戏在对应的时机调用此接口,通过传入不同的事件常量以及事件参数,来触发相应的上报事件
    • 调试:游戏对接完成后,导出Android游戏母包,可通过SDK调试模式,查看该接口是否对接成功,详情请看本文档第2.4小节
    • 配置:打开星云平台-对接中心-渠道打包-渠道配置-华为渠道-配置,将ad_tracking_switch设置为1,并配置其他 ad_tracking 开头的参数(参数由投放人员提供)
    • 打包:将Android游戏母包上传到星云后台,通过Android打包工具,输出华为渠道包,此包体即带有华为的广告上报功能
  • 注意:
    • 游戏按照文档中给出的调用时机接入各个事件,但是在接入之前要跟发行同学再次确认,以对齐数据统计标准
    • 目前此接口只在导出的Android包体上有作用,导出iOS的包体无需关心此接口

3.调用

// 事件名称:启动
// 调用时机:需在刚启动游戏的时候调用,若有隐私授权弹窗,需在点击隐私授权弹窗确认之后调用
// 事件常量:START
// 事件参数:无
FYCombineBridge.Instance.DoADTrackingReport("START", "");

// 事件名称:创建角色
// 调用时机:需在游戏创建角色的调用
// 事件常量:CREATE
// 事件参数:
//      playerId:角色唯一标识,字符串
XXXModel model = new XXXModel(); // 游戏自定义一个model用来转json
model.playerId = "xxxx";
string json = JsonUtility.ToJson(model);
FYCombineBridge.Instance.DoADTrackingReport("CREATE", json);

// 事件名称:进入游戏
// 调用时机:需在角色进入游戏的调用
// 事件常量:ENTER
// 事件参数:
//      playerId:角色唯一标识,字符串
XXXModel model = new XXXModel(); // 游戏自定义一个model用来转json
model.playerId = "xxxx";
string json = JsonUtility.ToJson(model);
FYCombineBridge.Instance.DoADTrackingReport("ENTER", json);

// 事件名称:支付
// 调用时机:需在支付完成之后调用
// 事件常量:PAY
// 事件参数:
//      payAmount:支付金额,数字,单位-分,例如支付1元需传100
XXXModel model = new XXXModel(); // 游戏自定义一个model用来转json
model.payAmount = 100;
string json = JsonUtility.ToJson(model);
FYCombineBridge.Instance.DoADTrackingReport("PAY", json);

4.参数

参数名 说明 是否必传
eventName 事件常量,字符串,用来区分不同的事件
paramsJson 事件参数,json字符串,用来传递事件的参数,如果没有参数传""字符串
  • 事件定义:
eventName 说明 是否必接
START 启动,需在刚启动游戏的时候调用,若有隐私授权弹窗,需在点击隐私授权弹窗确认之后调用
CREATE 创建角色,需在游戏创建角色的调用
ENTER 进入游戏,需在角色进入游戏的调用
PAY 支付,需在支付完成之后调用
  • CREATE 事件参数说明:
参数 说明 是否必传
playerId 角色唯一标识,字符串
  • ENTER 事件参数说明:
参数 说明 是否必传
playerId 角色唯一标识,字符串
  • PAY 事件参数说明:
参数 说明 是否必传
payAmount 支付金额,数字,单位-分,例如支付1元需传100

4.13 广告追踪数据获取(选接)

1.方法

  • string GetADTrackingData()

2.说明

  • 作用:此接口用来获取广告追踪数据
  • 使用说明,以华为渠道为例:
    • 对接:游戏在聚合初始化回调之后对应的时机调用此接口
    • 配置:打开星云平台-对接中心-渠道打包-渠道配置-华为渠道-配置,将ad_tracking_switch设置为1,并配置其他 ad_tracking 开头的参数(参数由投放人员提供)
    • 打包:将Android游戏母包上传到星云后台,通过Android打包工具,输出华为渠道包,此包体即带有华为的广告上报功能,可获取追踪数据
  • 注意:
    • 游戏需要在聚合初始化回调之后调用
    • 目前此接口只在导出的Android包体上有作用,导出iOS的包体无需关心此接口

3.调用

string adTrackingData = FYCombineBridge.Instance.GetADTrackingData();

4.返回参数

返回JSON字符串,JSON对象参数如下,请通过解析JSON字符串获取参数:

参数名 说明
taskid 任务ID,可能为空
subTaskId 子任务ID,如"200037037",可能为空
callback 回传参数,用于oCPD对接,如"security:CD40F6*****C7A9F4",可能为空
channel 由广告主运营在华为投放系统针对广告任务绑定的智能分包渠道号,可能为空
RTAID 华为投放系统返回RTAID,可能为空

5 原生端对接

5.1 iOS

5.1.1 导出XCODE工程

  • 将UNITY项目导出为XCODE工程,然后就可以在Xcode开发工具上调试了

5.2 Andorid

5.2.1 导出Android工程

  • 方式一:使用UNITY打包Android APK调试
  • 方式二:将UNITY项目导出为Android Studio工程,然后就可以在Android Studio开发工具上调试了

6 F&Q

6.1 iOS打包报错:MapFileParser.sh:Permission denied

  • 打开终端,输入命令:chmod +x /Users/....../MapFileParser.sh (iOS工程目录下MapFileParser.sh的路径)

6.2 iOS打包报错:linker command failed with exit code 1

  • Xcode配置:PROJECT -> Build Settings -> Enable Bitcode -> NO,其余具体配置可参照聚合SDK-iOS文档的添加SDK配置部分

6.3 切换账号的流程是怎样的?

常规的流程:点击用户中心的切换账号 -> 接收到退出回调(logoutCallback) -> 退出到登录首屏 -> 调出登录窗口 -> 登录另一个账号 -> 点击进入游戏 -> 游戏中

非常规的流程:点击用户中心的切换账号 -> 弹出登录窗口 -> 登录另一个账号 -> 接收到登录回调(loginCallback) -> 检测 open_id 变了 -> 退出到登录首屏 -> 检测已有账号登录 -> 点击进入游戏 -> 游戏中

非常规的流程会出现在某些渠道(比如 4399),没有退出回调,直接呼出登录窗口。那这时候就需要检查 open_id 是否改变,来让游戏重新回到登录首屏。

也就是说,以上这 2 个流程,游戏都要有。

6.4 渠道ID(channel_id)和通行证标识(passport_code)有什么区别?

  • 一种通行证标识,可以对应多个渠道ID,渠道ID的颗粒度是最低的。游戏对渠道做区分,通常用渠道ID 即可,这个是最保险的方法。如果只想粗颗粒度的区分不同类型的渠道,则用通行证标识。

  • 具体渠道ID的值,可以查看星云后台的 对接中心-渠道打包-渠道配置 。

  • 具体通行证标识,可以查看渠道版本信息

6.5 调用接口没有任何响应

1.请执行一遍本文档 "2.3 添加SDK配置" 的第3步,以确保SDK的配置有生成。

2.可能配置有冲突,具体请查看: 6.6 AndroidManifest融合时配置冲突

6.6 AndroidManifest融合时配置冲突

1.错误1:Activity配置冲突

ArgumentException: 存在其他启动的Activity:com.example.YourActivity,与目标配置 com.stars.bridge.FYSDKActivity不符,只允许存在一个

(1)解决方案一:

在Assets/Plugins目录下新建目录(XXXConfig/Editor/),并创建编辑器脚本,参考ConfigWindow.RegisterConfig方法,新建AndroidBuildConfig.json并填写: {"FYSDKActivity":{"superClass":"com.example.YourActivity"}},并注册自定义的SDK配置路径到事件ConfigWindow.AddAndroidConfigPathsAct中,最后将AndroidManifest文件的com.example.YourActivity修改为com.stars.bridge.FYSDKActivity

(2) 解决方案二(每次星云配置后会还原修改,不推荐):

请考虑使用继承方式(com.stars.bridge.FYSDKActivity extends com.example.YourActivity)或者将com.example.YourActivity代码融合到com.stars.bridge.FYSDKActivity中,最后将AndroidManifest文件的com.example.YourActivity修改为com.stars.bridge.FYSDKActivity

2.错误2:Application配置冲突

ArgumentException: application配置冲突,android:name的属性com.example.YourApplication与目标配置com.stars.bridge.FYSDKApplication不符

(1) 解决方案一:

在Assets/Plugins目录下新建目录(XXXConfig/Editor/),并创建编辑器脚本,参考ConfigWindow.RegisterConfig方法,新建AndroidBuildConfig.json并填写: {"FYSDKApplication":{"superClass":"com.example.YourApplication"}},并注册自定义的SDK配置路径到事件ConfigWindow.AddAndroidConfigPathsAct中,最后将AndroidManifest文件的com.example.YourApplication修改为com.stars.bridge.FYSDKApplication

(2) 解决方案二(每次星云配置后会还原修改,不推荐):

请考虑使用继承方式(com.stars.bridge.FYSDKApplication extends com.example.YourApplication)或者将com.example.YourApplication代码融合到com.stars.bridge.FYSDKApplication中,最后将AndroidManifest文件的com.example.YourApplication修改为com.stars.bridge.FYSDKApplication