AndroidStudio接入文档
1、简介
本文档主要介绍在AndroidStudio中如何集成和使用SDK,根据⽂档操作即可⾼效的完成SDK的接⼊,该文档仅供研发接入参考。
2、SDK快速接入
2.1 SDK配置要求
- minSdkVersion ≥ 24(Android 7.0 或更高版本)
- Jdk版本17
- AGP版本9.0.0
- Gradle版本9.1.0
- AndroidX 支持
2.2 SDK导入
- 在项目根目录的
gradle/wrapper/gradle-wrapper.properties配置文件中添加如下代码:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
- 在项目根目录的
build.gradle配置文件中添加如下代码:
buildscript {
repositories {
//Firebase需要,如果不使用Firebase,则忽略下面配置
google()
}
dependencies {
//推荐AGP9.0.0版本
classpath 'com.android.tools.build:gradle:9.0.0'
//Firebase需要,如果不需要,则忽略下面配置
classpath 'com.google.gms:google-services:4.4.4'
}
}
allprojects {
repositories {
//Firebase需要,如果不使用Firebase,则忽略下面配置
google()
//Appsflyer需要,如果不需要,则忽略下面配置
mavenCentral()
//MeetSdk 仓库地址
maven { url 'https://storage-sdk-gameplus.meetsocial.com/repository/TopSdk/' }
//kakao 登录需要,如果不需要接入kakao登录,则忽略下面配置
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
//TikTok 登录需要,如果不需要接入TikTok登录,则忽略下面配置
maven { url 'https://artifact.bytedance.com/repository/AwemeOpenSDK' }
//华为渠道配置
maven { url 'https://developer.huawei.com/repo/' }
//onestore渠道配置
maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public/' }
}
}

