二、快速集成
2.0.集成需知
2.1 环境配置要求
-
Android API 19及以上版本
-
jdk1.7及以上版本。
-
compileSdkVersion 26及以上版本
2.2 集成SDK到项目
第三方SDK依赖关系如下表
第三方SDK | 版本 |
---|---|
AIHELP | 1.7.4.2 |
华为海外 | com.huawei.hms:hwid:5.0.1.301 com.huawei.hms:iap:5.0.2.300 com.huawei.hms:hianalytics:5.0.4.301 |
glide | com.github.bumptech.glide:glide:4.11.0 com.github.bumptech.glide:compiler:4.11.0 |
APPSFLYER | 5.4.3 |
2.2.1 Gradle自动集成
在项目目录下的build.gradle文件添加以下配置:
1 2 3 4 5 6 7 8 9 10 11 |
apply plugin: 'maven' allprojects { repositories { jcenter() maven { url "http://repo.wingsdk.cn:8081/repository/winga-group/" } } } |
注意:
1)部分项目中可能只有一个build.gradle文件;
在程序module下面的build.gradle文件的dependencies内增加依赖配置;
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 基础模块(必选) compile 'com.wa.sdk:wa-sdk-base:X.X.X' // 核心模块(必选) compile 'com.wa.sdk:wa-sdk-core:X.X.X' // 网页支付模块(可选,如果需要第三方支付则需要添加此模块) compile 'com.wa.sdk:wa-sdk-webpay:X.X.X' // WA AIHelp模块(可选) compile 'com.wa.sdk:wa-sdk-aihelp:x.x.x' //华为hms(可选) compile 'com.wa.sdk:wa-sdk-huaweihms:x.x.x' //appsflyer(可选) compile 'com.wa.sdk:wa-sdk-appsflyer:x.x.x' |
注意:
1)部分项目中可能只有一个build.gradle文件;
2)以上的“必选”项目必须引入,“可选”项目可根据需求引入。
3) 其中x.x.x为各个模块的具体版本号,随SDK版本升级会发生改变,各个版本对应的渠道包版本请参考:https://admin.wingsdk.com/developers/pack_config.do 在这个地址页面,也可以通过选择版本和所需要的渠道,一键生成依赖脚本配置。
2.3 SDK配置及初始化
2.3.1 SDK配置
2.3.1.1 AndroidManifest.xml配置:
在AndroidManifest.xml中application标签下添加以下设置。不同的应用配置的参数值不相同,需要申请相应资源。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<!-- sdk的appid --> <meta-data android:name="com.wa.sdk.APP_ID" android:value="f7f9a9d18da611e5a0be000d3a906774" /> <!-- sdk的appkey --> <meta-data android:name="com.wa.sdk.APP_KEY" android:value="CFHF7nQCCaojCX6Sm4eT1GEIWRprimgX" /> <!-- sdk平台请求的host地址,所有请求的前面公共部分 --> <meta-data android:name="com.wa.sdk.HTTP_BASE_URL" android:value="https://api.wingsdk.com/sdkapi" /> <!-- 数据收集请求地址 --> <meta-data android:name="com.wa.sdk.track.BASE_URL" android:value="https://api.wingsdk.com/data"/> <!-- AppsFlyer SDK START 如果需要集成AppsFlyer,需要以下配置--> <!-- AppsFlyer AppKey(需要自己申请) --> <meta-data android:name="com.wa.sdk.track.APPSFLYER_APP_KEY" android:value="922wXRJwEns6Qj4MfMt4Gg" /> <!-- AppsFlyer Channel --> <meta-data android:name="CHANNEL" android:value="Huawei" /> <!-- 开启/关闭 AppsFlyer数据收集功能,默认开启,使用默认配置可不配置此项 --> <meta-data android:name="com.wa.sdk.track.ENABLE_APPSFLYER" android:value="true" /> <!-- AppsFlyer SDK END --> <!--aihelp SDK START 如果需要集成aihelp,需要以下配置--> <meta-data android:name="com.wa.sdk.AIHelp_appKey" android:value="xxx" /> <meta-data android:name="com.wa.sdk.AIHelp_domain" android:value="xxx" /> <meta-data android:name="com.wa.sdk.AIHelp_appId" android:value="xxx" /> <!--aihelp SDK end--> <!-- 开启/关闭 HUAWEI_HMS数据收集功能,默认开启,使用默认配置可不配置此项 --> <meta-data android:name="com.wa.sdk.track.ENABLE_HUAWEIHMS" android:value="true" /> |
注意:以上配置中android:name必须保持一致,android:value根据CP应用申请的资源而定。
注:WINGSDK中使用到的权限
1)SDK内部自动添加的权限(普通权限)
1 2 3 4 5 |
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="com.android.vending.BILLING" /> |
3)CP接入aihelp必备权限
1 2 3 |
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> |
2.3.1.2 Activity结果传递配置
在所有使用到SDK接口的Activity的onActivityResult方法中增加以下代码:
1 2 3 4 5 6 7 8 9 |
@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (WACommonProxy.onActivityResult(requestCode, resultCode, intent)) { return; } super.onActivityResult(requestCode, resultCode, intent); } |
2.3.2 SDK初始化
调用下面接口对SDK进行初始化:
1 2 |
WACoreProxy.initialize(Activity activity); |
注意:SDK初始化必须在第一个Activity的onCreate()方法中调用,强烈建议在UI线程中调用。
2.4 登录
2.4.1 使用登录窗口
2.4.1.1 调用登录窗口
SDK内置了一个包含所有支持的登录方式的一个对话框,通过调用以下接口显示对话框:
1 2 |
WAUserProxy.loginUI(Activity activity, boolean enableCache, WACallback<WALoginResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用接口的Activity | |
enableCache | boolean | Y | 是否启用登录缓存,true为启用,false为关闭 | 如果开启登录缓存,那么调用这个接口的时候会看是否有登录记录,如果有,不会显示登录方式选择对话框,直接使用上一次的登录方式登录。 |
callback | WACallback<WAloginResult> | N | 回调,用来返回登录结果 | 2.4.3 处理登录结果 |
注意:使用登录窗口时,点击图标登录SDK自动弹出加载框,无需再次添加加载框。
2.4.1.2 清除登录窗口的缓存
使用登录窗口对话框进行登录,如果启用了缓存,SDK会缓存当前登录方式,下一次在启用缓存的前提下使用登录窗口登录,会自动使用上一次登录方式登录,不再弹出登录窗口。清除掉缓存后,可以重新弹出登录窗口,清除缓存调用以下接口:
1 2 |
WAUserProxy.clearLoginCache(); |
2.4.2 使用接口登录
如果CP有自己的登录窗口,可以使用以下登录接口:
1 2 |
WAUserProxy.login(Activity activity, String platform,WACallback<WALoginResult> callback, String extra) |
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用接口的Activity | |
platform | String | Y | 登录账户的平台类型 | 在WAConstants类中定义,详情请看5.1.2 平台取值 |
callback | WACallback<WAloginResult> | N | 回调,用来返回登录结果 | 2.4.3 处理登录结果 |
extra | String | N | 额外信息 |
2.4.3 处理登录结果
登录结果通过传入的回调返回,数据封装在WALoginResult类中。
WALoginResult字段说明
字段名 | 类型 | 说明 | 备注 |
---|---|---|---|
code | int | 登录结果码 | 5.1.1 状态码说明 |
message | String | 登录结果消息 | |
userId | String | WINGSDK用户id | |
token | String | WINGSDK用户token | |
platformUserId | String | 平台用户id | |
platformToken | String | 平台用户token | |
platform | String | 平台类型 | 当前登录的平台名称 |
2.4.4 用户登出
退出游戏的时候,必须执行登出操作。用户登出调用以下接口:
1 2 |
WAUserProxy.logout() |
注意:调用logout接口后,serverId、gameUseId、level字段值会被重置,如果需要保持相应字段的值不重置,需要重新设置相应字段的值,参考3.1 公共参数设置
2.5 支付
2.5.1 初始化支付
初始化支付,SDK会对所有已经支持的支付平台做初始化,初始化调用接口
1 2 |
WAPayProxy.initialize(Context context, WACallback<WAResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
context | Context | Y | Context对象 | |
callback | WACallback<WAResult> | N | 回调方法,返回初始化结果 | 初始化成功才能使用支付 |
支付的初始化在调用Activity的onCreate中初始化。
2.5.2 查询库存商品列表
通过查询库存商品列表,可以获取所有可以购买的库存商品,查询库存调用接口(建议支付初始化完成后,就开始调用此接口)
1 2 |
WAPayProxy.queryInventory(WACallback<WASkuResult> callback) |
注意:这里返回的库存商品信息是WINGSDK平台的商品信息,并非第三方平台的商品信息。建议在商品页出来之前调用,最好是sdk初始化完后就开始调用
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
callback | WACallback<WASkuResult> | N | 回调方法,结果返回 |
WASkuDetails实体类说明:
get方法名 | 返回值类型 | 不为空 | 说明 | 备注 |
---|---|---|---|---|
getSku() | String | Y | 库存商品id | |
getTitle() | String | N | 商品名称 | |
getDescription() | String | N | 商品描述 | |
getVirtualCoinAmount() | long | Y | 虚拟货币数 |
2.5.3 购买商品
购买指定商品,调用以下接口发起支付:
1 2 |
WAPayProxy.payUI(Activity activity, String waProductId, String extInfo, WACallback<WAPurchaseResult> callback) |
调用支付接口支付将会出现两种情况:
1)直接弹出google购买窗口(如果该商品有且只有google支付渠道);
2)弹出支付渠道选择窗口(如果有除google之外的渠道),选择支付方式后进行支付。
注意:如果需要在订单信息中记录当前玩家昵称,需要按3.1.4 设置玩家昵称设置玩家昵称。
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用Activity | |
waProductId | String | Y | WINGSDK 商品的id | 必须WINGSDK 平台的商品id |
extInfo | String | N | 额外信息,该信息会在支付成功后原样通知到CP服务器,CP用于检验 | CP 扩展信息字段,限长512(JSON格式),WING服务器到CP服务器发货通知时原样返回给CP。如果CP的通知发货地址是动态变化的(比如每个服务区的地址都不一致),可以通过此字段设置:参数格式为标准JSON,参数名为 deliverUrl,参考格式 { “deliverUrl”:” http://game.com/deliver.do”, “otherInfo”:”otherInfo”, “merId”:”” } merId字段(选填),收款商户ID,使用场景:同一个支付渠道下有多个不同的收款验证信息(或收款帐号)。如果是 APPLE支付渠道,merId使用客户端bundleId |
callback | WACallback< WAPurchaseResult > | N | 回调方法,结果返回 |
注意:如果需要横竖屏适配,请在AndroidMainifest.xml中对弹出购买窗口的Activity声明中添加如下语句:
1 2 |
android:configChanges="keyboardHidden|screenSize|orientation" |
WAPurchaseResult实体类说明:
Get方法名 | 返回值类型 | 不为空 | 说明 | 备注 |
---|---|---|---|---|
getPlatform() | String | Y | 支付平台 | |
getWAProductId() | String | Y | WINGSDK商品id | |
getExtInfo() | String | N | 额外数据 | 支付的时候CP传入的 |
getOrderId() | String | N | WINGSDK订单号 | 部分支付方式没有 |
getPlatformOrderId() | String | N | 第三方平台订单号 | 部分支付方式没有 |
getSku() | String | N | 第三方平台商品id | |
getPriceCurrencyCode() | String | N | 本地货币类型 | |
getPriceAmountMicros() | long | N | 本地货币数量 | 微分,1元=1000000 |
getDefaultCurrency() | String | N | 基准货币类型 | |
getDefaultAmountMicro() | long | N | 基准货币数量 | 微分,1元=1000000 |
getVirtualCurrency() | String | N | 虚拟货币类型 | |
getVirtualCoinAmount() | long | Y | 虚拟货币数量 |
2.5.4 查询支付服务是否可用
通过以下接口可以获取支付服务是否可用,返回boolean类型结果,true为可用,false为不可用,只要有一个支付渠道可用即为true。
1 2 |
WAPayProxy.isPayServiceAvailable(Context context) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
context | Context | Y | 上下文 |
2.5.5 资源释放
不再使用支付时需要对资源进行释放,可以清理所有支付渠道所占用的资源,在调用接口Activity的onDestroy方法内调用以下接口
1 2 |
WAPayProxy.onDestroy() |
示例:
1 2 3 4 5 6 |
@Override public void onDestroy() { super.onDestroy(); WAPayProxy.onDestroy(); } |
2.6 数据收集
使用WINGSDK数据收集接口配合大数据平台,可以轻松统计玩家习惯以及充值等行为,为游戏的市场营销提供数据依据。
序号 | 事件(接口)名称 | 事件描述 | 事件作用 | 建议触发点 | 备注 |
---|---|---|---|---|---|
1 | setServerId | 设置服务器ID | 标记玩家当前所在的服务器,后台根据该字段统计每个服务器的数据 | 登录游戏服成功后 | |
2 | setGameUserId | 设置玩家角色ID | 标记玩家当前的游戏角色ID,后台根据该字段统计玩家的数据 | 登录游戏服成功后 | |
3 | setNickname | 设置玩家角色昵称 | 标记玩家当前的游戏角色昵称,后台订单记录中会记录该昵称 | 登录游戏服成功后 | |
4 | setLevel | 设置玩家当前等级 | 标记玩家当前的游戏角色等级 | 玩家等级发生变更后,如登录游戏服成功后、玩家完成升级后 | |
5 | ghw_user_import | 玩家登录游戏服 | 记录玩家登录游戏服的动作,后台根据该事件统计导入数、登录数、导入留存等数据 | 玩家登录游戏服成功后 | 需要先调用setServerId、setGameUserId接口 |
6 | ghw_user_create | 玩家创建角色 | 记录玩家创建角色的动作,后台根据该事件统计创角数 | 玩家创建角色成功后 | 需要先调用setServerId、setGameUserId、setLevel接口 |
7 | ghw_user_info_update | 更新玩家信息 | 更新玩家信息,后台根据此字段更新玩家昵称、VIP等级等信息 | 玩家信息发送变化时,如玩家改名成功后、玩家VIP等级发生变更 | |
8 | ghw_level_achieved | 更新玩家等级 | 更新玩家等级,后台根据此字段更新玩家等级 | 玩家达到新的等级时 | 需要先调用setLevel接口更新玩家等级 |
9 | ghw_gold_update | 更新玩家货币状况 | 更新玩家货币数量,后台根据此字段更新玩家当前的货币数量 | 玩家货币数量发生变化时,如充值到账、消耗游戏币等 |
2.6.1 发送数据
2.6.1.1 构建WAEvent对象
使用WAEvent.Builder构建一个WAEvent类对象,并设置数据收集的相关参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Map<String, Object> afEventValues = new HashMap<>(); afEventValues.put(WAEventParameterName.ITEM_NAM, "GG"); afEventValues.put(WAEventParameterName.ITEM_AMOUNT, 20); afEventValues.put(WAEventParameterName.PRICE, 50); afEventValues.put(WAEventParameterName.LEVEL, 120); WAEvent event = new WAEvent.Builder() .setDefaultEventName(WAEventType.COMPLETE_PURCHASE) .setChannelEventName(WAConstants.CHANNEL_APPSFLYE, "af_purchase_custom") .setChannelEventName(WAConstants.CHANNEL_HUAWEI_HMS,"hw_purchase_custom") .setDefaultValue(50) .addDefaultEventValue(WAEventParameterName.ITEM_NAM, "GG") .addDefaultEventValue(WAEventParameterName.ITEM_AMOUNT, 50) .addDefaultEventValue(WAEventParameterName.PRICE, 50) .addDefaultEventValue(WAEventParameterName.LEVEL, 120) .setChannelEventValues(WAConstants.CHANNEL_APPSFLYER, afEventValues) .disableChannel(WAConstants.CHANNEL_APPSFLYER) .build(); |
2.6.1.2 发送数据
调用第一步创建WAEvent对象的trackEvent(Context)方法发送数据
1 2 |
event.track(this); |
或者调用以下接口发送:
1 2 |
WATrackProxy.trackEvent(Context context, WAEvent event) |
2.6.1.3 WAEvent.Builder方法介绍
- 设置默认的事件名称
1 2 |
public Builder setDefaultEventName(String eventName) |
参数:
eventName事件名称
- 设置渠道自定义事件名称,针对某个渠道需要设置特定的事件名称
1 2 |
public Builder setChannelEventName(String eventChannel, String eventName) |
参数:
eventChannel 渠道名称
eventName 事件名称
注意:
1)AppsFlyer预定义的事件名称和WINGSDK预定义的事件名称已经做了映射(例如: ghw_login <-> af_login),用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。
- 设置默认累加值
1 2 |
public Builder setDefaultValue(float value) |
参数:
value 累加统计的数值
- 设置渠道自定义累加值,针对某个渠道需要设定特定的累加值
1 2 |
public Builder setChannelValue(String eventChannel, float value) |
参数:
eventChannel 渠道名称
value 累加统计的数值
注意:
1)如果不进行设置,所有的渠道将采用设置的默认值。
- 设置事件默认的参数/值,每次可添加多个
1 2 |
public Builder setDefaultEventValues(Map<String, Object> eventValues) |
参数:
eventValues 参数/值Map
- 添加一个事件默认的参数/值,每次添加一个
1 2 |
public Builder addDefaultEventValue(String paramName, Object paramValue) |
参数:
paramName 参数名称
paramValue 参数值
- 设置事件渠道自定义的参数/值,每次可添加多个,针对某个渠道需要设定特定的参数或者值
1 2 |
public Builder setChannelEventValues(String eventChannel, Map<String, Object> eventValues) |
参数:
eventChannel 渠道名称
eventValues参数/值Map
注意:
1)AppsFlyer预定义的参数名称和WINGSDK预定义的参数名称已经做了映射,用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。
- 设置事件渠道自定义的参数/值,每次添加一个,针对某个渠道需要设定特定的参数或者值
1 2 |
public Builder addChannelEventValue(String eventChannel,String paramName, Object paramValue) |
参数:
eventChannel 渠道名称
paramName 参数名
paramValue 参数值
注意:
1)AppsFlyer预定义的参数名称和WINGSDK预定义的参数名称已经做了映射,用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。
- 禁用渠道,禁用后的渠道不会发送数据
1 2 |
public Builder disableChannel(String eventChannel) |
参数:
eventChannel 渠道名称
注意:
1)默认情况下是所有启用的渠道都发送
2)该接口只是针对当前事件禁用发送到某个渠道
3)完全启用/关闭某个渠道数据收集,请参考四、第三方配置相关章节
2.6.2 SDK预定义事件
建议参数属性:(参数对应的静态变量名请看5.2.2 SDK预定义参数名)
2.6.2.1 ghw_user_import导入用户事件
说明:导入用户事件,玩家每次进服时调用–通过用户id在后台查找
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
isFirstEnter | int | 是否第一次进服 | Y | 0→否; 1→是; 默认为0 |
注意:发送ghw_user_import事件前需调用3.1.1 设置服务器ID接口更新服务器id
2.6.2.2 ghw_initiated_purchase点击购买(虚拟货币)
说明:点击购买的时候调用(用于游戏内部虚拟交易统计)。
无参数
2.6.2.3 ghw_purchase购买完成(虚拟货币)
说明:购买完成的时候调用(用于游戏内部虚拟交易统计)。
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
itemName | String | 游戏内虚拟物品的名称/ID | Y | |
itemAmount | int | 交易的数量 | Y | |
price | float | 交易的总价 | Y |
2.6.2.4 ghw_level_achieved 等级增长事件
说明:统计玩家等级增长事件,达到等级时调用。
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
score | int | 账户分数 | N | |
fighting | int | 战斗力 | N |
注意:发送ghw_level_achieved事件前需调用3.1.3 设置用户等级level接口更新用户等级信息。
2.6.2.5 ghw_user_create 创建角色
说明:创建游戏角色,游戏角色创建时调用
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
roleType | String | 角色类型 | N | |
nickname | String | 角色名(昵称) | Y | |
gender | int | 角色性别 | N | 0 女 1 男 2 未知 |
registerTime | long | 创建时间 | Y | 注册时间戳,单位为毫秒(1970以后) |
vip | int | 等级 | N | |
bindGameGold | int | 绑定钻石 | N | |
gameGold | int | 用户钻石数 | N | |
fighting | int | 战斗力 | N | |
status | int | 状态 | N | 状态标识 -1: 锁定, 1:未锁定 |
2.6.2.6 ghw_user_info_update更新用户信息
说明:更新用户资料
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
roleType | String | 角色类型 | N | |
nickname | String | 昵称 | N | |
vip | int | 等级 | N | |
status | int | 状态 | N | 状态标识 -1: 锁定, 1:未锁定 |
2.6.2.7 ghw_gold_update货币状况更新
说明:玩家货币状况变更统计
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
approach | String | 变更途径 | Y | 开通VIP、任务获得、公会贡献、解锁背包等 |
goldType | int | 货币类型 | Y | 钻石,绑定钻石,金币,军魂等。 预定义有1和2: 1→游戏货币; 2→游戏绑定货币 |
amount | int | 变更货币数 | Y | 消耗用负数表示,获取用正数表示 |
currentAmount | int | 用户变更以后该种货币的数量 | N |
2.6.2.8 ghw_task_update玩家任务统计
说明:玩家任务信息统计
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
taskId | String | 任务Id | Y | |
taskName | String | 任务名称 | Y | |
taskType | String | 任务类型 | Y | |
taskStatus | int | 任务状态 | Y | 状态标识: 1→领取任务, 2→开始任务, 3→待领奖(任务完成) 4→已领奖 |
2.6.3 自定义事件
说明:支持自定义事件的统计
例如:
1 2 3 4 5 6 7 |
WAEvent event = new WAEvent.Builder() .setDefaultEventName(“custom_event_name”) .setDefaultValue(50) .build(); event.track(context); |
三、高级功能
3.1 公共参数设置
WINGSDK包括serverId等公共参数,这些参数主要用于数据跟踪和统计。
公共参数必须严格按照文档进行设置,在后续的接口中会使用到这些公共的参数,没有按照要求配置会导致部分接口调用失败。
3.1.1 设置服务器ID
当用户的服务器ID发生改变时,需要调用设置服务器ID接口设置新的服务器ID,例如每次进入服务器
1 2 |
WACoreProxy.setServerId(String serverId) |
注意:设置服务器id的操作在每次选服后都需要进行,必须在调用其他接口前设置。
3.1.2 设置gameUserId
当gameUserId发生改变时,需要调用设置gameUserId接口设置新的gameUserId,例如成功登录账号后、切换账号成功后
1 2 |
WACoreProxy.setGameUserId(String gameUserId) |
注意:必须在调用其他接口前设置。
3.1.3 设置用户等级Level
当用户角色等级发生改变时,需要调用设置等级接口设置新的等级,例如开始进入游戏、等级提升等。
1 2 |
WACoreProxy.setLevel(int level) |
注意:第一次进服获取玩家等级或玩家等级变更后,需要及时调用这个接口设置玩家等级,必须在调用其他接口前设置。
3.1.4 设置游戏玩家昵称
设置游戏玩家的昵称,调用接口:
1 2 |
WACoreProxy.setNickname(String nickname); |
注意:
1.当玩家登录、登出游戏,或修改昵称时,需要及时调用这个接口设置玩家昵称。
2.调用该接口设置昵称后,玩家进行购买时会自动记录昵称到订单信息中。
3.2 调试模式
3.2.1 开启/关闭调试模式
SDK默认是关闭调试模式的,开启调试模式可以在IDE的Logcat中查看到程序的Log信息,方便调试和测试。开启/关闭调试模式调用以下接口。
1 2 |
WACoreProxy.setDebugMode(true); |
说明:调用此接口后即可显示Log悬浮窗按钮,不用再另外调用enableLogcat接口,同时如果需要,也可以调用disableLogcat接口隐藏Log按钮。
3.2.2 Logcat工具
SDK提供了调试信息显示的Logcat工具,使用这个工具测试人员不需要IDE环境就可以查看调试信息,工具可以看到应用的调试Log信息(不包含系统打印)。使用前必须确保手机的安全软件没有拦截该程序的悬浮窗口权限,使用调用以下接口:
3.2.2.1 显示Logcat悬浮按钮
1 2 |
WACommonProxy.enableLogcat(Activity activity) |
说明:如果已经开启了调试模式,不需要调用该接口就可以显示Logcat入口悬浮窗。
3.2.2.2 隐藏Logcat悬浮按钮
1 2 |
WACommonProxy. disableLogcat(Activity activity) |
3.2.2.3 向Logcat增加一条日志
通过以下接口,开发者可以向Logcat工具中增加一条开发日志,日志会在Logcat工具的Log标签中显示。
1 2 |
WACommonProxy.log(String tag, String msg) |
3.9 智能客服 AIHelp
3.9.7.设置客服系统中所展示的游戏名称
1 2 |
WACscProxy.setName(String game_name); |
示例代码:
1 2 3 |
String game_name = "your name"; WACscProxy.setName(game_name); |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
game_name | String | Y | 您想在AIHelp智能客服系统中展示的您的游戏名称 |
3.9.8.设置客服系统语言
1 2 |
WACscProxy.setSDKLanguage(String language); |
示例代码:
1 2 3 |
String language = "zh_CN"; WACscProxy.setSDKLanguage(language); |
语言支持列表图:
3.9.9. 判断是否开启AiHelp
1 2 |
WACscProxy.isOpenAiHelp(); |
说明:该接口返回布尔值,true表示已开启,false表示未开启。在使用其他AIHELP接口前请先判断这个接口,在返回true的情况下使用。示例如下:
1 2 3 4 5 |
if (WACscProxy.isOpenAiHelp()) { WACscProxy.openAiHelp(); } |
3.9.10. 展示WING后台配置界面
1 2 3 |
WACscProxy.openAiHelp(String language,boolean isVip); |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
language | String | Y | 语言设置 | 如果使用默认配置传null,比如简体中文传zh_CN。 |
isVip | boolean | Y | 是否vip用户 | true表示vip用户,false是非vip用户。 |
说明:这个接口展示的界面由WING后台中SDK客服开关配置决定。如果后台未开启客服开关,此接口不生效。同时提供了无参数的重载方法WACscProxy.openAiHelp(),表示使用默认语言设置和设置非Vip用户。
四、第三方配置
4.9.华为HMS相关配置
4.9.1.华为HMS基本配置
1)在项目级别根build.gradle中配置华为仓库地址和依赖插件,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
buildscript { repositories { maven {url 'https://developer.huawei.com/repo/'} } dependencies { classpath 'com.huawei.agconnect:agcp:1.3.1.300' } } allprojects { repositories { maven {url 'https://developer.huawei.com/repo/'} } } |
2)在应用级别的根目录中添加agconnect-services.json文件,如下图所示:
agconnect-services.json的生成请参考《WINGSDK第三方后台配置.docx》中添加华为HMS后台配置章节。
3)在应用级别的build.gradle中,添加华为插件,如下:
apply plugin: ‘com.huawei.agconnect’
4)在应用级别的build.gradle中,添加华为多语种支持,配置如下:
android {
defaultConfig {
//华为多语种设置,由CP配置
resConfigs “en”, “zh-rCN”, “pt-rBR”
}
}
5)在AndroidManifest.xml中添加配置:
1 2 3 4 5 6 |
<!-- 开启/关闭 HUAWEI_HMS数据收集功能,默认关闭,如需使用数据收集功能,需配置开启状态 --> <meta-data android:name="com.wa.sdk.track.ENABLE_HUAWEIHMS" android:value="true" /> |
4.9.2.华为HMS混淆配置
1)proguard-rules.pro文件配置
1 2 3 4 5 6 7 8 9 10 11 12 |
-ignorewarnings -keepattributes *Annotation* -keepattributes Exceptions -keepattributes InnerClasses -keepattributes Signature -keepattributes SourceFile,LineNumberTable -keep class com.huawei.updatesdk.**{*;} -keep class com.huawei.hms.**{*;} -keep class com.hianalytics.android.**{*;} |
2)AndResGuard配置方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
"R.string.hms*", "R.string.connect_server_fail_prompt_toast", "R.string.getting_message_fail_prompt_toast", "R.string.no_available_network_prompt_toast", "R.string.third_app_*", "R.string.upsdk_*", "R.layout.hms*", "R.layout.upsdk_*", "R.drawable.upsdk*", "R.color.upsdk*", "R.dimen.upsdk*", "R.style.upsdk*", "R.string.agc*" |
说明:如果应用无相关混淆可不配置。
4.9.3.华为HMS权限配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!--HMS-SDK need network permission while check if upgrade is neccessary--> <uses-permission android:name="android.permission.INTERNET" /> <!--HMS-SDK need network permission while hms is upgrading--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--chek network permissions--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--check wifi state--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--if your app is running above android 8.0 and use "targetSdkVersion>=26, need add permission --> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- running after lock screen --> <uses-permission android:name="android.permission.WAKE_LOCK" /> |
说明:SDK已经集成权限,如果危险权限需要CP动态申请权限。
五、附录
5.1 代码说明
5.1.1 状态码说明
SDK中的状态码统一以静态变量方式封装在WACallback接口里面,如果使用到状态码,强烈建议采用静态变量的方式调用,不要直接使用数值。
名称 | 取值 | 说明 |
---|---|---|
CODE_SUCCESS | 200 | 成功 |
CODE_ERROR | 400 | 错误 |
CODE_UNAUTHERIZED | 401 | 请求未认证:访问受限资源是缺少认证信息,或者认证未通过 |
CODE_FORBIDEN | 403 | 禁止访问:由于应用上下文原因或请求端上下文的原因被禁止访问资源,例如IP限制等 |
CODE_NOT_FOUND | 404 | 找不到被访问资源:接口不存在、页面不存在或对应的业务实体找不到 |
CODE_SERVER_ERROR | 500 | 服务器内部故障 |
CODE_API_INVALID | 501 | 所请求接口或页面未实现 |
CODE_SDK_APPID_INVALID | 4010 | 无效appId: appId不存在或未开启 |
CODE_SIGN_ERROR | 4011 | 无效osign:osign校验失败 |
CODE_REQUEST_TIME_OUT | 4012 | 请求已过期:ots校验失败 |
CODE_PLATFORM_VERIFY_ERROR | 4013 | 第三方平台验证失败 |
CODE_ACCOUNT_VERIFY_ERROR | 4014 | 访客登录验证失败,登录验证失败 |
CODE_PLATFORM_BOUND_ALREADY | 4015 | 用户已经绑定了这个平台的其他账户 |
CODE_PRE_PLATFORM_VERIFY_ERROR | 4016 | prePlatform验证失败 |
CODE_USER_NOT_FOUND | 4017 | 用户不存在(没有找到) |
CODE_ACCOUNT_BOUND_BY_OTHERS | 4018 | 账户已经被其他用户绑定 |
CODE_ORDER_ID_INVALID | 4019 | 无效orderId |
CODE_ORDER_VERIFY_ERROR | 4020 | 订单验证失败 |
CODE_REWARD_NOT_FOUND | 4021 | FB邀请奖励事件未找到奖励政策 |
CODE_REPEAT_CRASH_REPORT | 4022 | 闪退发送报告重复 |
CODE_CHENNEL_NOT_FOUND | 4023 | 未找到渠道信息 |
CODE_UNABLE_DISBAND | 4024 | 不可以执行解绑操作 |
CODE_PAY_PLATFORM_CLOSED | 4026 | 支付渠道已关闭 |
CODE_LOGIN_PLATFORM_CLOSED | 4029 | 登录渠道已关闭 |
CODE_AD_NOT_CONFIG | 4044 | CP关闭广告开关或未配置广告奖励信息 |
CODE_AD_NOT_FOUND | 4045 | 查找不到广告展示信息 |
CODE_CHANNEL_BALANCE_INSUFFICIENT | 4046 | 第三方平台余额不足 |
CODE_CHANNEL_LOGIN_INVALID | 4047 | 第三方平台登录过期 |
CODE_ACCOUNT_BIND_DISABLED | 4048 | 账号绑定关闭(不允许绑定账号) |
CODE_ACCOUNT_UNBIND_DISABLED | 4049 | 账号解绑关闭(不允许解绑账号) |
CODE_USER_CENTER_CLOSED | 4059 | 用户中心未开启 |
CODE_CANCELED | -100 | 取消操作 |
CODE_FILE_NOT_FOUND | -101 | 文件找不到 |
CODE_API_NOT_SUPPORTED | -102 | API不支持 |
CODE_SDK_UNINITIALIZED | -200 | SDK没有初始化 |
CODE_CONTENT_CAN_NOT_BE_SHARED | -201 | 内容不可分享,一般是传入的内容为空,或者其他 |
CODE_NOT_LOGIN | -202 | 没有登录 |
CODE_LOGIN_FAILURE | -203 | 登录失败 |
CODE_NO_PERMISSION | -204 | 登录没有获取到相应的权限 |
CODE_EXCEPTION | -205 | Facebook内部定义的错误,异常信息 |
CODE_FILE_SIZE_LIMIT | -206 | 文件大小超出限制 |
CODE_NOT_LOGIN_WITH_PLATFORM | -207 | 没有以平台登录 |
CODE_SERVER_ID_NOT_FOUND | -208 | ServerId没有设置 |
CODE_ACCOUNT_NOT_FOUND | -209 | 账户不存在 |
CODE_ACCOUNT_NOT_ALLOW_UNBIND | -210 | 账户不允许解绑 |
CODE_PLATFORM_ACCOUNT_NOT_MATCH | -211 | 登录的平台账户和当前用户不匹配 |
CODE_GAME_USER_ID_NOT_FOUND | -212 | Game user id没有设置 |
CODE_GOOGLE_SERVICE_MISSING | -301 | 没有安装Google服务 |
CODE_GOOGLE_SERVICE_UPDATING | -302 | Google服务正在更新中 |
CODE_GOOGLE_SERVICE_VERSION_UPDATE_REQUIRED | -303 | Google服务版本过低,需要更新 |
CODE_GOOGLE_SERVICE_DISABLED | -304 | Google服务被禁用 |
CODE_GOOGLE_SERVICE_INVALID | -305 | Google服务不可用 |
CODE_DEVICE_NO_SUPPORTED | -401 | 设备不支持 |
CODE_NETWORK_UNAVAILABLE | -402 | 网络不可用 |
CODE_PAY_SERVICE_DISCONNECTED | -501 | 支付:服务连接中断 |
CODE_PAY_SERVICE_UNUSABLE | -502 | 支付:服务不可用 |
CODE_PAY_ITEM_UNAVAILABLE | -503 | 支付: 商品不可用 |
CODE_PAY_DEVELOPER_ERROR | -504 | 支付:开发者错误 |
CODE_PAY_ITEM_ALREADY_OWNED | -505 | 支付:已经拥有该商品(没有消耗) |
CODE_PAY_ITEM_NOT_OWNED | -506 | 支付:没有拥有该商品 |
CODE_PAY_WITHOUT_REPORT | -507 | 支付:支付成功但是没有上报或者上报失败了 |
CODE_PAY_CHECKING_FAILED | -508 | 支付:支付成功,但是通知后台的时候校验失败了 |
CODE_PAY_REORDER_TIME_LIMIT | -509 | 支付:订单时间间隔限制(在特定的时间内重复下订单) |
CODE_ACHIEVEMENT_NOT_INCREMENTAL | -601 | 成就不是分步成就(非分不成就进行递增或设置步数时) |
CODE_ACHIEVEMENT_UNKNOWN | -602 | 成就id不存在,找不到指定成就 |
CODE_ACHIEVEMENT_UNLOCKED | -603 | 成就已经解锁(尝试解锁已经被解锁的成就时) |
CODE_ACHIEVEMENT_UNLOCK_FAILURE | -604 | 成就解锁失败(解锁隐藏成就时) |
CODE_GAME_NEED_SIGN | -605 | 游戏服务已登出,需要重新登录 |
5.1.2 平台取值
名称 | 取值 | 备注 |
---|---|---|
CHANNEL_WA | WINGA | WA平台,分匿名登录和应用内登录 |
CHANNEL_HUAWEI_HMS | 华为海外 | 华为平台 |
5.2 事件说明
5.2.1 SDK预定义事件名
在WAEventType接口中定义
静态变量名称 | 事件名称 | 说明 |
---|---|---|
INITIATED_PURCHASE | ghw_initiated_purchase | 点击购买 |
COMPLETE_PURCHASE | ghw_purchase | 购买完成 |
USER_CREATED | ghw_user_create | 创建角色 |
USER_INFO_UPDATE | ghw_user_info_update | 更新用户信息 |
IMPORT_USER | ghw_user_import | 导入用户 |
GOLD_UPDATE | ghw_gold_update | 消耗游戏币 |
TASK_UPDATE | ghw_task_update | 玩家任务统计 |
LEVEL_ACHIEVED | ghw_level_achieved | 等级或分数 |
5.2.2 SDK预定义参数名
在WAEventParameterName接口中定义
静态变量名称 | 参数名称 | 数据类型 | 说明 |
---|---|---|---|
ACCOUNT_TYPE | accountType | String | 账户类型 |
GENDER | gender | int | 性别 |
AGE | age | int | 年龄 |
SUCCESS | success | boolean | 是否成功 |
TRANSACTION_ID | transactionId | String | 交易的流水号 |
PAYMENT_TYPE | paymentType | String | 支付类型 |
CURRENCY_TYPE | currencyType | String | 货币类型 |
CURRENCY_AMOUNT | currencyAmount | float | 现金额 |
VERTUAL_COIN_AMOUNT | virtualCoinAmount | int | 虚拟货币数量 |
VERTUAL_COIN_CURRENCY | virtualCurrency | String | 虚拟货币类型 |
IAP_ID | iapId | String | 道具ID |
IAP_NAME | iapName | String | 道具名称 |
IAP_AMOUNT | iapAmount | int | 道具数量 |
ITEM_NAME | itemName | String | 游戏内虚拟物品的名称/ID |
ITEM_AMOUNT | itemAmount | int | 交易的数量 |
SCORE | score | int | 得分数 |
PRICE | price | float | 价格 |
CONTENT_TYPE | contentType | String | 内容类型 |
CONTENT_ID | contentId | String | 内容ID |
QUANTITY | quantity | int | 数量 |
SEARCH_STRING | searchString | String | 搜索关键字 |
DESCRIPTION | description | String | 描述 |
NICKNAME | nickname | String | 昵称 |
VIP | vip | int | 等级 |
ROLE_TYPE | roleType | String | 角色类型 |
BINDED_GAME_GOLD | bindGameGold | int | 绑定钻石 |
GAME_GOLD | gameGold | int | 用户钻石数 |
FIGHTING | fighting | int | 战斗力 |
REGISTER_TIME | registerTime | long | 注册时间 |
TASK_ID | taskId | String | 任务Id |
TASK_NAME | taskName | String | 任务名称 |
TASK_TYPE | taskType | String | 任务类型 |
TASK_STATUS | taskStatus | int | 任务状态:状态标识:1→领取任务, 2→开始任务, 3→待领奖(任务完成), 4→已领奖 |
GOLD_TYPE | goldType | int | 货币类型 |
AMOUNT | amount | int | 变更货币数 |
APPROACH | approach | String | 变更途径 |
IS_FIRST_ENTER | isFirstEnter | int | 是否第一次导入用户, 默认为0, 是为1 |
STATUS | status | int | 状态 |