SDK合规指南
1 文档修订记录
文档版本 | 文档更新日期 | 文档更新内容 |
---|---|---|
3.3.73 | 2024.11.11 | 1.「2.6 添加Activity」新增健康系统Activity |
3.3.63 | 2024.08.23 | 1.「4.10 获取配置参数接口」新增渠道模板标识 |
3.3.57 | 2024.06.03 | 1.新增「4.13 广告追踪数据获取」接口 |
3.3.56 | 2024.05.10 | 1 新增SDK合规指南;2.可选个人信息的配置。 |
3.3.51 | 2024.03.05 | 1.新增「4.12 广告监测上报」接口 |
3.3.50 | 2023.11.24 | 1.「2.6 添加Activity」新增 service 和 provider配置 |
3.3.42 | 2022.10.12 | 1.「2.6 添加Activity」新增 FYCombineUseCenterActivity 配置,请将其添加到工程 AndroidMenifest.xml;2.「4.4 支付」新增notifyURL 参数 |
3.3.30 | 2021.11.18 | 从聚合SDK独立拆分 |
2 接入准备
支持 Android Studio 接入
2.1 导入SDK
打开下载好的 FYBase、FYCombine 目录,拷贝目录中所有 .aar 到工程的 libs 目录中
2.2 配置 gradle
打开工程的 build.gradle
- 拷贝以下代码到
android
字段下。
repositories {
flatDir {
dirs 'libs'
}
}
- 拷贝以下代码到
dependencies
字段下。
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
fileTree(dir: 'libs', include: ['*.aar']).each { file ->
api(name: file.name.lastIndexOf('.').with {
it != -1 ? file.name[0..<it] : file.name
}, ext: 'aar')
}
2.3 添加SDK配置
1.到星云平台的"对接中心->SDK对接->SDK列表->基础接入参数->SDK配置参数"下载如下的配置文件:
- Android SDK 配置文件:FYCoreConfig.xml
2.打开以上的配置文件,拷贝所有meta-data
配置参数到游戏的 AndroidManifest.xml 中的application
标签下
3.可选个人信息的配置。如不希望本SDK采集某信息,请将对应字段的值改为0。如允许本SDK采集某信息,请将对应字段的值改为1
(1)在AndroidManifest.xml 中添加如下配置
<meta-data android:name="FY_GAME_PRIVACY" android:value="{
"android_id ": "0",
"basic_device_data" : "0",
"os_version" : "0",
"network_state" : "0"
}"/>
(2)字段名称说明
OS | 个人信息类型及字段 | 用途和目的 | 是否可选 | 关闭方式 |
---|---|---|---|---|
Android | 设备基础信息(设备型号、硬件信息、屏幕分辨率) | 帮用户排查异常时使用,作为异常分析的依据 | 是 | 修改配置参数 FY_GAME_PRIVACY 的 basic_device_data 字段值为"0" |
Android | Android ID | 帮用户排查异常时使用,作为异常分析的依据 | 是 | 修改配置参数 FY_GAME_PRIVACY 的 android_id 字段值为"0" |
Android | 操作系统版本 | 帮用户排查异常时使用,作为异常分析的依据 | 是 | 修改配置参数 FY_GAME_PRIVACY 的 os_version 字段值为"0" |
Android | 网络状态 | 帮用户排查异常时使用,作为异常分析的依据 | 是 | 修改配置参数 FY_GAME_PRIVACY 的 network_state 字段值为"0" |
Android | OAID(版本3.3.56已去除) | 帮用户排查异常时使用,作为异常分析的依据 | 是 | |
Android | MAC(版本3.3.56已去除) | 帮用户排查异常时使用,作为异常分析的依据 | 是 | |
Android | IMEI(版本3.3.56已去除) | 帮用户排查异常时使用,作为异常分析的依据 | 是 |
2.4 配置 Application
1、在游戏包名下新增一个 GameApplication 类,该类继承自 Application,请在GameApplication 类的 onCreate
方法中调用以下代码:
FYCombine.getInstance().doApplicationOnCreate();
请在GameApplication类的 attachBaseContext
方法中调用以下代码:
FYAPP.getInstance().init(this);
FYCombine.getInstance().doApplicationAttachBaseContext(base);
打开 AndroidManifest.xml 在 application 将其继承于 GameApplication:
2.如果游戏已经继承于其他 Application,请在游戏自定义的 Application 类的 onCreate
方法中调用以下代码:
FYCombine.getInstance().doApplicationOnCreate();
请在游戏自定义的 Application 类的 attachBaseContext
方法中调用以下代码:
FYAPP.getInstance().init(this);
FYCombine.getInstance().doApplicationAttachBaseContext(base);
3.以上2个步骤任选1个接入,否则会造成 SDK 错误闪退
。
2.5 添加权限
打开 AndroidManifest.xml 添加如下权限配置:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.6 添加Activity
1.在 AndroidManifest.xml 中的 添加 Activity、service 和 provider
。
<activity
android:name="com.feiyu.sandbox.platform.activity.FYSPUserCenterActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity
android:name="com.feiyu.sandbox.platform.activity.FYSPRealNameActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity
android:name="com.stars.debuger.activity.FYDebuggerInfoActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.stars.combine.activity.FYCombineUseCenterActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard|touchscreen"
android:screenOrientation="behind"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="adjustPan|stateHidden" />
<service
android:name="com.stars.core.download.service.DownloadService"
android:exported="true"></service>
<provider
android:name="com.stars.core.utils.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/fy_file_paths" />
</provider>
<activity android:name ="com.stars.antiaddiction.webview.FYWebViewActivity"
android:windowSoftInputMode="adjustResize|stateHidden"
android:configChanges="orientation|screenSize|keyboardHidden"
/>
<activity android:name ="com.stars.antiaddiction.businiss.FYRealNameActivity"
android:windowSoftInputMode="adjustResize|stateHidden"
android:configChanges="orientation|screenSize|keyboardHidden"
/>
2.7 添加类引用
import com.stars.core.base.FYAPP;
import com.stars.combine.model.FYCombineInitInfo;
import com.stars.combine.model.FYCombinePayInfo;
import com.stars.combine.model.FYCombineUserCenterInfo;
import com.stars.combine.FYCombine;
2.8 添加 Activity生命周期方法
1、说明
- 调用点:onKeyDown生命周期
2、调用代码
FYDebugger.getInstance().onKeyDown(keyCode,event);
3、参考范例
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
FYDebugger.getInstance().onKeyDown(keyCode,event);
return super.onKeyDown(keyCode, event);
}
2.9 开启调试模式
1.将 AndroidManifest.xml 中的 FY_GAME_DEBUG 的值改为 1,即可开启「调试模式」;FY_GAME_DEBUG 改为 0,即关闭「调试模式」。
2.开启「调试模式」会显示客户端的悬浮球,点击进入调试工具可以查看接口/回调的调用信息,具体调试方法可查看文档。
3 界面跳转标准规范
为了您能快速接入,并避免大多数对接问题,请按照标准规范来对接。
3.1 登录流程
3.2 首屏-切换账号流程
3.3 游戏中-切换账号流程
4 客户端接口
接口接入的要诀?
-
必接接口一定要接入,选接接口根据需要接入
-
必传参数一定要传,能传的参数尽量都传
-
所有的生命周期接口一定要接入
4.1 初始化(必接)
1.说明
-
游戏需要在刚启动游戏的时候调用
-
此接口在执行以后,会调用相应的回调方法,可以在回调方法中,处理相应的游戏逻辑
2.调用
FYCombine.FYCombineCallback callback = new FYCombine.FYCombineCallback() {
// 初始化回调
// 游戏应在确保收到此回调后才能调用聚合渠道模块的其他接口
// 游戏不需管是否初始化成功,只要关心有没有收到初始化回调即可,也不需要重新调用初始化,SDK内部自己会处理初始化失败的情况
@Override
public void initCallback(FYCombineResponse response) {
// TODO: 初始化完成
}
// 登录回调
// 收到此回调的「登录成功」时,需将登录参数传到游戏服务器,再请求聚合服务端做登录校验,校验成功才算登录成功,具体校验方式请看「服务端接入文档」https://help.737.com/archives/docs/detail/channel_combine/server/base
// 游戏收到此回调的「登录取消」或「登录失败」时,需向用户提供再次登录的按钮,以便用户能重新登录
// 假如在游戏中收到此回调,并且 open_id 变了,此时需要退出到登录首屏,切换成另外一个角色,并重新进入游戏
// 关于identityBirthday、identityAge这两个参数的使用,因不同渠道给到聚合的可能是生日也可能是年龄,所以若需使用这2个值,需对这2个值共同进行判断,如果identityAge有值就使用identityAge,如果没有就解析identityBirthday
@Override
public void loginCallback(FYCombineResponse response) {
if (response.getStatus() == FYCombineResponse.SUCCESS) {
// 游戏维度唯一用户ID
String openId = (String) response.getDataValue("open_id");
// 登录校验码,有效时间 7天,请在有效时间内完成校验,如超出时间需重新调用登录接口获取新校验码
String token = (String) response.getDataValue("token");
// 第三方用户ID
String userId= (String) response.getDataValue("user_id");
// 全渠道唯一用户ID
String unionId= (String) response.getDataValue("union_id");
// 渠道ID
String channelId = (String) response.getDataValue("channel_id");
// 身份证生日,格式:"1991-12-31"(有可能空)
String identityBirthday = (String) response.getDataValue("identity_birthday");
// 身份证年龄(有可能空)
String identityAge = (String) response.getDataValue("identity_age");
// 支付标识
String paymentCode = (String) response.getDataValue("payment_code");
// 通行证标识
String passportCode = (String) response.getDataValue("passport_code");
// TODO: 登录成功
// TODO: 请求游戏服务端验证登录
} else if (response.getStatus() == FYCombineResponse.LOGIN_CANCEL) {
// TODO: 登录取消
} else {
// TODO: 登录失败
// 失败原因
String message = response.getMessage();
}
}
// 登出回调
// 当游戏调用 doLogout接口,本SDK会触发此回调的「登出成功」,游戏在此处判断是否在游戏内,如果在游戏内则退出到首页
// 一些第三方通行证自带登出按钮,当用户点击此按钮时,也会执行此回调
@Override
public void logoutCallback(FYCombineResponse response) {
if (response.getStatus() == FYCombineResponse.SUCCESS) {
// TODO: 登出成功
}
}
// 支付回调
// 此回调不能作为支付成功的依据,故游戏不能在此处发放道具,游戏需要根据服务端的支付回调作为支付是否成功的依据,具体的服务端回调请看「服务端接入文档」https://help.737.com/archives/docs/detail/channel_combine/server/base
// 此回调只可以用来控制游戏界面显示,例如 loading 框的关闭、遮罩层的关闭
@Override
public void payCallback(FYCombineResponse response) {
// 星云订单号
String orderId = (String) response.getDataValue("order_id");
// 游戏订单号
String gameOrderId = (String) response.getDataValue("game_order_id");
if (response.getStatus() == FYCombineResponse.SUCCESS) {
// TODO: 客户端支付成功
} else if (response.getStatus() == FYCombineResponse.PAY_CANCEL) {
// TODO: 支付取消
} else if (response.getStatus() == FYCombineResponse.PAY_UNKNOWN) {
// TODO: 支付状态未知
// 第三方渠道没有给明确的客户端支付状态,建议游戏提示“如若购买成功,稍后即到账”类似的不是很明确的提示。
// 若后续有出"九游(UC)"这个渠道,请处理这个逻辑
} else {
// TODO: 支付失败
// 失败原因
String message = response.getMessage();
}
}
// 已废弃
@Override
public void pausePageCallback(FYCombineResponse response) {
}
// 退出游戏回调
// 此回调是 Android 独有的
// 当游戏调用 doExitGame 接口,本SDK会判断通行证平台是否有退出框,如果有,则触发此回调的「关闭应用」,游戏应在此时直接关闭应用;否则游戏可以选择弹出自定义退出框
@Override
public void exitGameCallback(FYCombineResponse response) {
if (response.getStatus() == FYCombineResponse.SUCCESS) {
// TODO: 关闭应用
} else {
// TODO: 弹出游戏自定义的退出框
}
}
// 实名认证回调
// 当用户填写了实名认证信息并提交完成,将触发此回调的「实名认证成功」,并提供相关的实名信息
// 关于identityBirthday、identityAge这两个参数的使用,因不同渠道给到聚合的可能是生日也可能是年龄,所以若需使用这2个值,需对这2个值共同进行判断,如果identityAge有值就使用identityAge,如果没有就解析identityBirthday
@Override
public void realNameCallback(FYCombineResponse response) {
if (response.getStatus() == FYCombineResponse.SUCCESS) {
// 身份证生日,格式:"1991-12-31"(有可能空)
String identityBirthday = (String) response.getDataValue("identity_birthday");
// 身份证年龄(有可能空)
String identityAge = (String) response.getDataValue("identity_age");
// TODO: 实名认证成功
} else if (response.getStatus() == FYCombineResponse.NO_REAL_NAME) {
// TODO: 未实名游客时间,可以用来给游戏提示距离实名认证弹出还有多少时间。每隔10s会回调一次
// 游客时间总时长,单位:秒
String totalTime = (String) response.getDataValue("total_time");
// 游客剩余时长,单位:秒
String remainTime = (String) response.getDataValue("remain_time");
} else if (response.getStatus() == FYCombineResponse.REAL_NAME_CANCEL) {
// TODO: 实名认证取消
} else {
// TODO: 实名认证失败
// 失败原因
String message = response.getMessage();
}
}
// 获取本地化商品信息回调
// 当用户调用`queryLocalProducts`接口后,将触发此回调,返回商品信息列表
// 还在母包测试阶段,会返回测试用的商品信息,用于调试;待打出正式渠道包后,会根据真实情况,返回正确的本地化商品信息,具体的能获取到什么以谷歌后台的配置为准`
// 如果回调失败或者返回的本地化商品信息为空,请使用原始的商品信息进行展示
@Override
public void queryLocalProductsCallback(FYCombineResponse response) {
if(response.getStatus() == FYCombineResponse.SUCCESS){
List<HashMap> mapList = (List<HashMap>) response.getDataValue("local_product_infos");
for(int i=0;i<mapList.size();i++){
HashMap map = mapList.get(i);
// 商品ID
String productId = String.valueOf(map.get("product_id"));
// 本地化标题
String title = String.valueOf(map.get("title"));
// 本地化说明
String desc = String.valueOf(map.get("desc"));
// 本地化价格
String price = String.valueOf(map.get("price"));
// 本地化价格,包含货币单位,例如 $10
String formatPrice = String.valueOf(map.get("format_price"));
// 本地化货币代号,例如 CNY
String currencyCode = String.valueOf(map.get("currency_code"));
}
} else {
// 获取本地化商品信息回调失败,请展示原始的商品信息
// 失败原因
String message = response.getMessage();
}
}
// 绑定回调
// 当用户触发账号绑定时,如果绑定成功,则回调成功;如果取消绑定或者绑定失败,则返回绑定失败
// 绑定成功可以到服务端查询用户的绑定信息,具体请看「服务端接入文档」的「登录校验接口」 https://help.737.com/archives/docs/detail/channel_combine/server/base
@Override
public void bindCallback(FYCombineResponse response) {
if(response.getStatus() == FYCombineResponse.SUCCESS){
// TODO: 绑定成功
} else {
// TODO: 绑定失败
}
}
};
FYCombineInitInfo initInfo = new FYCombineInitInfo();
initInfo.setGameVersion("1.0.0");
FYCombine.getInstance().doInit(initInfo, callback);// callback 回调方法
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
gameVersion | 游戏版本号 | 是 |
4.2 登录(必接)
1.说明
-
启动完游戏显示首页时调用。
-
玩家点击游戏界面的「进入游戏」时,需要判断是否有登录成功,如有则可以进入游戏;否则再次调用登录接口,让玩家重新登录,直到登录成功。
-
母包测试账号:需要到星云开放平台创建母包测试账号以便做母包的登录测试,创建路径:星云开放平台->对接中心->母包管理->母包测试账号
2.调用
FYCombine.getInstance().doLogin();
3.参数
无
4.回调
- 登录回调
loginCallback
4.3 切换账号(必接)
1.说明
-
在需要切换用户时调用,该接口会弹出登录窗口,让用户重新登录。
-
与「用户登录」接口不同的是,登录接口非首次登录会自动登录,而此接口必定会弹出登录窗口。
2.调用
FYCombine.getInstance().doSwitchAccount();
3.参数
无
4.回调
- 登录回调
loginCallback
4.4 支付(选接)
1.说明
-
调用此接口将拉起支付界面
-
建议游戏制定的商品标识格式为:com.feiyu.app_id.xxxx,以保证商品 id 的唯一性
-
打开"星云平台->对接中心->SDK对接->SDK列表->基础接入参数->游戏支付回调地址",配置游戏服务端的支付回调地址,支付完成后会通过此地址回调支付结果
-
客户端的支付回调不能作为支付成功的依据,不能在此处发放道具。
判断支付是否成功要根据服务端的支付回调
。具体的服务端回调请看服务端接入文档 -
客户端的支付回调只可以用来控制游戏界面显示,例如loading框的关闭、遮罩层的关闭
2.调用
FYCombinePayInfo payInfo = new FYCombinePayInfo();
payInfo.setPlayerId("role_id_001");
payInfo.setPlayerName("role_name_001");
payInfo.setPlayerLevel("1");
payInfo.setServerId("1");
payInfo.setServerName("server_name_001");
payInfo.setGoodsId("com.feiyu.20001.store1");
payInfo.setGoodsName("产品1");
payInfo.setPayAmount("100");
payInfo.setGameOrderId(FYStringUtils.getRandomUUID());
payInfo.setNotifyExt("extra");
payInfo.setVipLevel("1");
payInfo.setPaySignType("md5");
payInfo.setNotifyURL("https://www.xxxx.com/xxxx");
FYCombine.getInstance().doPay(payInfo);
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
playerId | 角色id。对应服务端支付回调的player_id 参数 |
是 |
playerName | 角色名 | 是 |
playerLevel | 角色等级,数字格式 |
是 |
serverId | 区服id,数字格式 。对应服务端支付回调的server_id 参数 |
是 |
goodsId | 商品标识,规范格式:com.feiyu.app_id.xxxx,例: com.feiyu.20001.store1 。对应服务端支付回调的goods_id 参数 |
是 |
goodsName | 商品名称 | 是 |
payAmount | 支付金额,单位:分 (海外游戏传美分),数字格式 。对应服务端支付回调的total_amount 参数 |
是 |
gameOrderId | 游戏订单号,由游戏生成并管理,服务端支付验证的时候会用到。对应服务端支付回调的out_trade_no 参数 |
是 |
notifyExt | 额外参数,游戏的透传参数可通过此参数传递,支付完成后平台服务端会回调此参数给游戏服务端。对应服务端支付回调的notify_ext 参数 |
否 |
vipLevel | vip等级,数字格式 ,如果游戏没有vip等级则传"0" |
是 |
paySignType | 签名类型,游戏服务器接收回调通知签名方式,需要游戏传递:md5/rsa | 是 |
notifyURL | 1.通过该值能在客户端动态传递服务端支付回调地址;2.若您在客户端传递了该地址,则支付完成后会通过此地址回调支付结果;3.若您同时也在星云后台配置了支付回调地址,会优先回调客户端传递的地址;4.需要先配置支付回调可信域名,请前往"星云后台->对接中心->回调配置->支付回调可信域名"进行配置,否则无法回调成功;5.若您在客户端传递了该地址,在游戏包体发布之前,建议您仔细检查该参数是否配置正确,以防止包体发布后支付出现问题 | 否 |
4.回调
- 支付回调
payCallback
4.5 用户中心(必接)
1.说明
-
需在游戏内的设置界面,放置一个「用户中心」按钮,点击按钮调用此接口
-
调用此接口将弹出用户中心界面
2.调用
FYCombineUserCenterInfo info = new FYCombineUserCenterInfo();
info.setPlayerId("xxx");
info.setPlayerName("xxx");
info.setPlayerLevel("xxx");
info.setServerId("xxx");
info.setServerName("xxx");
info.setVipLevel("xxx");
FYCombine.getInstance().doUserCenter(info);
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
playerId | 角色id | 是 |
playerName | 角色名 | 否 |
playerLevel | 角色,数字格式 |
否 |
serverId | 区服id,数字格式 |
是 |
serverName | 区服名称 | 是 |
vipLevel | vip等级,数字格式 ,如果游戏没有vip等级则传"0" |
否 |
4.6 登出(选接)
1.说明
- 登出 SDK,并回调登出回调给游戏。
2.调用
FYCombine.getInstance().doLogout();
3.参数
无
4.回调
- 登出回调
logoutCallback
4.7 退出游戏(选接)
1.说明
- 当用户按手机返回键,意图退出应用时调用。
2.调用
FYCombine.getInstance().doExitGame();
3.参数
无
4.回调
- 退出游戏回调
exitGameCallback
4.8 获取本地化商品信息(选接)
1.说明
-
如果后续有出"海外官方Android渠道",请对接此接口
-
应用场景1:获取本地化商品信息。当游戏在不同国家或地区发行时,想要展示不同的商品信息,请调用此接口,在回调中接收商品信息;能获取到的什么本地化商品信息,取决于您在谷歌后台的本地化商品配置,如果没有配置,则会回调失败或回调空,此时您应该使用原始的商品信息进行展示;在母包阶段,会回调测试用的商品信息用于调试,请在打出渠道包后再核实一下真实的商品信息是否展示正确;应尽量在发起支付提前久一点调用此接口,因为系统需要有一点时间(10秒内)异步去获取商品信息,并应避免重复调用此接口,正确做法:在进入游戏后调用一次此接口,并将获取到的商品信息缓存下来,在用户查看商店时,将缓存下来的商品信息用于展示
-
应用场景2:加速内购拉起。游戏拉起谷歌内购比较慢,是由于首次拉起该商品内购时,系统需要时间请求该商品信息,如果想要提高内购拉起速度,请在在进入游戏后调用一次此接口,系统会进行一次内购商品信息获取并缓存下来,后续再拉起商品内购就会很快;如果只是单纯想要提高内购拉起速度,而不需要进行本地化商品展示,则不需要在回调中处理任何逻辑
2.调用
List<String> products = new ArrayList<>() ;
list.add("com.feiyu.xxx.product1");
list.add("com.feiyu.xxx.product2");
FYCombine.getInstance().queryLocalProducts(products);
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
products | 商品 id 列表 | 是 |
4.回调
- 获取本地化商品信息回调
queryLocalProductsCallback
4.9 第三方收集信息(选接)
1.说明
- 用于收集第三方SDK收集游戏数据。
- 如果后续有出"B站"、"九游(UC)"、"OPPO"、"vivo"、"华为" 这几个渠道中任意一个,请对接此接口,否则上架渠道会被拒。
2.调用
Map info = new HashMap<String, String> ();
info.put("method","xxx"); //method (进入区服:enterServer,创建角色:createRole ,角色升级:levelUp)
info.put("playerId","xxx");//角色ID
info.put("playerName","xxx");//角色名称
info.put("playerLevel","xxx");//角色等级
info.put("serverId","xxx");//区服ID
info.put("serverName","xxx");//区服名称
info.put("playerTime","123456");//角色创建时间,必须取服务端时间,必须为时间戳
FYCombine.getInstance().doCollectInfo(info);
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
infoDict | 要收集的信息,key 和 value 根据第三方SDK 需求决定 | 是 |
4.10 生命周期(必接)
1.说明
- 在游戏界面 Activity 相应的生命周期方法中调用,必须全部都接入。
2.调用
- onCreate()
FYCombine.getInstance().onCreate();
- onActivityResult()
FYCombine.getInstance().onActivityResult(requestCode,resultCode,data);
- onStart()
FYCombine.getInstance().onStart();
- onStop()
FYCombine.getInstance().onStop();
- onNewIntent()
FYCombine.getInstance().onNewIntent(intent);
- onResume()
FYCombine.getInstance().onResumed();
- onRequestPermissionsResult()
FYCombine.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
- onDestroy()
FYCombine.getInstance().onDestroy();
- onPause()
FYCombine.getInstance().onPaused();
- onRestart()
FYCombine.getInstance().onRestart();
4.11 获取配置参数(选接)
1.说明
- 游戏有用到聚合 SDK 的一些配置参数,可以从此处获取。
2.调用
- APP ID
String appId = FYCombine.getInstance().getAppId();
- 获取渠道ID,如果游戏要对渠道做差异化处理时,可以使用此ID作为区分;渠道ID列表,请查看星云平台->对接中心->渠道打包->渠道配置;在母包阶段,Android获取到的渠道ID默认为10000,iOS获取到的渠道ID默认为10001
String channelId = FYCombine.getInstance().getChannelId();
- 设备 ID,此 ID 为 SDK 生成的标识设备的唯一 ID,不是 IDFA 或 AndroidID
String deviceId = FYCombine.getInstance().getDeviceId();
- 通行证标识,用来标明该渠道用什么通行证进行登录,所有渠道的通行证标识请看渠道版本信息
String passportCode = FYCombine.getInstance().getPassportCode();
- 支付标识,用来标明该渠道用什么支付方式,一般和通行证代号一致,有一些特殊的渠道登录和支付不一致,例如:苹果渠道,登录是飞鱼通行证(feiyu3),支付则是苹果支付(apple),所有渠道的支付标识请看渠道版本信息
String paymentCode = FYCombine.getInstance().getPaymentCode();
- 渠道模板标识,用来标明该渠道使用的是哪个渠道模板(一级渠道,在“对接中心-渠道打包-渠道配置”中添加渠道时所选的渠道模板),如果游戏要对不同渠道模板做差异化处理时,可以使用此标识作为区分,例如:针对不同渠道模板进行玩家信息隔离。所有渠道的渠道模板标识请看渠道版本信息
string channelTemplateCode = FYCombine.getInstance().getChannelTemplateCode();
4.12 广告监测上报(选接)
1.方法
public void doADTrackingReport(String event, Map params)
2.说明
- 作用:此接口用来触发第三方渠道的广告监测事件上报
- 使用说明,以华为渠道为例:
- 对接:游戏在对应的时机调用此接口,通过传入不同的事件常量以及事件参数,来触发相应的上报事件
- 调试:游戏对接完成后,导出Android游戏母包,可通过SDK调试模式,查看该接口是否对接成功,详情请看本文档第2.4小节
- 配置:打开星云平台-对接中心-渠道打包-渠道配置-华为渠道-配置,将
ad_tracking_switch
设置为1,并配置其他ad_tracking
开头的参数(参数由投放人员提供) - 打包:将Android游戏母包上传到星云后台,通过Android打包工具,输出华为渠道包,此包体即带有华为的广告上报功能
- 注意:
游戏按照文档中给出的调用时机接入各个事件,但是在接入之前要跟发行同学再次确认,以对齐数据统计标准
- 目前此接口只在导出的Android包体上有作用,导出iOS的包体无需关心此接口
3.调用
// 事件名称:启动
// 调用时机:需在刚启动游戏的时候调用,若有隐私授权弹窗,需在点击隐私授权弹窗确认之后调用
// 事件常量:START
// 事件参数:无
Map map = new HashMap();
FYCombine.getInstance().doADTrackingReport(FYCombineADTrackingConst.START,map);
// 事件名称:创建角色
// 调用时机:需在游戏创建角色的调用
// 事件常量:CREATE
// 事件参数:
// playerId:角色唯一标识,字符串
Map map = new HashMap();
map.put("playerId","xxxx");
FYCombine.getInstance().doADTrackingReport(FYCombineADTrackingConst.CREATE,map);
// 事件名称:进入游戏
// 调用时机:需在角色进入游戏的调用
// 事件常量:ENTER
// 事件参数:
// playerId:角色唯一标识,字符串
Map map = new HashMap();
map.put("playerId","xxxx");
FYCombine.getInstance().doADTrackingReport(FYCombineADTrackingConst.ENTER,map);
// 事件名称:支付
// 调用时机:需在支付完成之后调用
// 事件常量:PAY
// 事件参数:
// payAmount:支付金额,数字,单位-分,例如支付1元需传100
Map map = new HashMap();
map.put("payAmount",100);
FYCombine.getInstance().doADTrackingReport(FYCombineADTrackingConst.PAY,map);
4.参数
参数名 | 说明 | 是否必传 |
---|---|---|
eventName | 事件常量,字符串,用来区分不同的事件 | 是 |
paramsJson | 事件参数,json字符串,用来传递事件的参数,如果没有参数传""字符串 | 是 |
- 事件定义:
eventName | 说明 | 是否必接 |
---|---|---|
START | 启动,需在刚启动游戏的时候调用,若有隐私授权弹窗,需在点击隐私授权弹窗确认之后调用 | 是 |
CREATE | 创建角色,需在游戏创建角色的调用 | 是 |
ENTER | 进入游戏,需在角色进入游戏的调用 | 是 |
PAY | 支付,需在支付完成之后调用 | 是 |
- CREATE 事件参数说明:
参数 | 说明 | 是否必传 |
---|---|---|
playerId | 角色唯一标识,字符串 | 是 |
- ENTER 事件参数说明:
参数 | 说明 | 是否必传 |
---|---|---|
playerId | 角色唯一标识,字符串 | 是 |
- PAY 事件参数说明:
参数 | 说明 | 是否必传 |
---|---|---|
payAmount | 支付金额,数字,单位-分,例如支付1元需传100 | 是 |
4.13 广告追踪数据获取(选接)
1.方法
public String getADTrackingData()
2.说明
- 作用:此接口用来获取广告追踪数据
- 使用说明,以华为渠道为例:
- 对接:游戏在
聚合初始化回调之后
对应的时机调用此接口 - 配置:打开星云平台-对接中心-渠道打包-渠道配置-华为渠道-配置,将
ad_tracking_switch
设置为1,并配置其他ad_tracking
开头的参数(参数由投放人员提供) - 打包:将Android游戏母包上传到星云后台,通过Android打包工具,输出华为渠道包,此包体即带有华为的广告上报功能,可获取追踪数据
- 对接:游戏在
- 注意:
游戏需要在聚合初始化回调之后调用
- 目前此接口只在导出的Android包体上有作用,导出iOS的包体无需关心此接口
- 目前此接口数据有可能获取到空,获取到数据JSON字符串格式,使用try{}catch(){}方式,防止报错
3.调用
String hwTrackingDataStr = FYCombine.getInstance().getADTrackingData();
try {
JSONObject hwTrackingDataJson = new JSONObject(hwTrackingDataStr);
if(hwTrackingDataJson != null){
String taskId = hwTrackingDataJson.optString("taskid");
String subTaskId = hwTrackingDataJson.optString("subTaskId");
String callback = hwTrackingDataJson.optString("callback");
String channel = hwTrackingDataJson.optString("channel");
String rtaId = hwTrackingDataJson.optString("RTAID");
}
} catch (JSONException e) {
e.printStackTrace();
}
4.返回参数
参数名 | 说明 |
---|---|
taskid | 任务ID,可能为空 |
subTaskId | 子任务ID,如"200037037",可能为空 |
callback | 回传参数,用于oCPD对接,如"security:CD40F6*****C7A9F4",可能为空 |
channel | 由广告主运营在华为投放系统针对广告任务绑定的智能分包渠道号,可能为空 |
RTAID | 华为投放系统返回RTAID,可能为空 |
5 3 F&Q
5.1 切换账号的流程是怎样的?
常规的流程:点击用户中心的切换账号 -> 接收到退出回调(logoutCallback) -> 退出到登录首屏 -> 调出登录窗口 -> 登录另一个账号 -> 点击进入游戏 -> 游戏中
非常规的流程:点击用户中心的切换账号 -> 弹出登录窗口 -> 登录另一个账号 -> 接收到登录回调(loginCallback) -> 检测 open_id 变了 -> 退出到登录首屏 -> 检测已有账号登录 -> 点击进入游戏 -> 游戏中
非常规的流程会出现在某些渠道(比如 4399),没有退出回调,直接呼出登录窗口。那这时候就需要检查 open_id 是否改变,来让游戏重新回到登录首屏。
也就是说,以上这 2 个流程,游戏都要有。
5.2 渠道ID(channel_id)和通行证标识(passport_code)有啥区别?
-
一种通行证标识,可以对应多个渠道ID,渠道ID的颗粒度是最低的。游戏对渠道做区分,通常用渠道ID 即可,这个是最保险的方法。如果只想粗颗粒度的区分不同类型的渠道,则用通行证标识。
-
具体渠道ID的值,可以查看星云后台的 对接中心-渠道打包-渠道配置 。
-
具体通行证标识,可以查看渠道版本信息