对接完成之后可以使用工具进行校验:点击下载
本工具用于协助对接完Wing SDK后,检查相关的配置、包引入等是否正确,具体使用方法见操作手册
一、简介
1.1 用户模块
提供 UI界面 和 接口调用 两种方式,满足用户不同需求。
1.1.1 登录弹窗
内置登录UI弹窗,内含所有已经集成的登录方式,无需编写界面,一键集成登录功能
1.1.2 匿名登录
WINGSDK匿名登录无需账户密码,根据设备信息新建用户或登录已存在的用户,可以快速登录游戏。
1.1.3 第三方平台登录
第三方平台登录接口可以通过第三方平台账户登录,返回WINGSDK账号信息,使用没有绑定任何WINGSDK账号的第三方平台账号登录,会自动新建一个WINGSDK账号,并且与该平台账号绑定。支持Facebook登录、Google登录、VK登录。
1.1.4 内置账户管理界面
内置账户管理UI界面,无需编写界面和逻辑,即可对账户进行管理,平台账户绑定情况一目了然,绑定、解绑平台账户,新建账号,切换账号,轻松搞定。
1.1.5 账号绑定与解绑
-
账号绑定接口,可以将WINGSDK账号跟第三方平台的账号绑定,绑定成功后可以使用绑定的平台账号登录,在同一应用中一个平台账号只能绑定一个WINGSDK账号。
-
账号解绑接口,可以将第三方平台账号与其绑定的WINGSDK账号解绑,解绑成功后,平台账号可以与WINGSDK账号再次绑定。
-
绑定账号查询接口,能够查询此时登录的账号(WINGSDK)已经绑定的第三方平台账号列表。
1.1.6 账号切换
一键切换账号,迅速切换WINGSDK账号或者第三方账号。
1.2 支付模块
支付模块提供支付充值接口,集成简单,无需理会复杂的支付流程,轻松完成商品的购买(充值)。
1.3 数据收集模块
数据收集模块提供了数据收集的接口,多渠道灵活调用。数据收集包含了丰富的应用内的事件类型,还支持用户自定义事件类型。
1.4 社交模块
社交模块,为游戏提供社交功能支持,一键集成,功能丰富。社交模块包含以下功能:
1、分享接口,支持分享链接、文字、图片、视频、Facebook OpenGraph;
2、应用邀请,一键邀请好友;
3、游戏邀请,邀请还没有玩过该游戏的好友跟自己一起玩这款游戏,邀请好友一起玩游戏,还有丰富的邀请奖励;
4、礼物接口,可以向正在和自己玩同一款游戏的好友赠送礼物或者索要礼物,加强玩家的互动;
5、Game Service,游戏互动更简单;
6、社区,提高玩家的积极性和互动。
二、快速集成
2.1 环境配置要求
-
Android API 15及以上版本
-
jdk1.7及以上版本。
2.2 集成SDK到项目
WINGSDK基于gradle提供了多种集成方式:Gradle自动集成、手动集成、Eclipse项目集成、命令行集成,可以根据需要选择其中任意一种方式。
第三方SDK依赖关系如下表
第三方SDK | 版本 | 说明 |
---|---|---|
9.8.0 | ||
4.18.0 | 此版本的facebook依赖于android support包25.0.0及以上版本,使用facebook功能请先使用Android Manager下载或更新Android SDK至25.0.0或以上(主要包括SDK flatform, Android Support Repository和Google Repository) | |
APPSFLYER | 4.6.1 | |
CHARTBOOST | 6.5.1 | |
VK | 1.6.7 |
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 "WINGSDK_REPOSITORY_URL" } } } |
注意:
1)部分项目中可能只有一个build.gradle文件;
2)以上的url为WingSdk仓库地址:http://repo.wingsdk.cn:8081/repository/winga-group/,地址可能有变,请留意最新的对接文档。
在程序module下面的build.gradle文件的dependences内增加依赖配置;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// 基础模块(必选) // compile 'com.wa.sdk:wa-sdk-base:X.X.X' // 核心模块(必选) // compile 'com.wa.sdk:wa-sdk-core:X.X.X' // AppsFlyer模块(可选) // compile 'com.wa.sdk:wa-sdk-appsflyer:X.X.X' // Chartboost模块(可选) // compile 'com.wa.sdk:wa-sdk-chartboost:X.X.X' // Facebook模块(可选) // compile 'com.wa.sdk:wa-sdk-facebook:X.X.X' // Google模块(可选) // compile 'com.wa.sdk:wa-sdk-google:X.X.X' // VK模块(可选) // compile 'com.wa.sdk:wa-sdk-vk:X.X.X' // 网页支付模块(可选) // compile 'com.wa.sdk:wa-sdk-webpay:X.X.X' |
注意:
1)部分项目中可能只有一个build.gradle文件;
2)以上的“必选”项目必须引入,“可选”项目可根据需求引入。
请使用WINGSDK打包配置页面生成具体的配置脚本,地址:
https://admin.wingsdk.com/developers/pack_config.do
2.2.2 手动集成
2.2.2.1 打包配置页面下载SDK包
WINGSDK打包配置页面地址https://admin.wingsdk.com/developers/pack_config
2.2.2.2 导入SDK包到项目中
打开项目,在菜单“File→New→New Model”
打开新建Model页面,选择“Import .JAR/.AAR Package”项,下一步
选择下载好的SDK .AAR包,导入
此时项目的目录将会多了一个上面新建的Module,然后将Module关联到程序Module中,关联方法有两种:
第一种:直接在程序Module中的build.gradle的dependence下添加代码(单引号内部为要关联的Module名称,以冒号“:”开头)
1 2 |
compile project(':wa_sdk_base') |
第二种:选中程序Module,鼠标右键→Open Module Settings(或F12),打开程序Module设置面板
在打开的Module设置窗口中选中程序Module,定位到“Dependence”选项卡,点击“+”符号添加依赖,选择“Module Dependence”,
弹出Module选择窗口,在这个窗口中会展示出所有的未关联的Module
选中要关联的Module,OK→OK完成配置
2.2.2.3 手动集成AAR注意事项
1)wa-sdk-base AAR包(必选)
2)wa-sdk- core AAR包(必选)
需要依赖com.android.support:support-v4包,23及以上版本
1 2 |
compile ('com.android.support:support-v4:23.1.1') |
3)wa-sdk- appsflyer AAR包(可选)
4)wa-sdk- chartboost AAR包(可选)
5)wa-sdk- facebook AAR包(可选)
需要依赖Facebook SDK,4.18.0版本
1 2 |
compile ('com.facebook.android:facebook-android-sdk:4.18.0') |
6)wa-sdk- google AAR包(可选)
需要依赖Google Service相关包,版本为9.8.0
1 2 3 4 5 |
compile ('com.google.android.gms:play-services-base:9.8.0') compile ('com.google.android.gms:play-services-plus:9.8.0') compile ('com.google.android.gms:play-services-auth:9.8.0') compile ("com.google.android.gms:play-services-games:9.8.0") |
7)wa-sdk- vk AAR包(可选)
需要依赖VK SDK包
1 2 |
compile ('com.vk:androidsdk:1.6.7') |
8)wa-sdk- webpay AAR包(可选)
说明:以上的“必选”项目必须引入,“可选”项目可根据需求引入
2.2.3 Eclipse项目集成
2.2.3.1 安装Gradle插件
打开Eclipse,安装gradle插件(如:BuildShip),安装成功后重启eclipse
2.2.3.2 导入Gradle项目
将Gradle项目导入eclipse,如果不是Gradle项目,导入时转换成Gradle项目
2.2.3.3 集成配置
修改程序项目中的build.gradle文件,增加仓库地址配置和dependencies配置,添加SDK相关依赖,详细请参考2.2.1 Gradle自动集成
2.2.3.4 开始开发
集成完毕后,编译项目,使依赖生效,调用接口开发。
2.2.4 命令行集成
2.2.4.1 配置编译环境
下载安装gradle工具,并配置执行环境。
2.2.4.2 新建构建项目的目录
如果没有项目目录,新建一个目录作为项目目录。
2.2.4.3 拷贝源代码和资源文件到构建目录中
将源码拷贝到新建的项目目录中,最基本包括以下目录和文件
文件/目录 | 描述 |
---|---|
assets/ | assets文件目录 |
libs/ | 第三方库目录 |
src | java源文件目录 |
res | 资源文件目录 |
AndroidManifest.xml | 配置文件 |
如下图:
说明:以上目录不是硬性规定的,可以自定义,只需要在后续步骤中正确设置即可
2.2.4.4 配置local.properties文件
在local.properties文件增加以下配置(若没有该文件需要新建)
sdk.dir=YOUR_SDK_HOME_DIR
将以上的值替换成你的Android SDK的目录
2.2.4.5 配置build.gradle文件
配置build.gradle文件,包含以下内容:
1)插件声明
1 2 3 |
apply plugin: 'maven' apply plugin: 'com.android.application' |
2)仓库地址声明
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 |
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.3' } } allprojects { repositories { jcenter() maven { url "WING_SDK_REPOSITORY_URL" } } } allprojects { repositories { jcenter() } } |
注意:以上的WING_SDK_REPOSITORY_URL为WINGSDK仓库地址:http://repo.wingsdk.cn:8081/repository/winga-group/,地址可能有变,请留意最新的对接文档。
3)Android编译配置声明
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 |
android { compileSdkVersion 23 buildToolsVersion "23.0.2" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' // Android配置文件 java.srcDirs = ['src'] // 源码根目录位置 resources.srcDirs = ['src'] // aidl.srcDirs = ['src'] // AIDL文件根目录位置 renderscript.srcDirs = ['src'] res.srcDirs = ['res'] // 资源文件根目录位置 assets.srcDirs = ['assets'] // assets根目录位置 jniLibs.srcDirs = ['libs'] // jni库根目录位置 } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } defaultConfig { applicationId "YOUR_APP_PACKAGE_NAME" //请替换成你的应用包名 minSdkVersion 15 targetSdkVersion 23 versionCode 12 versionName "3.6.1" } } |
说明:除了以上必要配置外,Android的相关配置还可以添加签名、代码混淆等配置
注意:上面的sourceSet中的内容必须跟你在项目目录下的文件类型对应起来
4) 依赖配置声明
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 |
dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:support-v4:23.1.1' //请使用WINGSDK打包配置页面生成具体的配置脚本 // 基础模块(必选) // compile 'com.wa.sdk:wa-sdk-base:X.X.X' // 核心模块(必选) // compile 'com.wa.sdk:wa-sdk-core:X.X.X' // AppsFlyer模块(可选) // compile 'com.wa.sdk:wa-sdk-appsflyer:X.X.X' // Chartboost模块(可选) // compile 'com.wa.sdk:wa-sdk-chartboost:X.X.X' // Facebook模块(可选) // compile 'com.wa.sdk:wa-sdk-facebook:X.X.X' // Google模块(可选) // compile 'com.wa.sdk:wa-sdk-google:X.X.X' // VK模块(可选) // compile 'com.wa.sdk:wa-sdk-vk:X.X.X' // 网页支付模块(可选) // compile 'com.wa.sdk:wa-sdk-webpay:X.X.X' } |
2.2.4.6 编译
打开命令行,进入项目目录,执行以下命令:
Windows:
1 2 |
gradle.bat init wrapper |
MAC/Linux:
1 2 |
gradle init wrapper |
这里的gradle.bat是下载的gradle编译工具(如果没有配置环境变量,请使用绝对路径),初始化成功后,将会得到SUCCESS字样,如下图:
此时项目目录下会多了一些目录和文件
接下来执行clean task,清理项目
Windows:
1 2 |
gradle.bat clean |
MAC/Linux:
1 2 |
gradle clean |
最后一步是执行build task,进行编译
Windows:
1 2 |
gradle.bat build |
MAC/Linux:
1 2 |
gradle build |
编译成功后将看到BUILD SUCCESSFUL字样,如下图:
build task执行成功后,将会在项目目录下的\build\outputs\apk看到apk(如果在build.gradle中配置好签名及混淆配置,可实现一步到位的打包)
说明:最后一步的编译有多种task可以实现,比如assembleDebug,assembleRelease等等,详细请参考gradle官方说明。
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 |
<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"/> |
注意:以上配置中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" /> |
2)CP选配权限(危险权限) 如果应用上Google推荐,需注意Google推荐位需知
1 2 3 4 5 6 |
<!—Google登录必须配置GET_ACCOUNTS权限 --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_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()方法中调用,所有接口必须在SDK初始化完成并且成功后才能调用。
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 处理登录结果 |
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 extInfo) |
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用接口的Activity | |
platform | String | Y | 登录账户的平台类型 | 在WAConstants类中定义,详情请看下方登录平台取值 |
callback | WACallback<WAloginResult> | N | 回调,用来返回登录结果 | 2.4.3 处理登录结果 |
extInfo | String | N | 额外信息 | Facebook自定义权限登录、应用内登录等高级登录设置请参考3.3 登录高级设置相关章节 |
注意:如果使用Google登录,必须在AndroidManifest.xml重配置GET_ACCOUNTS权限,当buildVersion 在23及以上版本时,需要在调用登录接口的Activity中的onRequestPermissionsResult()方法中调用已下接口,完成权限自检和授权的传递。
WACommonProxy.onRequestPermissionsResult(@NonNull Activity activity, int requestCode, String[] permissions, int[] grantResults)
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 支付
WINGSDK支付流程如下:
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平台的商品信息,并非第三方平台的商品信息。
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
callback | WACallback<WASkuResult> | N | 回调方法,结果返回 |
WASkuDetails实体类说明:
get方法名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
getSku() | String | Y | 库存商品id | |
getTitle() | String | N | 商品名称 | |
getDescription() | String | N | 商品描述 | |
getPriceCurrencyCode() | String | N | 本地货币类型 | |
getPriceAmountMicros() | long | N | 本地货币金额如1160000 | 微分 |
getDefaultCurrency() | String | N | 基准货币类型 | |
getDefaultAmountMicro() | long | N | 基准货币金额 | 微分 |
getVirtualCoinAmount() | long | Y | 虚拟货币数 | |
getVirtualCurrency() | String | N | 虚拟货币币种 |
2.5.3 购买商品
购买指定商品,调用以下接口发起支付:
1 2 |
WAPayProxy.payUI(Activity activity, String waProductId, String extInfo, WACallback<WAPurchaseResult> callback) |
调用支付接口支付将会出现两种情况:
1)直接弹出google购买窗口(如果该商品有且只有google支付渠道);
2)弹出支付渠道选择窗口(如果有除google之外的渠道),选择支付方式后进行支付。
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用Activity | |
waProductId | String | Y | WINGSDK 商品的id | 必须WINGSDK 平台的商品id |
extInfo | String | N | 额外信息,该信息会在支付成功后原样通知到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" |
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数据收集接口配合大数据平台,可以轻松统计玩家习惯以及充值等行为,为游戏的市场营销提供数据依据。WINGSDK数据收集使用在游戏的过程中打点的方式,如图所示:
以上流程图中涉及到的几个接口:setServerId、setGameUserId、setLevel、ghw_user_import事件、ghw_user_create事件是有时序要求的,其它的事件如ghw_initiated_purchase、ghw_purchase、ghw_level_achieved、ghw_user_info_update、ghw_gold_update和ghw_task_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_FACEBOO, "fb_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 渠道名称
eventName 累加统计的数值
注意:
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 渠道名称
eventName 参数名
eventValue参数值
注意:
1)AppsFlyer预定义的参数名称和WINGSDK预定义的参数名称已经做了映射,用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。
- 禁用渠道,禁用后的渠道不会发送数据
1 2 |
public Builder disableChannel(String eventChannel) |
参数:
eventChannel 渠道名称
注意:
1)默认情况下是所有启用的渠道都发送
2)启用/关闭某个渠道数据收集,请参考四、第三方配置相关章节
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 | int | 角色类型 | 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 | 用户变更以后该种货币的数量 | Y |
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 自定义事件
说明:支持自定义事件的统计
2.7 代码混淆配置
打包apk混淆代码配置中增加以下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
-keepattributes SourceFile,LineNumberTable # WingA -dontwarn com.google.** -dontwarn android.support.** -dontwarn com.squareup.** -keep class com.wa.sdk.** { *; } -keep class android.support.** { *; } -keep class com.squareup.** { *; } -keep class * extends android.app.Activity { *; } -keep class * extends android.content.BroadcastReceiver { *; } -keep class **.R$* { *; } |
三、高级功能
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 设置ClientId
ClientId主要用于数据追踪,SDK内部有自己的ClientId生成机制,如果CP需要自定义ClientId,可调用接口进行设置
1 2 |
WACoreProxy.setClientId(String clientId) |
注意:
1、clientId不是必设参数
2、必须在SDK初始化之前调用,一旦调用这个接口进行修改ClientId,以后SDK的ClientId将会保持这个不变。
clientId的作用:clientId用于跟踪设备,通过一套算法计算,可以看成是一个设备的唯一标识。CP可能会有自己的唯一标识,通过设置clientId,来达到WINGSDK后台和游戏后台唯一标识的统一。如不设置,SDK内部会自动通过算法算出。
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.3 登录高级设置
3.3.1 设置登录流程
使用该接口需注意以下两点:
1)一般来说,如果应用登录的时候有登录方式选择界面,就不需要使用此接口,此接口默认是这种方式(取值为1)。
2)这个接口主要是用来满足以下需求:用户第一次登录是以游客方式进行登录,进到应用里面可以切换其它登录方式,下次登录会直接以切换后的账户进行登录(取值为2)。
1 2 |
WAUserProxy.setLoginFlowType(int flowType) |
登录流程有两种模式,在WAConstants类中定义,取值如下表:
名称 | 取值 | 备注 |
---|---|---|
LOGIN_FLOW_TYPE_DEFAULT | 1 | 适用于有登录界面的场景,登录的时候不会重新绑定设备 |
LOGIN_FLOW_TYPE_REBIND | 2 | 适用于无登录界面的场景,登录时重新将新账号与当前设备绑定,如在游戏中切换账户,切换以后的匿名登录是以切换后的账户进行登录。 |
3.3.2 应用内登录
SDK平台应用内登录,是指CP本身有自己登录系统,先登录CP后台拿到用户信息后登录SDK后台,应用内登录调用接口2.4.2 使用接口登录,将CP后台返回的用户信息按照规定格式(JSON字符串)通过extInfo字段传入。
应用内登录extInfo格式(标准JSON格式字符串)
1 2 3 4 5 6 7 |
{ "appSelfLogin": true, "appUserId": "12345", "appToken": "o1akkfjia81FMvFSO8kxC96TgQYlheEr", "extInfo": "extInfo String" } |
字段说明:
字段名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
appSelfLogin | boolean | 应用内登录固定值true | Y | |
appUserId | String | CP用户id | Y | |
appToken | String | CP用户Token | Y | |
extInfo | String | 额外信息 | N | SDK后台会将此字段内容传回CP服务器 |
3.3.3 Facebook自定义权限登录
Facebook平台登录默认权限是public_profile和user_friends,如果需要自定义登录获取的权限,可以调用接口2.4.2 使用接口登录,将需要获取的权限声明按照规定格式(JSON字符串)通过extInfo字段传入。
Facebook自定义权限登录extInfo格式(标准JSON格式字符串)
1 2 3 4 5 6 7 8 |
{ "permissionType": "read", "permissions": [ "public_profile", "user_frierds" ] } |
字段说明:
字段名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
permissionType | String | 权限类型 | Y | read 或write,登录类型只能选一种 |
permissions | JSONArray | 权限列表 | Y | 列表中的权限类型必须跟权限类型声明的类型一致且都是同一类型,否则会登录失败。4.2.3 Facebook登录权限对照表 |
3.4 账户管理
3.4.1 内置账户管理界面
SDK内置了账户管理界面,在这个界面可以对账户进行管理操作,包括账号绑定、解绑、切换账户、新建账户。
1 2 |
WAUserProxy.openAccountManager(Activity activity, WAAccountCallback callback) |
注意:使用内置账户管理界面之前必须先登录
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | Activity对象 | |
callback | WAAccountCallback | N | 回调 | onLoginAccountChanged(WALoginResult currentAccount)回调方法,在新建账号、账号切换时会回调这个方法,返回当前登录的账号信息. onBoundAccountChanged(boolean binding, WABindResult result)回调方法,在绑定账户信息发生变更时会回调这个方法,每次变更都调用一次,CP可根据需要实现相应功能。 |
3.4.2 绑定第三方平台账户
绑定第三方平台账户,不但可以使用第三方平台账户登录,而且可以防止账户信息丢失,调用以下接口绑定平台账户
1 2 |
WAUserProxy.bindingAccount(Activity activity, String platform, String extInfo,WABindCallback callback) |
参数说明
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用接口的Activity | |
platform | String | Y | 绑定第三方平台账号的平台类型 | 取值参考5.1.2 平台取值 |
extInfo | String | N | 额外信息 | 预留字段 |
callback | WABindCallback | N | 回调,用来返回绑定结果 |
3.4.3 查询已绑定的第三方平台账户
查询当前的账户已经绑定的第三方平台账户列表,调用接口
1 2 |
WAUserProxy.queryBoundAccount(WACallback<WAAccountResult> callback) |
WAAccountResult字段说明
字段名 | 类型 | 说明 | 备注 |
---|---|---|---|
code | int | 结果码 | 5.1.1 状态码说明 |
message | String | 结果消息 | |
accounts | List<WAAccount> | ||
platform | String | 绑定的平台类型 | |
platformUserId | String | 平台用户id |
WAAccount字段说明
字段名 | 类型 | 说明 | 备注 |
---|---|---|---|
platform | String | 绑定的平台类型 | |
platformUserId | String | 平台用户id |
3.4.4 解绑第三方平台账户
解绑已经绑定的第三方平台账户,调用接口
1 2 |
WAUserProxy.unBindAccount(String platform, String platformUserId, WACallback<WAResult> callback) |
注意:有以下情况之一者,不可解绑
1.解绑的账户为SDK平台的;
2.用户没有绑定第三方平台账户的;
3.用户只绑定一个第三方平台账户,且用户没有与当前设备绑定的
3.4.5 切换账户
切换账户可以一键切换登录账户,调用接口
1 2 |
WAUserProxy.switchAccount(Activity activity, String platform, final WACallback<WALoginResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | ||
platform | String | Y | 需要切换的账号类型 | 取值参考5.1.2 平台取值 |
callback | WACallback<WALoginResult> | N | 回调 | 用来返回结果 |
3.4.6 新建账户
新建账户可以新建一个全新的玩家账户。
1 2 |
WAUserProxy.createNewAccount(WACallback<WALoginResult> callback) |
注意:新建账户后,新的账户会跟当前设备绑定,如果之前的账户没有绑定第三方平台账户,数据将会丢失。
3.4.7 获取账户信息
获取账户信息接口可以获取指定平台的账户信息,调用接口
1 2 |
WAUserProxy.getAccountInfo(String platform, WACallback<WAUser> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
platform | String | Y | 平台名称 | 取值参考5.1.2 平台取值 |
callback | WACallback<WAUser> | N | 回调 | 结果中包含平台用户的id,名称,头像等信息 |
3.5 社交
3.5.1 分享
分享内容到社交平台,支持分享链接、图片、视频、Facebook OpenGraph(Facebook专属),调用接口
1 2 |
WASocialProxy.share(Activity activity, String platform, WAShareContent shareContent boolean shareWithAPI, String extInfo, WACallback<WAShareResult> callback) |
参数说明
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
platform | String | Y | 分享的平台 | 分享到哪个平台 |
shareContent | WAShareContent | Y | 分享内容 | |
shareWithAPI | boolean | Y | 是否通过API分享 | 如果所选平台支持API分享,设置为true时直接通过API层分享,没有界面 |
extInfo | String | N | 额外信息 | 预留字段 |
callback | WACallback<WAResult> | N | 回调方法,结果返回 |
3.5.1.1 分享链接
分享链接shareContent参数传入WAShareLinkContent类型实体类对象。
WAShareLinkContent字段说明
字段名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
contentUri | Uri | Y | 链接 | |
peopleIds | List<String> | N | 分享好友ID | |
placeId | String | N | 地址id | |
ref | String | N | 添加到引用链接中的参数值 | |
contentTitle | String | N | 连接标题 | |
contentDescription | String | N | 链接描述 | |
imageUri | Uri | N | 配图 |
示例
1 2 3 4 5 6 7 8 9 |
WAShareLinkContent shareLinkContent = new WAShareLinkContent.Builder() .setContentTitle("Test share") // 分享标题 .setContentDescription("Test Ghw share with facebook") // 分享文本内容 .setImageUri(Uri.parse("http://assets.bmob.cn/images/2014-data-service-icon.png")) // 缩略图地址 .setContentUri(Uri.parse("http://www.bmob.cn/")) // 分享的链接 .build(); WASocialProxy.share(this, WAConstants.CHANNEL_FACEBOOK, shareLinkContent, mShareWithApi, null, mShareCallback); |
3.5.1.2 分享图片
分享图片shareContent参数传入WASharePhotoContent类型实体类对象。
WASharePhotoContent字段说明
字段名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
contentUri | Uri | N | 内容Uri | |
peopleIds | List<String> | N | 分享好友ID | |
placeId | String | N | 地址id | |
ref | String | N | 添加到引用链接中的参数值 | |
photos | List<WASharePhoto> | Y | 图片列表 | 不能超过12MB,而且列表不能为空,至少一张图片 |
WASharePhoto字段说明
字段名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
bitmap | Bitmap | Y | 图片Bitmap对象 | 和imageUri两个必选一个 |
imageUri | Uri | Y | 图片Uri | 和bitmap两个必选一个 |
userGenerated | String | N | 未使用 | |
caption | String | N | 图片描述 |
示例
1 2 3 4 5 6 7 8 9 10 |
WASharePhoto photo = new WASharePhoto.Builder() .setImageUri(uri) // 图片本地Uri .build(); // 构造分享图片对象 WASharePhotoContent sharePhotoContent = new WASharePhotoContent.Builder() .addPhoto(photo) .build(); WASocialProxy.share(FBShareActivity.this, WAConstants.CHANNEL_FACEBOOK, sharePhotoContent, mShareWithApi, null, mShareCallback); |
3.5.1.3 分享视频
分享视频shareContent参数传入WAShareVideoContent类型实体类对象。
WAShareVideoContent字段说明
字段名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
contentUri | Uri | N | 内容Uri | |
peopleIds | List<String> | N | 分享好友ID | |
placeId | String | N | 地址id | |
ref | String | N | 添加到引用链接中的参数值 | |
contentDescription | String | N | 视频描述 | |
contentTitle | String | N | 视频标题 | |
previewPhoto | WASharePhoto | N | 视频缩略图 | |
video | WAShareVideo | Y | 视频 | 不能超过12MB |
WAShareVideo字段说明
字段名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
localUri | Uri | Y | 视频Uri |
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// 构建视频内容对象 WAShareVideo video = new WAShareVideo.Builder() .setLocalUri(uri) .build(); // 构建缩略图内容对象 WASharePhoto photo = new WASharePhoto.Builder() .setBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) .build(); // 构建分享视频对象 WAShareVideoContent shareVideoContent = new WAShareVideoContent.Builder() .setContentTitle("TestVideo") // 标题 .setContentDescription("Test share video to facebook") // 文本内容描述 .setVideo(video) // 视频内容 .setPreviewPhoto(photo) // 缩略图内容 .build(); WASocialProxy.share(FBShareActivity.this, WAConstants.CHANNEL_FACEBOOK, shareVideoContent, mShareWithApi, null, mShareCallback); |
3.5.1.4 分享OpenGraph (Facebook)
分享OpenGraph shareContent参数传入WAShareOpenGraphContent类型实体类对象。
注意:分享OpenGraph时,platform参数固定值FACEBOOK
WAShareOpenGraphContent字段说明
字段名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
action | WAShareOpenGraphAction | Y | action | |
previewPropertyName | Y | 预览属性名称 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// 构建一个OpenGraphObject对象 WAShareOpenGraphObject object = new WAShareOpenGraphObject.Builder() .putString("og:type", "com_ghw_sdk:level") // “og:type”为facebook预定义值,可参考https://developers.facebook.com/docs/sharing/opengraph/android,“com_ghw_sdk:level”为其值,其类型格式为“命名空间:对象类型” .putString("og:title", "A Game of Thrones") .putString("og:description", "In the frozen wastes to the north of Winterfell, sinister and supernatural forces are mustering.") .putString("og:image", "http://pic.miercn.com/uploads/allimg/150907/85-150ZF92058.jpg") .build(); // 构建一个OpenGraphAction对象 WAShareOpenGraphAction action = new WAShareOpenGraphAction.Builder() .setActionType("com_ghw_sdk:reach") .putObject("level", object) .build(); // 构建一个OpenGraphContent对象 WAShareOpenGraphContent content = new WAShareOpenGraphContent.Builder() .setPreviewPropertyName("level") .setAction(action) .build(); WASocialProxy.share(this, WAConstants.CHANNEL_FACEBOOK, content, mShareWithApi, null, mShareCallback); |
3.5.2 应用邀请
发送应用邀请,可以邀请社交平台用户打开应用或者下载应用。
1 2 |
WASocialProxy.appInvite(Activity activity, String platform, String appLinkUrl, String previewImageUrl, WACallback<WAResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
platform | String | Y | 发送邀请的平台 | 发布邀请信息的平台 |
appLinkUrl | String | Y | 分享链接 | |
previewImageUrl | String | Y | 预览图片url地址 | |
callback | WACallback<WAResult> | N | 回调方法,结果返回 |
3.5.3 发送请求
向平台的好友发送请求,请求类型包括普通请求、游戏邀请、赠送礼物、索要礼物等,发送请求调用接口
1 2 |
WASocialProxy.sendRequest(Activity activity, String platform, String requestType, String title, String message, String objectId, List<String> receiptIds, WACallback<WARequestSendResult> callback, String extInfo) |
参数说明
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用Activity对象 | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义5.1.2 平台取值 |
requestType | String | Y | 请求类型 | 请求类型默认的在WAConstants下有定义,请参考5.1.3 请求类型说明 |
title | String | Y | 标题 | 部分平台需要显示 |
message | String | Y | 说明文字 | 部分平台需要显示 |
objectId | String | N | 对象id | 部分请求类型必填,比如发送礼物,为礼物对象id |
receiptIds | List<String> | Y | 接收者id | 根据平台而定,有些平台支持一次发送请求给多个用户,有些平台一次只能发送给一个用户。VK平台一次只能发送一个用户 |
callback | WACallback<WARequestSendResult> | N | 回调 | 结果返回 |
extInfo | String | N | 额外数据信息 | 扩展字段,根据各个平台需要定义 |
WARequestSendResult字段说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
requestId | String | Y | 平台生成的请求id | 部分平台会为空或只是网络请求id |
recipients | String | Y | 接收者id列表 | 返回一个或者多个 |
3.5.4 游戏邀请
发送游戏邀请请求接口请参照章节3.5.3 发送请求
3.5.4.1 查询可邀请好友列表
游戏邀请只能邀请没有玩过当前游戏的好友,称为可邀请好友,查询可邀请的好友调用以下接口:
1 2 |
WASocialProxy.queryInvitableFriends(Activity activity, String platform, long duration, WACallback<WAFriendsResult> callback) |
参数说明
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
platform | String | Y | 平台名称 | 所查询的平台 |
duration | long | Y | 过滤时间间隔 | 当过滤时间间隔大于0时,在这个时间间隔内不会出现已经发出邀请的好友 |
callback | WACallback<WAFriendsResult> | N | 回调方法,结果返回 |
3.5.4.2 记录邀请成功信息
成功邀请好友后,调用以下接口向服务器记录邀请信息:
1 2 |
WASocialProxy.createInviteRecord(Context context, String platform, String requestId, Collection<String> recipients, WACallback<WAResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
context | Context | Y | 上下文 | |
platform | String | Y | 平台名称 | 发出邀请的平台 |
requestId | String | Y | 邀请请求id | 没有的可以传空字符(如VK) |
recipients | Collection<String> | Y | 邀请成功好友的id列表 | |
callback | WACallback<WAResult> | N | 回调方法,结果返回 |
3.5.4.3 邀请安装奖励
通过邀请安装使用的用户,安装后需要通知服务器对邀请人进行奖励,需要在游戏启动后登录并且选服后调用以下接口:
1 2 |
WASocialProxy.inviteInstallReward(Activity activity, String platform, WACallback<WAResult> callback) |
注意:这个接口必须在用户登录并且选服后调用。采用platform指定平台方式登录或者绑定platform指定的平台后,均可以调用该接口。
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
platform | String | Y | 平台名称 | 邀请的平台 |
callback | WACallback<WAResult> | N | 回调方法,结果返回 |
3.5.4.4 邀请事件奖励
通过邀请安装使用的用户,在触发定义的特定事件,需要通知服务器奖励邀请人,比如等级达成、充值等,调用以下接口
1 2 |
WASocialProxy.inviteEventReward(Activity activity, String platform, String eventName, WACallback<WAResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
platform | String | Y | 平台名称 | 邀请的平台 |
eventName | String | Y | 事件名称 | 事件名称必须后台已经定义 |
callback | WACallback<WAResult> | N | 回调方法,结果返回 |
3.5.5 查询好友
查询指定平台正在玩游戏的好友列表,调用以下接口:
1 2 |
WASocialProxy.queryFriends(Activity activity, String platform, WACallback<WAFriendsResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
platform | String | Y | 平台名称 | 查询好友的平台 |
callback | WACallback<WAFriendsResult> | N | 回调方法,结果返回 |
3.5.6 礼物
赠送礼物、索要礼物接口请参照章节3.5.3 发送请求
3.5.6.1 Facebook查询Graph Object
Facebook平台的礼物就是在Facebook控制台创建的用来当做礼物的Graph Object,查询Facebook后台创建的Graph Object,调用接口
1 2 |
WASocialProxy.queryFBGraphObjects(Activity activity, String objectType,WACallback<WAFBGraphObjectResult> callback) |
Facebook后台新建礼物(Open Graph Object)参考4.2.5 Facebook后台新建Grap Object
参数说明
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
objectType | String | Y | Object类型 | Facebook控制台预定义,格式为“命名空间:对象类型” |
callback | WACallback<WAFBGraphObjectResult> | N | 回调方法,结果返回 |
3.5.6.2 Facebook查询收到的礼物
Facebook用户查询好友赠送给自己的礼物,调用以下接口:
1 2 |
WASocialProxy.fbQueryReceivedGifts(Activity activity, WACallback<WAFBGameRequestResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
callback | WACallback<WAFBGameRequestResult> | N | 回调方法,结果返回 |
3.5.6.3 Facebook查询向自己索要礼物的请求
Facebook用户查询好友向自己索要礼物的请求,调用以下接口:
1 2 |
WASocialProxy.fbQueryAskForGiftRequests(Activity activity, WACallback<WAFBGameRequestResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
callback | WACallback<WAFBGameRequestResult> | N | 回调方法,结果返回 |
3.5.6.4 Facebook删除请求
Facebook中用户收到的礼物,好友向自己索要礼物的请求都是一个Facebook的请求,收取礼物和拒绝赠送礼物的时候,需要删除掉对应的请求。删除请求调用以下接口:
1 2 |
WASocialProxy.fbDeleteRequest(Activity activity, String requestId, WACallback<WAResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
requestId | String | Y | 请求id | |
callback | WACallback<WAResult> | N | 回调方法,结果返回 |
3.5.7 Game Service(已停止维护更新)
3.5.7.1 登录Game Service
登录Game Service调用接口:
1 2 |
WASocialProxy.signInGame(Activity activity, String platform, WACallback<WAPlayer> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用的Activity | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持Google平台 |
callback | WACallback<WAPlayer> | N | 回调方法,结果返回 | WAPlayer是平台返回的玩家 |
3.5.7.2 登出Game Service
登出Game Service调用以下接口:
1 2 |
WASocialProxy.signOutGame (String platform) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
platform | String | Y | 要登出的平台 | 平台类型在WAConstants类中定义,目前支持Google平台 |
3.5.7.3 成就解锁
标准类型的成就是一次性解锁,解锁调用以下接口:
1 2 |
WASocialProxy.unlockAchievement(String platform, String id, WACallback<WAUpdateAchievementResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持Google平台 |
id | String | Y | 成就id | |
callback | WACallback<WAUpdateAchievementResult> | N | 回调方法,结果返回 |
3.5.7.4 分步成就进度增加
分步类型成就是可以分步进行解锁的,进度增加会在原来的进度上完成递增,无需知道当前的进度,进度递增调用以下接口:
1 2 |
WASocialProxy.increaseAchievement(String platform, String id, int numSteps, WACallback<WAUpdateAchievementResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持Google平台 |
id | String | Y | 成就id | |
numSteps | int | Y | 递增的步数 | 0<numSteps<成就总分步数 |
callback | WACallback<WAUpdateAchievementResult> | N | 回调方法,结果返回 |
3.5.7.5 分步成就进度设置
分步类型成就除了可以使用3.5.7.4 分步成就进度增加实现进度递增外,也可以使用以下接口直接设置进度:
1 2 |
WASocialProxy.setStepsAchievement(String platform, String id, int numSteps,WACallback<WAUpdateAchievementResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持Google平台 |
id | String | Y | 成就id | |
numSteps | int | Y | 成就步数 | 当且仅当:已完成进度<numSteps<成就总分步数 是有效 |
callback | WACallback<WAUpdateAchievementResult> | N | 回调方法,结果返回 |
3.5.7.6 显示隐藏成就
隐藏状态下的成就不能解锁,需要显示后才能解锁操作,显示隐藏的成就调用以下接口:
1 2 |
WASocialProxy.revealAchievement(String platform, String id,WACallback<WAUpdateAchievementResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持Google平台 |
id | String | Y | 成就id | |
callback | WACallback<WAUpdateAchievementResult> | N | 回调方法,结果返回 |
3.5.7.7 展示成就列表
展示成就列表是打开自带的页面,调用以下接口:
1 2 |
WASocialProxy.displayAchievement(Activity activity, String platform, WACallback<WAResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | 调用Activity | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持Google平台 |
callback | WACallback<WAResult> | N | 回调 | 成就页面登出账号后,会在onError中得到一个code值为CODE_GAME_NEED_SIGN=-605的错误回调,在这里可以更新UI |
3.5.7.8 加载成就列表
通过以下接口,可以加载所有成就的列表:
1 2 |
WASocialProxy.loadAchievements(String platform boolean forceReload, WACallback<WALoadAchievementResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持Google平台 |
forceReload | boolean | Y | 是否强制重新加载 | |
callback | WACallback<WALoadAchievementResult> | N | 回调方法,结果返回 | 结果实体类WALoadAchievementResult中含有成就数据List对象,成就数据实体类为WAAchievement |
WAAchievement字段说明:
参数名 | 类型 | 说明 | 备注 |
---|---|---|---|
achievementId | String | 成就id | |
name | boolean | 成就名称 | |
type | int | 成就类型 | 类型取值为WAAchievement定义的静态变量,只能是 TYPE_STANDARD或 TYPE_INCREMENTAL |
state | int | 成就状态 | 状态取值为WAAchievement定义的静态变量,只能是STATE_UNLOCKED, STATE_REVEALED, 或 STATE_HIDDEN |
currentSteps | int | 当前进度 | 仅对分步成就有意义,即type取值为TYPE_INCREMENTAL时 |
description | String | 成就详细描述 | |
formattedCurrentSteps | String | 用户解锁成就已经完成的步数 | 格式化为当地语言的字符串 |
formattedTotalSteps | String | 解锁成就还需要完成的步数 | 格式化为当地语言的字符串 |
lastUpdatedTimestamp | long | 上一次更新时间 | |
player | WAPlayer | 玩家信息 | |
revealedImageUri | Uri | 隐藏图标 | |
totalSteps | int | 总步数 | 仅对分步成就有意义,即type取值为TYPE_INCREMENTAL时 |
unlockedImageUri | Uri | 未解锁图标 | |
xpValue | long | XP值 |
3.5.7.9 判断是否已经登录Game Service
判断当前是否已经登录了Game Service,调用以下接口,接口返回boolean类型结果,true为已登录,false为未登录
1 2 |
WASocialProxy.isGameSingedIn(String platform) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持VK平台 |
3.5.8 游戏社区
3.5.8.1 通过Group id查询Group详情
通过Group id查询Group详情,调用以下接口
1 2 |
WASocialProxy.getGroupByGid(Activity activity, String platform, String [] gids, String extInfo, WACallback<WAGroupResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | Activity对象 | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持VK平台 |
gids | String[] | Y | 需要查询的group id列表 | |
callback | WACallback<WAGroupResult> | N | 回调方法,结果返回 | 结果实体类WAGroupResult中含有Group数据Map对象,Group数据实体类为WAGroup |
WAGroup字段说明:
参数名 | 类型 | 说明 | 备注 |
---|---|---|---|
gid | String | group id | |
name | String | group名称 | |
screen_name | String | group screen_name | |
is_closed | int | 是否封闭 | 0 – 开放 1 – 封闭 2 – 私有 |
is_admin | int | 当前用户是否管理员 | 0 – 非管理员 1 – 管理员 |
admin_level | int | 管理员级别 | 1 – 主席 2 – 编辑 3 – 管理员 |
is_member | int | 当前用户是否该group成员 | 0 – 不是group的成员 1 – 是group的成员 |
type | String | 类型 | group — group, page — public page event — event |
photo | String | group图片 | |
photo_medium | String | group图片,中尺寸 | |
photo_big | String | group图片,大尺寸 | |
city | WAPlace | 城市 | |
country | WAPlace | 国家 | |
place | WAPlace | 地址 | |
description | String | group描述 | |
wiki_page | String | wiki地址 | |
members_count | int | 成员数 | |
can_post | int | 是否可以发布文章 | 0 – 不可以发布 1 – 可以发布 |
can_see_all_post | int | 是否可见所有文章 | 0 – 不可见 1 – 可见 |
activity | String | Activity | |
status | String | 状态 | |
contacts | String | 联系信息 | |
platform | String | 平台 |
3.5.8.2 查询当前应用关联的Group
一个应用只能关联一个Group,通过以下接口可以查询当前应用关联的Group详细信息:
1 2 |
WASocialProxy.getCurrentAppLinkedGroup(Activity activity,, String platform, String extInfo, WACallback<WAGroupResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | Activity对象 | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持VK平台 |
extInfo | String | N | 额外数据信息 | 扩展字段,根据各个平台需要定义 |
callback | WACallback<WAGroupResult> | N | 回调方法,结果返回 | 结果实体类WAGroupResult中含有Group数据Map对象,Group数据实体类为WAGroup |
3.5.8.3 查询当前用户已加入的Group
查询当前用户加入的Group详细信息调用以下接口:
1 2 |
WASocialProxy.getCurrentUserGroup(Activity activity, String platform, String extInfo, WACallback<WAGroupResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | Activity对象 | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持VK平台 |
extInfo | String | N | 额外数据信息 | 扩展字段,根据各个平台需要定义 |
callback | WACallback<WAGroupResult> | N | 回调方法,结果返回 | 结果实体类WAGroupResult中含有Group数据Map对象,Group数据实体类为WAGroup |
3.5.8.4 查询当前用户是否Group的成员
查询当前的用户是否为指定的某个Group的成员,调用以下接口:
1 2 |
WASocialProxy.isCurrentUserGroupMember(Activity activity, String platform, String groupId, String extInfo, WACallback<Boolean> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | Activity对象 | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持VK平台 |
groupId | String | Y | Group id | |
extInfo | String | N | 额外数据信息 | 扩展字段,根据各个平台需要定义 |
callback | WACallback<WAGroupResult> | N | 回调方法,结果返回 | 结果实体类WAGroupResult中含有Group数据Map对象,Group数据实体类为WAGroup |
3.5.8.5 加入Group
加入指定的某个Group,调用以下接口:
1 2 |
WASocialProxy.joinGroup(Activity activity, String platform, String groupId, String extInfo, WACallback<WAResult> callback) |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | Activity对象 | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持VK平台 |
groupId | String | Y | Group id | |
extInfo | String | N | 额外数据信息 | 扩展字段,根据各个平台需要定义 |
callback | WACallback<WAResult> | N | 回调方法,结果返回 | 返回成功的结果只代表请求发送成功,但是未必加入成功,对于封闭的和私有的Group是不能加入的 |
3.5.8.6 进入Group详情页
进入Group的详情页面,调用以下接口:
1 2 |
WASocialProxy.openGroupPage(Activity activity, String platform, String groupUri, String extInfo) |
如果客户端已经安装platform指定平台的app客户端,将会进入到app客户端详情页面,如果没有安装,则打开网页详情页。
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
activity | Activity | Y | Activity对象 | |
platform | String | Y | 平台类型 | 平台类型在WAConstants类中定义,目前支持VK平台 |
groupUri | String | Y | 打开Group的uri | VK平台为screen_name字段值 |
extInfo | String | N | 额外数据信息 | 扩展字段,根据各个平台需要定义 |
3.6 Android6.0 权限管理
Android6.0的权限管理进行更新,敏感权限需要运行时授权,当buildVersion 在23及以上版本时,在AndroidManifest.xml中配置的敏感权限声明,当App运行在android6.0及以上的系统时,配置的授权是无效的。
SDK提供了权限的检查与授权接口,在程序运行时,调用以下接口进行权限自检:
1 2 |
WACommonProxy.checkSelfPermission(Activity activity, String permission, WAPermissionCallback callback) |
在调用上面权限自检接口的Activity中的onRequestPermissionsResult()方法中调用已下接口,完成权限自检和授权的传递。
1 2 |
WACommonProxy.onRequestPermissionsResult(@NonNull Activity activity, int requestCode, String[] permissions, int[] grantResults) |
四、第三方配置
4.1 Google相关配置
如果不需要Google渠道,请忽略此章节
后台配置请参考第三方后台配置—Android版公共配置流程。
4.1.1 Google基本配置
在values/strings.xml中添加公钥字符串资源:
1 2 3 |
<!-- Google In-app billing public key --> <string name="google_base64EncodedPublicKey">YOUR_GOOGLE_PUBLIC_KEY</string> |
获取Google public key
请参考第三方后台配置—Android版1.7 获取Google Play Public Licensing Key。
在values/strings.xml中添加服务器OAuth client ID(即Google后台Web application 类型的OAuth client ID)
1 2 3 |
<!-- Google Web application type OAuth 2.0 client ID --> <string name="google_server_client_id">YOUR_SERVER_OAUTH_CLIENT_ID</string> |
4.1.2 Google Game Service配置
如果不需要使用Google Game Service,可以忽略此章节
使用Google Game Service服务,还需要在AndroidManifest.xml.xml中application标签下添加以下配置:
1 2 3 4 |
<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="YOUR_APP_ID" /> |
说明:字符资源的值是Google Game Service的APP ID,需要Google开发者控制台创建游戏服务获得。请参考第三方后台配置—Android版1.6 添加Google Game Service成就。
4.1.3 Google代码混淆配置
1 2 3 4 5 6 7 |
-dontwarn com.google.** -keep class com.google.android.gms.** { *; } -keep class com.google.firebase.** { *; } -keep class com.android.vending.billing.** { *; } |
4.1.4 Google获取SHA-1指纹
具体配置请参考第三方后台配置—Android版1.1 配置应用程序证书指纹。
获取程序签名文件SHA-1命令如下:
1 2 |
keytool -exportcert -alias <release_key_alias> -keystore <path-to-production-keystore> -list -v |
其中<release_key_alias>是证书别名,<path-to-production-keystore>是证书的地址。
4.2 Facebook相关配置
如果不需要Facebook渠道,请忽略此章节
4.2.1 Facebook基本配置
在strings.xml中添加Facebook APPId声明:
1 2 |
<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string> |
在AndroidManifest.xml中添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!-- Facebook Start --> <provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider${YOUR_FACEBOOK_APP_ID}" android:exported="true" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <!-- 开启/关闭 Facebook数据收集功能,默认关闭,使用默认配置可不配置此项 --> <meta-data android:name="com.wa.sdk.track.ENABLE_FACEBOOK" android:value="true" /> <!-- Facebook End --> |
注意:
1、string的name必须为facebook_app_id,不可更改,值为Facebook app id
2、将FacebookContentProvider后面的${YOUR_FACEBOOK_APP_ID}替换成你的Facebook app id。获取方式请参考第三方后台配置—Android版2.1 Facebook基础配置。
4.2.2 Facebook代码混淆配置
1 2 3 4 |
-keep class com.facebook.** { *; } -keep class bolts.** { *; } |
4.2.3 Facebook登录权限对照表
权限 | WAConstants中定义 | 类型 | 权限取值 | 说明 |
---|---|---|---|---|
读取用户配置 | FB_PERMISSION_PUBLIC_PROFILE | read | public_profile | |
读取好友列表 | FB_PERMISSION_USER_FRIENDS | read | user_friends | |
发布权限 | FB_PERMISSION_PUBLISH_ACTIONS | write | publish_actions | 通过api层分享需要这个权限 |
4.2.4 Facebook获取程序签名KeyHash
使用下面代码片段获取程序签名KeyHash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public void showHashKey(Context context) { try { PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); //Your package name here for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.e("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { // do nothing } catch (NoSuchAlgorithmException e) { // do nothing } } |
4.2.5 Facebook后台新建Grap Object
具体配置请参考第三方后台配置—Android版2.4 Facebook后台新建礼物。
WAFBGraphObject 中的字段与新建Object字段对照(“-”标识系统自动生成)
WAFBGraphObject | 新建Object |
---|---|
id | – |
title | og:title |
type | – |
isScraped | – |
createdTime | – |
description | og:description |
imageUrl | og:image |
data | 所有自定义的的字段Map,key为字段名,不包含namespace,比如新建com_ghw_sdk:gift_type字段,在data Map中namespace 为com_ghw_sdk,key为gift_type。 |
4.3 AppsFlyer相关配置
如果不需要AppsFlyer渠道,请忽略此章节
4.3.1 AppsFlyer基本配置
在AndroidManifest.xml中添加以下声明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!-- AppsFlyer SDK START --> <!-- 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="GOOGLE" /> <!-- 开启/关闭 AppsFlyer数据收集功能,默认开启,使用默认配置可不配置此项 --> <meta-data android:name="com.wa.sdk.track.ENABLE_APPSFLYER" android:value="true" /> <!-- AppsFlyer SDK END --> |
4.3.2 AppsFlyer代码混淆配置
1 2 3 4 5 6 7 8 |
-dontwarn com.google.android.gms.** -dontwarn com.appsflyer.** # 排除AppsFlyer本身的Lib -keep class com.appsflyer.** { *; } -keep class android.support.** { *; } |
4.4 Chartboost相关配置
如果不需要Chartboost渠道,请忽略此章节
4.4.1 Chartboost基本配置
在AndroidManifest.xml中application标签下添加声明
1 2 3 4 5 6 7 8 9 10 11 |
<!-- Chartboost SDK START --> <!-- Chartboost app id --> <meta-data android:name="com.wa.sdk.track.CHARTBOOST_APP_ID" android:value="55b74c74c909a66b8af388a7" /> <!-- Chartboost app signature --> <meta-data android:name="com.wa.sdk.track.CHARTBOOST_APP_SIGNATURE" android:value="2b7b5cbc8c5d0429c9498dd3484d84fb4974a206" /> <!-- 开启/关闭 Chartboost数据收集功能,默认关闭,使用默认配置可不配置此项--> <meta-data android:name="com.wa.sdk.track.ENABLE_CHARTBOOST" android:value="true" /> <!-- Chartboost SDK END --> |
特别提醒:以上所有配置的android:name字段值都必须和文档一致,android:vlaue值由各应用申请的资源而定。
4.4.2 Chartboost代码混淆配置
1 2 3 4 5 |
-keepattributes SourceFile,LineNumberTable -dontwarn com.google.android.gms.** -keep class com.chartboost.sdk.** |
4.5 VK相关配置
如果不需要使用VK渠道功能,可以忽略此章节
4.5.1 VK基本配置
在values/strings.xml中添加加以下字符串资源:
1 2 3 |
<!-- VK app id --> <integer name="com_vk_sdk_AppId">YOUR_APP_ID</integer> |
说明:APP_ID需要在VK的开发者管理后台创建应用后获得。
4.5.2 VK代码混淆配置
1 2 |
-keep class com.vk.sdk.** { *; } |
五、附录
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_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_GOOGLE | Google平台 | |
CHANNEL_FACEBOOK | Facebook平台 | |
CHANNEL_VK | VK | VK平台 |
5.1.3 请求类型说明
变量名 | 取值值 | 说明 | 备注 |
---|---|---|---|
REQUEST_INVITE | INVITE | 邀请 | |
REQUEST_REQUEST | REQUEST | 普通请求 | |
REQUEST_GIFT_SEND | GIFT_SEND | 发送礼物 | objectId不能为空 |
REQUEST_GIFT_ASK | GIFT_ASK | 索要礼物 | objectId不能为空 |
说明:vk平台测试游戏邀请功能需要申请权限,可以把请求类型设置成REQUEST_REQUEST来测试普通邀请,待申请权限通过后改成REQUEST_INVITE来测试。关于vk邀请功能的业务流程图如下:
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_AMOUNT | iapName | String | 道具名称 |
IAP_NAME | 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 | 状态 |
CUSTOM_PARAMETER | user-define-* | * | 自定义字段 |