Appearance
指色Android聚合SDK接入文档
该SDK已被废弃,请查看SeegSdk接入
版本记录
版本号 | 修改时间 | 修改内容 | 支持 |
---|---|---|---|
2.5.0.1 | 2022-07-21 | 优化授权 | 是 |
1.6.0.2 | 2021-06-22 | 添加TradPlus支持 | 否 |
1.5.0.12 | 2021-05-24 | 添加apk更新 | 否 |
1.4.5.0 | 2021-04-01 | SDK优化 | 否 |
1.3.1 | 2021-02-25 | 优化SDK初始化 | 否 |
1.3.0 | 2021-01-28 | 更新第三方SDK | 否 |
1.2.1 | 2020-12-17 | 添加巨量分包功能 | 否 |
1.2.0 | 2020-11-6 | 优化功能 | 否 |
1.1.3 | 2020-09-30 | 修复bug | 否 |
1.1.0 | 2020-06-09 | 优化接入步骤 | 否 |
1.0.9 | 2020-06-04 | 优化MTA接入方式 | 否 |
1.0.7 | 2020-06-01 | 对外正式版 | 否 |
SDK接入
集成准备
添加依赖
工程的build.gradle
allprojects {
repositories {
google()
jcenter()
flatDir {
dirs 'libs'
}
maven {
url "http://zsapp.zxmn2018.com/maven/repository/maven-public/"
}
}
}
项目的build.gradle
implementation 'com.zhise:zs-sdk:2.5.0.1'
implementation 'com.android.support:appcompat-v7:28.0.0' // 本SDK依赖android-support库
将.aar文件[请联系平台商获取]添加到工程的lib目录中
- 本SDK暂不支持androidx, 因此API需指定为28
指定指令集
本SDK支持常见的5种指令集:armeabi -v7a、arm64-v8a、x86、x86_64
如果项目支持的架构不一致,则需指定
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
添加参数
在项目的build.gradle的defaultConfig中添加CP提供的参数
manifestPlaceholders = [
ZS_APP_ID : "",
ZS_APP_SECRET : "",
ZS_APP_CHANNEL : ""
]
- ZS_APP_ID与ZS_APP_CHANNEL为必传参数
- ZS_APP_SECRET暂时没有使用到,但后期可能会有影响,请传入
- 如果构建错误,可以添加
multiDexEnabled true
添加JavaScript脚本和回调
脚本类游戏需添加JavaScript脚本
添加JavaScript脚本
- CocosCreator:scripts/zs-ccc.js
- laya:scripts/zs-laya.js
- h5:scripts/zs-web.js (暂未接入)
例如cocos需在main.js中添加
// ...
if (isRuntime) {
require('src/settings.js');
require('src/cocos2d-runtime.js');
if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {
require('src/physics.js');
}
require('jsb-adapter/engine/index.js');
} else {
require('src/settings.js');
require('src/cocos2d-jsb.js');
if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {
require('src/physics.js');
}
require('jsb-adapter/jsb-engine.js');
}
// 添加脚本文件
require('scripts/zs-ccc.js');
// ...
添加回调
// 添加JS监听
void onJSEvent(JSEvalCallback callback);
// 取消JS监听
void offJSEvent(JSEvalCallback callback);
以CocosCreator为例
ZSSdk.onJSEvent(new JSEvalCallback() {
@Override
public void onCallJS(final String jsCode) {
runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString(jsCode);
}
});
}
});
SDK初始化
初始化SDK
在Application或Activity的onCreate中调用初始化方法。
void initSdk(Application application, ZSConfig config);
完整Application代码
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ZSConfig config = new ZSConfig.Builder()
.debug(true)
.build();
ZSSdk.initSdk(this, config);
}
}
- 请尽早调用该方法
- 调试模式时,可以设置debug为true
- 请注意Application是否在manifest中注册
上报授权时机
请在授权后调用(如果游戏无需授权,则直接调用该方法,不授权可能影响统计效果)
ZSSdk.afterPermission();
- 请务必保证该方法被调用
第三方SDK调用
- 广点通
- 因为广点通初始化的限制,无法集成在SDK中,需要CP自行调用,在
Application
的onCreate
中调用
GDTAction.init(this, gdtActionSetId, gdtSetKey, channel);
- 务必注意,必须在Application的onCreate中调用
- chanel不能含特殊字符及中文等
添加开屏
ZUSplashAd splashAd;
// 创建开屏
DisplayMetrics dm = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getWindowManager().getDefaultDisplay().getRealMetrics(dm);
}
DisplayMetrics dm = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getWindowManager().getDefaultDisplay().getRealMetrics(dm);
}
splashAd = ZUSdk.createSplashAd(activity, new ZUAdSlot.Builder()
.setAdUnitId("")
.setWidth(dm.widthPixels)
.setHeight(dm.heightPixels)
.build());
// 加载开屏
splashAd.load(new ZUSplashAd.ZUSplashAdLoadListener() {
@Override
public void onSplashAdLoadSuccess() {
// 这里调用显示开屏
}
@Override
public void onSplashAdLoadError(int errCode, String errMsg) {
}
});
// 显示开屏
splashAd.show(adContainer, new ZUSplashAd.ZUSplashAdListener() {
@Override
public void onSplashAdShow(ZUAdInfo adInfo) {
}
@Override
public void onSplashAdShowError(int errCode, String errMsg) {
}
@Override
public void onSplashAdClose() {
}
});
JAVA-API
DMP
ZDSdk.registerEvent
- 方法
ZDSdk.registerEvent(String pf, String userId, boolean isSuccess);
- 参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
pf | string | 是 | 登陆平台 | 默认zhise |
userId | string | 是 | 用户id | |
isSuccess | boolean | 是 | 是否成功 | 必须成功一次 |
- 调用要求
必须调用,如果游戏不需要注册,可以第一次进入游戏时调用
ZDSdk.loginEvent
- 方法
ZDSdk.loginEvent(String pf, String userId, boolean isSuccess);
- 参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
pf | string | 是 | 登陆平台 | 默认zhise |
userId | string | 是 | 用户id | |
isSuccess | boolean | 是 | 是否成功 | 必须成功一次 |
- 调用要求
必须上报,如果游戏不需要登录,可以在用户进入游戏时调用
ZDSdk.payEvent
- 方法
ZDSdk.payEvent(String contentType, String contentName, String contentId, int contentNumber, String paymentChannel, String currency, boolean isSuccess, int currencyAmount)
- 参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
userId | string | 是 | 用户id | |
contentType | string | "" | 否 | |
contentName | string | "" | 否 | |
contentId | string | "" | 否 | |
contentNumber | number | 1 | 否 | |
paymentChannel | string | zs | 否 | |
currency | string | RMB | 否 | |
isSuccess | boolean | true | 否 | 支付状态。 |
currencyAmount | number | 1 | 否 | 支付金额,单位分。 |
- 调用要求
必须上报,如果没有支付事件,请用其它事件(比如激励完成)代替
SAS
ZTSdk.onPageStart
- 方法
ZTSdk.onPageStart(Context context, String pageName);
ZTSdk.onPageEnd
- 方法
ZTSdk.onPageEnd(Context context, String pageName);
ZTSdk.onEvent
- 方法
ZTSdk.onPageEnd(Context context, String eventId, String json);
AD
横幅广告
- 示例
ZUBannerAd bannerAd;
// 创建横幅
bannerAd = ZUSdk.createBannerAd(activity, ZUAdSlot.Builder()
.setAdUnitId(adUnitId)
.setIntervals(adIntervals)
.setWidth(width)
.setHeight(height)
.build());
// 加载横幅
bannerAd.load(new ZUBannerAd.ZUBannerAdLoadListener() {
@Override
public void onBannerAdLoadSuccess() {
// 这里可以调用显示横幅
}
@Override
public void onBannerAdLoadError(int errCode, String errMsg) {
}
});
// 显示横幅
bannerAd.show(adContainer, new ZUBannerAd.ZUBannerAdListener() {
@Override
public void onBannerAdShow(ZUAdInfo adInfo) {
}
@Override
public void onBannerAdShowError(int errCode, String errMsg) {
}
});
插屏广告
- 示例
ZUInterstitialAd interstitialAd;
// 创建插屏
interstitialAd = ZUSdk.createInterstitialAd(activity, ZUAdSlot.Builder()
.setAdUnitId(adUnitId)
.build());
// 加载插屏
interstitialAd.load(new ZUInterstitialAd.ZUInterstitialAdLoadListener() {
@Override
public void onInterstitialAdLoadSuccess() {
// 这里可以调用显示插屏
}
@Override
public void onInterstitialAdLoadError(int errCode, String errMsg) {
}
});
// 显示插屏
interstitialAd.show(activity, new ZUInterstitialAd.ZUInterstitialAdListener() {
@Override
public void onInterstitialAdShow(ZUAdInfo adInfo) {
}
@Override
public void onInterstitialAdShowError(int errCode, String errMsg) {
}
@Override
public void onInterstitialAdClose() {
}
});
激励广告
- 示例
ZURewardedVideoAd rewardedVideoAd;
// 创建激励
rewardedVideoAd = ZUSdk.createRewardedVideoAd(activity, ZUAdSlot.Builder()
.setAdUnitId(adUnitId)
.setUserId(userId)
.build());
// 加载激励
rewardedVideoAd.load(new ZURewardedVideoAd.ZURewardedVideoAdLoadListener() {
@Override
public void onRewardedVideoAdLoadSuccess() {
// 这里可以调用显示激励
}
@Override
public void onRewardedVideoAdLoadError(int errCode, String errMsg) {
}
});
// 显示激励
rewardedVideoAd.show(activity, new ZURewardedVideoAd.ZURewardedVideoAdListener() {
@Override
public void onRewardedVideoAdShow(ZUAdInfo adInfo) {
}
@Override
public void onRewardedVideoAdShowError(int errCode, String errMsg) {
}
@Override
public void onRewardedVideoAdClose(boolean verify) {
}
@Override
public void onRewardedVideoAdClick() {
}
});
信息流
- 示例(待完善)
微信登录
参考微信文档接入,不需要开发者额外导入微信包
JS-API
APP
zs.gameLoadResult
游戏加载完成
- 方法
zs.gameLoadResult();
参数
调用要求
推荐调用,用户进入游戏并可以操作游戏时
Ad
zs.createRewardedVideoAd
创建激励视频广告
- 方法
zs.createRewardedVideoAd(Object object);
- 参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
adUnitId | string | 是 | 广告单元 id | |
multiton | boolean | false | 否 | 是否启用多例模式,默认为false |
- 返回值
类型 | 说明 |
---|---|
RewardedVideoAd | 激励视频广告组件,如果发生错误,有概率返回空 |
- 调用要求
激励视频加载时间较长,推荐进行预加载
zs.createInterstitialAd
创建插屏广告
- 方法
zs.createInterstitialAd(Object object);
- 参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
adUnitId | string | 是 | 广告单元 id |
- 返回值
类型 | 说明 |
---|---|
InterstitialAd | 插屏广告组件,如果发生错误,有概率返回空 |
zs.createBannerAd
创建横幅广告
- 方法
zs.createBannerAd(Object object);
- 参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
adUnitId | string | 是 | 广告位id | |
adIntervals | number | 0 | 否 | 广告自动刷新的间隔时间,单位为秒,参数值必须大于等于30(该参数不传入时 Banner 广告不会自动刷新) |
style | Object | 是 | 广告的样式 |
object.style 的结构
属性 | 类型 | 必填 | 说明 |
---|---|---|---|
left | number | 是 | 广告的左上角横坐标 |
top | number | 是 | 广告的左上角纵坐标 |
width | number | 是 | 广告的宽度 |
height | number | 是 | 广告的高度 |
- 返回值
类型 | 说明 |
---|---|
BannerAd | 横幅广告,如果发生错误,有概率返回空 |
zs.createNativeAd
创建原生广告
- 方法
zs.createNativeAd(Object object);
- 参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
adUnitId | string | 是 | 广告位id | |
style | Object | 是 | 广告的样式 | |
object.style 的结构 |
属性 | 类型 | 必填 | 说明 |
---|---|---|---|
left | number | 是 | 广告的左上角横坐标 |
top | number | 是 | 广告的左上角纵坐标 |
width | number | 是 | 广告的宽度 |
height | number | 是 | 广告的高度 |
- 返回值
类型 | 说明 |
---|---|
NativeAd | 原生广告组件,如果发生错误,有概率返回空 |
上报相关
初始化
- 方法
javascript
zs.dmp.init(string appName, number loginType, number clientCode, callback:Function);
上报广告数据
- 方法
javascript
zs.dmp.reportAd(number ecpm);
进入游戏上报
- 方法
javascript
zs.dmp.enterGame(): string | null;
插屏事件上报
- 方法
javascript
zs.dmp.checkInterstitial(string name): string | null;
点击屏幕上报
- 方法
javascript
zs.dmp.checkOperation(boolean isTap): string | null;
- 调用时机
在玩家点击屏幕、移动屏幕时调用并传递为false,抬起手指时参数改为true
未操作检测
- 方法
javascript
zs.dmp.unCheckOperation():string |null;
- 调用时机
未播放广告时,每秒上报即可
微信
登录
- 方法
javascript
zs.authorize(Object object);
- 参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
scope | string | wx | 否 | 权限类型 |
success | function | 无 | 否 | 接口调用成功的回调函数 |
fail | function | 无 | 否 | 接口调用失败的回调函数 |
complete | function | 无 | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
- 说明
CP需自行创建包名.wxapi.WXEntryActivity并继承自ZSEntryActivity