- 在模块级别的
build.gradle配置文件中添加如下代码:
//Firebase需要,如果不使用Firebase,则忽略下面配置
apply plugin: 'com.google.gms.google-services'
//模块依赖
dependencies {
//x.x.x.x为SDK当前接入版本,如 1.6.1.4
def meetsdk_version = "x.x.x.x"
def groupId = "com.sino.topsdk"
implementation "$groupId:ui:$meetsdk_version"
//游客登录(可选)
implementation "$groupId:guest:$meetsdk_version"
//Email登录(可选)
implementation "$groupId:email:$meetsdk_version"
//facebook登录(可选)
implementation "$groupId:facebook:$meetsdk_version"
//google登录(可选)
implementation "$groupId:google:$meetsdk_version"
//twitter登录(可选)
implementation "$groupId:twitter:$meetsdk_version"
//snapchat登录(可选)
implementation "$groupId:snapchat:$meetsdk_version"
//tiktok登录(可选)
implementation "$groupId:tiktok:$meetsdk_version"
//discord登录(可选)
implementation "$groupId:discord:$meetsdk_version"
//line登录(可选)
implementation "$groupId:line:$meetsdk_version"
//naver登录(可选)
implementation "$groupId:naver:$meetsdk_version"
//kakao登录(可选)
implementation "$groupId:kakao:$meetsdk_version"
//appsflyer (可选)
implementation "$groupId:appsflyer:$meetsdk_version"
//firebase (可选)
implementation "$groupId:firebase:$meetsdk_version"
//adjust (可选)
implementation "$groupId:adjust:$meetsdk_version"
//facebook data 数据统计 (可选)
implementation "$groupId:facebook-data:$meetsdk_version"
//google play 商店内购(可选)
implementation "$groupId:google-iap:$meetsdk_version"
//onestore 商店内购(可选)
implementation "$groupId:onestore-iap:$meetsdk_version"
//huawei 商店内购(可选)
implementation "$groupId:huawei-iap:$meetsdk_version"
//xiaomi 商店内购(可选)
implementation "$groupId:xiaomi-iap:$meetsdk_version"
}
//第三方平台配置(游戏按照接入的第三方加入配置并且填上对应的值,如果游戏没有的可以去掉对应第三方配置)
defaultConfig {
//channel(渠道标识,如果上架google play商店 请使用'GOOGLE',上架onestore请使用'ONESTORE')
resValue('string', 'top_channel_id', 'GOOGLE')
resValue('string', 'top_app_id', '您在MeetGames平台创建游戏时生成的App ID')
//facebook(可选)
resValue('string', 'facebook_app_id', '您申请的facebook登录平台的App ID')
resValue('string', 'fb_login_protocol_scheme', '您申请的facebook登录平台的fb_login_protocol_scheme')
resValue('string', 'facebook_client_token', '您申请的facebook登录平台的App secret')
//google(可选)
resValue('string', 'google_client_id', '您申请的google登录平台的server_client_id')
//twitter(可选)
resValue('string', 'twitter_client_id', '您申请的twitter登录平台的twitter_client_id')
resValue('string', 'twitter_client_secret', '您申请的twitter登录平台的twitter_client_secret')
resValue('string', 'twitter_redirect_url', 'twitter后台配置的重定向的URL')
//snapchat(可选)
resValue('string', 'snapchat_client_id', '您申请snapchat的client_id')
resValue('string', 'snapchat_redirect_uri', 'snapchat后台配置的重定向的URL')
//tiktok(可选)
resValue('string', 'tiktok_client_id', '您申请tiktok的client_id')
resValue('string', 'tiktok_client_secret', '您申请tiktok的client_secret')
resValue('string', 'tiktok_redirect_uri', 'tiktok后台配置的重定向的URL')
//discord(可选)
resValue('string', 'discord_client_id', '您申请discord的client_id')
resValue('string', 'discord_client_secret', '您申请discord的client_secret')
resValue('string', 'discord_redirect_uri', 'discord后台配置的重定向的URL')
//line(可选)
resValue('string', 'line_channel_id', '您申请line的channel_id')
//kakao(可选)
resValue('string', 'kakao_app_id', '您申请kakao的app_id')
resValue('string', 'kakao_scheme', '您申请kakao的scheme')
//naver(可选)
resValue('string', 'naver_client_id', '您申请naver的client_id')
resValue('string', 'naver_client_secret', '您申请naver的client_secret')
resValue('string', 'naver_client_name', '您申请naver的client_name')
//Appsflyer(可选)
resValue('bool', 'appsflyer_enable_debug_log', "true")//true开启本地log,flase关闭本地log,默认为flase
resValue('string', 'af_dev_key', '您申请AppsFlyer的af_dev_key')
//Adjust(可选)
resValue('bool', 'adjust_enable_sandbox', "true")//true开启沙盒环境,flase关闭沙盒环境,默认为flase
resValue('string', 'adjust_app_token', '您申请adjust的app_token')
//facebook data 数据统计 (可选)
resValue('string', 'facebook_data_app_id', "您申请的facebook登录平台的facebook_app_id")
resValue('string', 'facebook_data_client_token', '您申请的facebook平台的客户端token')
}
渠道标识top_channel_id取值
| top_channel_id | 渠道标识 |
|---|---|
| Google Play 商店 | |
| onestore 商店 | ONESTORE |
| Huawei 商店 | HUAWEI |
| Xiaomi 商店 | XIAOMI |

将Huawei Android 配置文件添加到您的应用(如果使用了huawei商店内购)
Huawei AppGalleryConnect > 我的项目 > 项目设置 > 应用下找到
agconnect-services.json配置文件并下载,将其添加到应用级模块,目录:Module模块 > src > main > assets下将 Firebase Android 配置文件添加到您的应用(如果添加了Firebase依赖)
Firebase 控制台将下载的
google-services.json配置文件移动到应用级模块目录中
将 Adjust Android 配置文件添加到您的应用(如果添加了Adjust依赖)
将下载的
topsdk_adjust_event.json配置文件,复制到游戏工程assets目录下topsdk_adjust_event.json文件获取方式请联系sdk提供方
在项目的
gradle.properties配置文件中添加如下代码(启用AndroidX):
android.useAndroidX=true//必需
android.enableJetifier=true//gradle9.0以上无需改配置

3、SDK回调函数使用说明
3.1 登录回调函数
//登录回调注册(在调用登录接口前先进行注册)
gameSDKManager.registerLoginCallback(callback);
//callback 登录回调
TOPCallback<TOPUserInfo> callback = new TOPCallback<TOPUserInfo>() {
@Override
public void onSuccess(TOPUserInfo userInfo) {
//String uid = userInfo.getId();//用户id
//String userName = userInfo.getName();//用户名
//String token = userInfo.getToken();//用户token
}
@Override
public void onFailed(ErrorResults errorResults) {
//登录失败 ErrorResults 错误信息,"code":错误码,"error":错误信息
}
};
//登录回调反注册(在页面销毁时进行反注册)
gameSDKManager.unregisterLoginCallback();
3.2 登出回调函数
//登出回调注册(需要监听登出回调的地方)
gameSDKManager.registerLogoutCallback(callback);
//callback 登出回调
TOPCallback<Boolean> callback = new TOPCallback<Boolean>() {
@Override
public void onSuccess(Boolean success) {
//登出成功
//游戏方进行后续操作(需要退出到登录页)
//游戏方进行后续操作(需要退出到登录页)
//游戏方进行后续操作(需要退出到登录页)
}
@Override
public void onFailed(ErrorResults errorResults) {
//登出失败 ErrorResults 错误信息
//游戏方进行后续操作
}
};
//登出回调反注册(在页面销毁时进行反注册)
gameSDKManager.unregisterLogoutCallback();
3.3 绑定账号回调函数
//绑定回调注册(需要监听绑定回调的地方)
gameSDKManager.registerBindStatusCallback(bindStatusCallback);
//callback 绑定回调
BindStatusCallback bindStatusCallback = new BindStatusCallback() {
@Override
public void onSuccess(PlatformType platformType, TOPBindData bindData) {
//PlatformType:平台类型
//bindStatus 0:未绑定/解绑 1:已绑定/绑定
int bindStatus = bindData.getBindStatus();
//平台信息
String platform = bindData.getPlatform();
}
@Override
public void onFailed(PlatformType platformType, ErrorResults errorResults) {
//PlatformType:平台类型
//失败 ErrorResults 错误信息
}
//绑定回调反注册(在页面销毁时进行反注册)
gameSDKManager.unregisterBindStatusCallback();
3.4 用户中心返回关闭回调函数
//用户中心返回关闭回调注册(需要监听用户中心返回关闭回调的地方)
gameSDKManager.registerUserCenterCloseCallback(callback);
//callback 用户中心返回关闭回调
TOPCallback<Boolean> callback = new TOPCallback<Boolean>() {
@Override
public void onSuccess(Boolean success) {
//用户中心返回关闭
}
@Override
public void onFailed(ErrorResults errorResults) {
//这里不用处理,用户中心返回关闭回调不会失败
}
};
//用户中心返回关闭回调反注册(在页面销毁时进行反注册)
gameSDKManager.unregisterUserCenterCloseCallback();
4、SDK接口使用说明
4.1 SDK全局单例获取接口
TOPSdkManager gameSDKManager = TOPSdkManager.getInstance();
本SDK基于单例模式设计,必须使⽤该接⼝来获取SDK的唯⼀实例,才能正常使⽤SDK。后续接⼝都必须通过单例来调⽤。
4.2 初始化接口
TOPSdkManager.getInstance().init(Context context, appId, TOPCallback<Boolean> callback);
该接⼝⽤于进⾏SDK初始化操作,必须在调⽤SDK其他接⼝前尽早调⽤并确保在使用其他功能前已经初始化成功(最好在Application的onCreate方法中进行初始化操作)。
参数:
| key | 含义 | 类型 |
|---|---|---|
| context | 应用上下文。建议用getApplicationContext() | Context |
| appId | 每款应用在平台的唯一标识,由平台分配 | String |
| callback | callback为TOPCallback的实例。TOPCallback的回调方法有onSuccess、onFailed。回调onSuccess方法表明初始化成功,回调onFailed方法表明初始化失败 | TOPCallback |
返回结果:
(1)成功时执行onSuccess()方法,返回Boolean类型变量。
(2)失败时执行onFailed()方法,返回ErrorResults类型变量。
4.3 资源释放接口
gameSDKManager.onDestroy(Activity activity)
该接⼝⽤于在游戏关闭时进行资源释放(游戏主Activity的onDestroy方法中调用)
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
返回结果:无
4.4 登录接口
gameSDKManager.login(Activity activity);
该接⼝⽤于进⾏SDK登录操作。调用此接口务必要实现3.1的回调,用来接收登录回调监听。
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
返回结果:无
4.5 支付接口(该支付结果仅作为参考,真实结果请以服务器结果为准)
支付流程图:

gameSDKManager.pay(Activity activity, TOPPayParameters parameters, TOPRoleInfo roleInfo, TOPCallback<TOPPaymentData> callback);
该接⼝⽤于SDK支付功能。
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
| parameters | 商品信息 | TOPPayParameters |
| roleInfo | 角色信息 | TOPRoleInfo |
| callback | callback为TOPCallback的实例。TOPCallback的回调方法有onSuccess、onFailed。回调onSuccess方法标明客户端支付成功,回调onFailed方法表明客户端支付失败 | TOPCallback |
TOPPayParameters实体类参数说明:
| key | 含义 | 类型 |
|---|---|---|
| productId | 商品Id | String |
| productName | 商品名称 | String |
| amount | 商品价格(保留两位小数) | double |
| developerPayload | 透传参数(最多250字符) | String |
TOPRoleInfo实体类参数说明:
| key | 含义 | 类型 |
|---|---|---|
| roleId | 角色ID | String |
| roleName | 角色名称 | String |
| roleLevel | 角色等级 | String |
| serverId | 区服id | String |
| serverName | 区服名称 | String |
| vipLevel | vip等级 | String |
返回结果:
(1)成功时执行onSuccess()方法,返回TOPPaymentData类型变量,其中包含值为:
| key | 含义 | 类型 |
|---|---|---|
| productId | 商品ID | String |
| orderNo | 平台交易OrderNo | String |
| payPlatformOrderNo | 三方支付平台交易OrderNo | String |
(2)失败时执行onFailed()方法,返回ErrorResults类型变量。
4.6 登出接口
gameSDKManager.logout(Activity activity);
该接⼝⽤于进⾏SDK登出操作。调用此接口务必要实现3.2的回调,用来接收登出回调监听。
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
返回结果:无
4.7 打开用户中心界面接口
gameSDKManager.enterUserCenter(Activity activity);
该接⼝⽤于唤起⽤户中⼼⻚⾯,⻚⾯会以全屏⽅式覆盖在当前界⾯上,可以实现绑定账号功能。调用此接口务必要实现3.2的回调,用来接收登出回调监听。
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
返回结果:无
4.8 获取用户信息接口
gameSDKManager.getUserInfo(TOPCallback<TOPUserInfo> callback);
该接⼝⽤于获取用户信息接口。
参数:
| key | 含义 | 类型 |
|---|---|---|
| callback | callback为TOPCallback的实例。TOPCallback的回调方法有onSuccess、onFailed。回调onSuccess方法表明获取成功,回调onFailed方法表明获取失败 | TOPCallback |
返回结果:
(1)成功时执行onSuccess()方法,返回TOPUserInfo类型变量,其中包含值为:
| key | 含义 | 类型 |
|---|---|---|
| id | 用户id | String |
| name | 用户名 | String |
(2)失败时执行onFailed()方法,返回ErrorResults类型变量。
4.9 获取账号绑定信息接口
gameSDKManager.getUserBindInfo(TOPCallback<List<String>> callback);
该接⼝⽤于获取账号绑定信息接口。
参数:
| key | 含义 | 类型 |
|---|---|---|
| callback | callback为TOPCallback的实例。TOPCallback的回调方法有onSuccess、onFailed。回调onSuccess方法表明获取成功,回调onFailed方法表明获取失败 | TOPCallback |
返回结果:
(1)成功时执行onSuccess()方法,返回List类型变量。
(2)失败时执行onFailed()方法,返回ErrorResults类型变量。
4.10 绑定账号接口
gameSDKManager.bindPlatform(Activity activity, TOPPlatformType platformType);
该接⼝⽤于在登录成功后,用于绑定其他的三方账号。调用此接口务必要实现3.3的回调,用来接收绑定回调监听。
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
| platformType | 需要绑定的三方平台,如TOPPlatformType.GOOGLE、TOPPlatformType.FACEBOOK等 | TOPPlatformType |
返回结果:无
4.11 账号删除接口
gameSDKManager.accountDelete(Activity activity);
该接⼝⽤于进⾏SDK账号删除操作。账号删除成功会进行SDK登出,会发送登出成功的回调,建议收到登出成功时游戏进行登出操作。调用此接口务必要实现3.2的回调,用来接收登出回调监听。
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
返回结果:无
4.12 获取sdk版本号接口
gameSDKManager.getSDKVersion();
该接⼝⽤于获取sdk版本号。
参数:无
返回结果:
| key | 含义 | 类型 |
|---|---|---|
| 返回值 | sdk版本号 | String |
4.13 开启或关闭debug模式接口
gameSDKManager.setDebugEnabled(boolean isEnabled);
该接⼝⽤于开启debug模式,默认是false,可在Logcat查看相关日志,正式包务必注释掉。
参数:
| key | 含义 | 类型 |
|---|---|---|
| isEnabled | 日志打印(true表示启用,false标识关闭) | boolean |
返回结果:无
5、SDK事件上报使用说明
5.1 TOPData全局单例获取
TOPData topData = TOPData.getInstance();
TOPData基于单例模式设计,必须使⽤该接⼝来获取唯⼀实例,才能正常使⽤。后续接⼝都必须通过单例来调⽤。
5.2 设置唯一用户ID
给事件上报设置唯一用户ID
1、如果已接入MeetSDK登录SDK,忽略该设置;
2、如果没有接入MeetSDK登录SDK,上报事件需要设置唯一用户ID,否则上报信息无效,调用时机务必在所有事件上报之前
方法
void setAccountId(String accountId);
参数介绍
| 参数名 | 介绍 | 类型 |
|---|---|---|
| accountId | 游戏唯一用户ID | String |
5.3 登录事件
事件说明
在用户登录时触发,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
SDK已自动上报此事件,用户无需单独上报
方法
void loginEvent(String method);
参数介绍
| 参数名 | 介绍 | 类型 |
|---|---|---|
| method | 登录使用的方法,比如:GOOGLE、FACEBOOK、GUEST | String |
5.4 注册事件
事件说明
在新用户首次注册时触发,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
SDK已自动上报此事件,用户无需单独上报
方法
void signupEvent(String method);
参数介绍
| 参数名 | 介绍 | 类型 |
|---|---|---|
| method | 登录使用的方法,比如:GOOGLE、FACEBOOK、GUEST | String |
5.5 支付事件
事件说明
用户支付成功时触发,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
SDK已自动上报此事件,用户无需单独上报
方法
void purchaseEvent(TOPPurchaseData data);
参数介绍
TOPPurchaseData:
| key | des | example | 类型 |
|---|---|---|---|
| revenue | 价格 | 1.1 | double |
| currency | 币种 | USD | String |
| quantity | 数量,默认1 | 1 | int |
| productId | 商品id | com.demo.item01 | String |
| orderId | 订单号 | 12131231231 | String |
| receiptId | 票据id | awdfaqwdfqcs | String |
5.6 开始新手引导事件
事件说明
可选事件,请自行调用,建议在新手引导开始时上报,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void tutorialBeginEvent();
5.7 完成新手引导事件
事件说明
可选事件,请自行调用,建议在新手引导结束时上报,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void tutorialCompleteEvent(String tutorialName, boolean success);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| tutorialName | String | 新手引导名称 |
| success | boolean | 是否完成 |
5.8 升级事件
事件说明
可选事件,请自行调用,建议在游戏角色升级时上报,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void levelUpEvent(int level, String roleName);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| level | int | 等级 |
| roleName | String | 角色名 |
5.9 成就解锁事件
事件说明
可选事件,请自行调用,建议在游戏角色解锁成就时上报,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void unlockAchievementEvent(String achievementId);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| achievementId | String | 成就id |
5.10 分享事件
事件说明
可选事件,请自行调用,建议在触发分享时上报,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void shareEvent(String method, String contentType, String contentId);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| method | String | 分享渠道,如:Facebook、Twitter、Email... |
| contentType | String | 分享内容类型,如:图片、链接、视频、文本 |
| contentId | String | 分享内容id,如:活动id |
5.11 获得虚拟货币事件
事件说明
可选事件,请自行调用,建议在玩家获得虚拟货币时调用,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void earnVirtualCurrencyEvent(String name, int count);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| name | String | 虚拟货币名称,如:宝石、钻石 |
| count | int | 虚拟货币数量,如:100 |
5.12 支出虚拟货币
事件说明
可选事件,请自行调用,建议在玩家支出虚拟货币时调用,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void spendVirtualCurrencyEvent(String name, int count, String goodsName);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| name | String | 虚拟货币名称,如:宝石、钻石 |
| count | int | 虚拟货币数量,如:100 |
| goodsName | String | 购买的商品名称,如:包月会员 |
5.13 游戏关卡开始事件
事件说明
可选事件,请自行调用,建议在玩家开始关卡时调用,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void levelStartEvent(String levelName);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| levelName | String | 关卡名称,如:1-1 |
5.14 游戏关卡结束事件
事件说明
可选事件,请自行调用,建议在玩家结束关卡时调用,此事件会上报至所有集成的数据平台(Appsflyer、GA、Adjust)
方法
void levelEndEvent(String levelName, boolean success);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| levelName | String | 关卡名称,如:1-1 |
| success | boolean | 是否成功 |
5.15 自定义事件上报
事件说明
如果以上模板事件不能满足需求,可选择自定义事件上报
方法
void report(String eventName, Map<String, String> params, TOPDataChannelType channelType);
参数介绍
| 参数名 | 类型 | 介绍 |
|---|---|---|
| eventName | String | 事件名 |
| params | Map(String:String) | 参数 |
| channelType | TOPDataChannelType | 上报渠道类型,默认All |
TOPDataChannelType介绍
| 类型 | 说明 |
|---|---|
| TOPDataChannelType.All | 上报到所有接入的数据平台,如:Appsflyer、Firebase、Adjust、Facebook |
| TOPDataChannelType.AppsFlyer | 仅上报到Appsflyer |
| TOPDataChannelType.Firebase | 仅上报到Firebase |
| TOPDataChannelType.Adjust | 仅上报到Adjust |
| TOPDataChannelType.Facebook | 仅上报到Facebook |
5.16 事件对照表
我们将对应数据平台的模板事件关联,将事件转换为平台对应的模板事件名进行上报,具体事件名如下:
| 事件 | TOPData | AF | GA&Adjust | Facebook Data |
|---|---|---|---|---|
| 登录 | #top_login | af_login | login | login |
| 注册 | #top_sign_up | af_complete_registration | sign_up | fb_mobile_complete_registration |
| 新手引导开始 | #top_tutorial_begin | tutorial_begin | tutorial_begin | tutorial_begin |
| 新手引导结束 | #top_tutorial_complete | af_tutorial_completion | tutorial_complete | fb_mobile_tutorial_completion |
| 角色升级 | #top_level_up | af_level_achieved | level_up | fb_mobile_level_achieved |
| 成就解锁 | #top_unlock_achievement | af_achievement_unlocked | unlock_achievement | fb_mobile_achievement_unlocked |
| 下单 | #start_pay | - | - | fb_mobile_initiated_checkout |
| 支付 | #top_purchase | af_purchase | purchase | fb_mobile_purchase |
| 分享 | #top_share | af_share | share | share |
| 获取虚拟币 | #top_earn_virtual_currency | earn_virtual_currency | earn_virtual_currency | earn_virtual_currency |
| 支出虚拟币 | #top_spend_virtual_currency | spend_virtual_currency | spend_virtual_currency | fb_mobile_spent_credits |
| 关卡开始 | #top_level_start | level_start | level_start | level_start |
| 关卡结束 | #top_level_end | level_end | level_end | level_end |
6、修改登录面板的 LOGO 图片
如下图所示,找到工程的 application 工程,创建 mipmap-xxhdpi 目录(如果存在请忽略),然后把自己的 LOGO 命名为 custom_logo.png ,放到 mipmap-xxhdpi 目录下,Meetgames 默认 LOGO 宽高为305 × 70,为了保持登录面板 LOGO 排版一致,务必把自己的 LOGO 的宽高保持一致
7、设置用户合规/隐私偏好同意状态
gameSDKManager.showComplianceAgreement(Activity activity);
该接⼝⽤于在游戏内设置用户合规/隐私偏好同意状态。
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
返回结果:无
8、获取用户合规开关状态接口
TopUserAgeCompliance userAgeCompliance = gameSDKManager.getUserAgeCompliance();
接口为满足美区合规要求,针对未成年用户,获取用户是否可以支付、聊天、加好友、抽卡等功能
参数: 无
返回结果:
返回userAgeCompliance类型对象,其中包含值为:
| key | 含义 | 类型 |
|---|---|---|
| canPlay | 是否可以玩游戏 | boolean |
| canChat | 是否可以聊天 | boolean |
| canAddFriend | 是否可以添加好友 | boolean |
| canPurchase | 是否可以支付 | boolean |
| canLootbox | 是否可以抽卡/开盲盒 | boolean |
| canVoiceChat | 是否可以私聊 | boolean |
| canSeeAds | 是否可以观看广告 | boolean |
| canShareUserData | 是否可以分享用户数据 | boolean |
说明:SDK内部已经进行是否可以玩游戏、支付的判断,这两个开关游戏可忽略,其余几个与游戏功能相关的开关,游戏方需要根据接口返回来判断是否可以开启,如果开关返回false,应调用SDK的请求家长授权接口
9、请求家长授权接口
gameSDKManager.sendParentAuthorization(Activity activity);
接口为满足美区合规要求,针对未成年用户,请求家长授权的功能
参数:
| key | 含义 | 类型 |
|---|---|---|
| activity | Activity实例 | Activity |
返回结果:无
10、广告变现功能
10.1 功能说明
MeetSDK 广告变现模块支持激励视频广告和插屏广告,可选择接入 Google AdMob 或 AppLovin MAX。广告功能由 MeetSDK 主初始化流程统一初始化,必须等待 MeetSDK 初始化成功后再调用广告接口。
每个应用只能选择一个广告聚合平台,不要同时引入 AdMob 和 MAX 广告模块。测试阶段请使用广告平台提供的测试广告位。
广告调用流程如下:
loadAd(adUnitId, adType, callback)
→ isAdReady(adUnitId)
→ showAd(activity, adUnitId, callback)
adType 只在加载广告时传入。SDK 会根据 adUnitId 保存加载时的广告类型,因此检查和展示广告时不需要再次传入 adType。
10.2 添加广告模块
在模块级 build.gradle 中根据使用的聚合平台添加一个广告模块:
dependencies {
def meetsdk_version = "x.x.x.x"
def groupId = "com.sino.topsdk"
// 二选一,不可同时接入
implementation "$groupId:iaa-admob:$meetsdk_version"
// implementation "$groupId:iaa-max:$meetsdk_version"
}
广告参数必须在应用模块的 build.gradle 中通过 resValue 注入,不要直接创建或修改 res/values/strings.xml。
AdMob 项目在 defaultConfig 中配置 AdMob App ID:
android {
defaultConfig {
resValue('string', 'top_iaa_admob_app_id', 'ca-app-pub-xxxxxxxx~yyyyyyyy')
}
}
MAX 项目需要配置 MAX SDK Key;同时由于 MAX 的隐私同意流程使用 Google UMP,也必须配置 AdMob App ID:
android {
defaultConfig {
resValue('string', 'top_iaa_max_sdk_key', 'YOUR_MAX_SDK_KEY')
resValue('string', 'top_iaa_admob_app_id', 'ca-app-pub-xxxxxxxx~yyyyyyyy')
}
}
广告模块会自动合并网络权限以及 AdMob App ID 对应的 Manifest 配置,业务工程不要将其重复配置为其他值。
10.3 广告类型
| 类型 | 说明 |
|---|---|
TOPIaaAdType.REWARDED | 激励视频广告。只应在收到 onRewarded 回调后发放游戏奖励。 |
TOPIaaAdType.INTERSTITIAL | 插屏广告。 |
10.4 加载广告接口
接口:
void loadAd(@NonNull String adUnitId,
@NonNull TOPIaaAdType adType,
@NonNull TOPIaaLoadCallback callback);
说明:异步加载指定广告位。相同 adUnitId 在一次加载、检查和展示流程中必须对应同一种广告类型。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
adUnitId | String | 是 | 在 AdMob 或 MAX 后台创建的广告位 ID,不能为空。 |
adType | TOPIaaAdType | 是 | 广告类型:激励视频或插屏。 |
callback | TOPIaaLoadCallback | 是 | 广告加载结果回调。 |
加载回调:
public interface TOPIaaLoadCallback {
void onLoaded(String adUnitId);
void onFailed(TOPError error);
}
| 回调 | 说明 |
|---|---|
onLoaded(adUnitId) | 广告加载成功。返回已加载广告的广告位 ID。 |
onFailed(error) | 广告加载失败,可通过 error.getCode() 和 error.getMessage() 获取错误信息。 |
10.5 检查广告是否就绪
接口:
boolean isAdReady(@NonNull String adUnitId);
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
adUnitId | String | 是 | 调用 loadAd 时使用的广告位 ID。 |
返回值:true 表示广告已加载且可以展示;false 表示广告尚未就绪、已经展示或已经失效。
10.6 展示广告接口
接口:
void showAd(@NonNull Activity activity,
@NonNull String adUnitId,
@NonNull TOPIaaShowCallback callback);
调用前必须通过 isAdReady(adUnitId) 确认广告已经就绪。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
activity | Activity | 是 | 当前位于前台且未销毁的 Activity。 |
adUnitId | String | 是 | 已经成功加载的广告位 ID。 |
callback | TOPIaaShowCallback | 是 | 广告展示生命周期回调。 |
展示回调:
public interface TOPIaaShowCallback {
void onDisplayed(String adUnitId);
void onImpression(String adUnitId);
void onClicked(String adUnitId);
void onRewarded(String adUnitId);
void onPaid(TOPIaaRevenue revenue);
void onClosed(String adUnitId);
void onFailed(TOPError error);
}
| 回调 | 说明 |
|---|---|
onDisplayed | 广告已展示。 |
onImpression | 广告产生有效曝光。 |
onClicked | 用户点击广告。 |
onRewarded | 用户满足激励条件。激励视频奖励只能在此回调中发放。 |
onPaid | 收到广告收入数据,收入信息由 TOPIaaRevenue 提供。 |
onClosed | 用户关闭广告。本次广告已失效,再次展示前需要重新加载。 |
onFailed | 广告展示失败。本次广告已失效,可读取 TOPError 获取错误信息。 |
TOPIaaRevenue 参数:
| 方法 | 返回类型 | 说明 |
|---|---|---|
getAdUnitId() | String | 产生收入的广告位 ID。 |
getProviderType() | TOPIaaProviderType | 广告聚合平台类型。 |
getValueMicros() | long | 以百万分之一货币单位表示的收入值。 |
getCurrencyCode() | String | ISO 4217 货币代码,例如 USD。 |
getRevenuePrecision() | String | 广告平台返回的收入精度;平台未提供时可能为 null。 |
10.7 完整调用示例
import com.sino.topsdk.core.bean.TOPError;
import com.sino.topsdk.core.iaa.TOPIaaAdType;
import com.sino.topsdk.core.iaa.TOPIaaLoadCallback;
import com.sino.topsdk.core.iaa.TOPIaaRevenue;
import com.sino.topsdk.core.iaa.TOPIaaShowCallback;
String adUnitId = "your-rewarded-ad-unit-id";
gameSDKManager.loadAd(adUnitId, TOPIaaAdType.REWARDED, new TOPIaaLoadCallback() {
@Override
public void onLoaded(String loadedAdUnitId) {
if (!gameSDKManager.isAdReady(loadedAdUnitId)) {
return;
}
gameSDKManager.showAd(GameActivity.this, loadedAdUnitId, new TOPIaaShowCallback() {
@Override public void onDisplayed(String id) { }
@Override public void onImpression(String id) { }
@Override public void onClicked(String id) { }
@Override
public void onRewarded(String id) {
// 在这里发放激励视频奖励。
}
@Override public void onPaid(TOPIaaRevenue revenue) { }
@Override
public void onClosed(String id) {
// 本次广告已失效,如需再次展示请重新调用 loadAd。
}
@Override
public void onFailed(TOPError error) {
// error.getCode() / error.getMessage()
}
});
}
@Override
public void onFailed(TOPError error) {
// error.getCode() / error.getMessage()
}
});
10.8 注意事项
- 必须在 MeetSDK 初始化成功后调用广告接口。
loadAd、isAdReady和showAd必须使用同一个adUnitId。- 不要在广告未就绪时直接调用
showAd。 - 广告关闭或展示失败后,需要重新调用
loadAd才能再次展示。 - 激励视频奖励只能在
onRewarded回调中发放;如需服务端校验,由游戏业务自行实现。 - Android 广告错误码如下:
| 错误码 | 说明 |
|---|---|
7100 | 未找到广告插件。 |
7101 | 同时接入了多个广告插件。 |
7102 | 广告 SDK 初始化失败。 |
7103 | 广告 SDK 初始化超时。 |
7104 | 广告尚未就绪。 |
7105 | 用于展示广告的 Activity 无效。 |
7106 | 同一个广告位 ID 使用了不同广告类型。 |
7107 | 广告加载失败。 |
7108 | 广告展示失败。 |