Uncategorized

WINGSDK_Android使用指南(v3.9.1)

wapublisher No Comments

对接完成之后可以使用工具进行校验:点击下载
本工具用于协助对接完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、Game Service,游戏互动更简单;
4、社区,提高玩家的积极性和互动。

1.5 应用墙模块

应用墙模块,提供应用、游戏的推广下载,引导用户安装。
注意:此模块会对应用商店上架造成一定的风险,请酌情使用。

1.6 推送

WINGSDK推送功能,可以向客户端推送消息,通过简单几步配置即可使用。

1.7 广告

WINGSDK广告功能,可以向玩家展示视频广告,并且可以实现奖励机制。

1.8. 智能客服 AIHelp

WINGSDK智能客服功能,集成机器人、人工客服,FAQ等功能。

1.9.隐私政策

为了遵守欧盟以及Google等第三方的一些关于用户隐私的法律法规,WINGSDK实现了一套简单的用户隐私政策流程。分为两种类型,一种是自动的,针对的是对接了登录窗口方式的CP,这种情况CP无需接入任何新的接口;一种手动的,针对的是对接了接口登录的CP,这种情况CP需要对接新的接口,具体接口参考隐私政策接口章节。

1.10. 用户中心

WINGSDK用户中心功能,可以向玩家展示充值中心账号、初始密码、信息内容。

二、快速集成

2.0.集成需知

目前各方机构对用户隐私比较敏感,很多权限已经被禁止使用,比如google不允许同时收集谷歌广告id以及Imei。为了确保安全过审,建议通过以下配置禁止Imei获取。具体如下:

1)AndroidManifest.xml中关闭

默认情况下,WINGSDK内部在可以获取到权限的情况下会去获取谷歌广告Id、Imei,可以在AndroidManifest.xml中<manifest><application>标签下配置开关明确禁止获取Imei,这样WINGSDK将不会再获取Imei号。
获取Imei(默认关闭):

2)去掉Imei权限
获取imei需要READ_PHONE_STATE这个权限, google可能是根据这个权限来判断应用中是否有获取imei的行为。

如果应用要上架谷歌应用市场需要在AndroidManifest.xml中去掉该权限。

2.1 环境配置要求

  • Android API 15及以上版本

  • jdk1.7及以上版本。

  • compileSdkVersion 26及以上版本

2.2 集成SDK到项目

WINGSDK基于gradle提供了多种集成方式:Gradle自动集成、手动集成、Eclipse项目集成、命令行集成,可以根据需要选择其中任意一种方式。
第三方SDK依赖关系如下表

第三方SDK 版本
GOOGLE com.google.android.gms:play-services-base:17.4.0
com.google.android.gms:play-services-auth:18.1.0
com.google.android.gms:play-services-games:20.0.1
com.google.android.gms:play-services-ads-identifier:17.0.0
com.android.billingclient:billing:3.0.0
com.google.android.play:core:1.8.0
Google Firebase com.google.firebase:firebase-analytics:17.5.0
com.google.firebase:firebase-messaging:20.2.4
FACEBOOK 7.1.0
APPSFLYER 5.4.3
CHARTBOOST 8.1.0
VK 1.6.9
Twitter 3.3.0
AIHELP 1.7.4.2
picasso 2.71828
Instagram 更新至2018年12月11日(无版本号)
华为海外 com.huawei.hms:hwid:5.0.1.301
com.huawei.hms:iap:5.0.2.300
com.huawei.hms:hianalytics:5.0.4.301

2.2.1 Gradle自动集成

在项目目录下的build.gradle文件添加以下配置:

注意:
1)部分项目中可能只有一个build.gradle文件;

在程序module下面的build.gradle文件的dependencies内增加依赖配置;

注意:
1)部分项目中可能只有一个build.gradle文件;
2)以上的“必选”项目必须引入,“可选”项目可根据需求引入。
3) 其中x.x.x为各个模块的具体版本号,随SDK版本升级会发生改变,各个版本对应的渠道包版本请参考:https://admin.wingsdk.com/developers/pack_config.do 在这个地址页面,也可以通过选择版本和所需要的渠道,一键生成依赖脚本配置。

2.2.2 手动集成 (供参考)

2.2.2.1 打包配置页面下载SDK包

打包配置页面地址在上面章节查找。下载页面如下图所示:
android-手动集成SDK包
android-手动集成SDK包

2.2.2.2 导入SDK包到项目中

打开项目,在菜单“File→New→New Module”
导入SDK包到项目
打开新建Module页面,选择“Import .JAR/.AAR Package”项,下一步
导入SDK包到项目
选择下载好的SDK .AAR包,导入
导入SDK包到项目
此时项目的目录将会多了一个上面新建的Module,然后将Module关联到程序Module中,关联方法有两种:
第一种:直接在程序Module中的build.gradle的dependencies下添加代码(单引号内部为要关联的Module名称,以冒号“:”开头)

第二种:选中程序Module,鼠标右键→Open Module Settings(或F12),打开程序Module设置面板
导入SDK包到项目
在打开的Module设置窗口中选中程序Module,定位到“Dependencies”选项卡,点击“+”符号添加依赖,选择“Module Dependency”,
导入SDK包到项目
弹出Module选择窗口,在这个窗口中会展示出所有的未关联的Module
导入SDK包到项目
选中要关联的Module,OK→OK完成配置

2.2.2.3 手动集成AAR注意事项

1)wa-sdk-base AAR包(必选)
2)wa-sdk-core AAR包(必选)
需要依赖androidx.legacy:legacy-support-v4

3)wa-sdk-appsflyer AAR包(可选)
需要依赖AppsFlyer AAR包,5.3.0版本

4)wa-sdk-chartboost AAR包(可选)
5)wa-sdk-facebook AAR包(可选)
需要依赖Facebook SDK,6.5.1版本

6)wa-sdk-google AAR包(可选)
需要依赖Google Service相关包,版本为16.0.1

7)wa-sdk- vk AAR包(可选)
需要依赖VK SDK包,版本1.6.9

8)wa-sdk-webpay AAR包(可选)
9) wa-sdk-push AAR包(可选)
需要依赖Google Firebase相关包,版本为15.0.2

10) wa-sdk-twitter AAR包(可选)
需要依赖Twitter sdk,版本3.3.0

11) wa-sdk-instagram AAR包(可选)
12) wa-sdk-ad AAR包(可选)
13) wa-sdk-aihelp AAR包(可选)
需要依赖aihelp sdk,版本1.7.2.2

说明:以上的“必选”项目必须引入,“可选”项目可根据需求引入

2.2.3 Eclipse项目集成(供参考)

如果是Eclipse项目,可以利用Android Studio的 “Import Project” 把Eclipse项目转变成Android Studio项目。如果坚持使用Eclipse,可以使用以下方式进行SDK集成

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 配置文件

如下图:
导入SDK包到项目
说明:以上目录不是硬性规定的,可以自定义,只需要在后续步骤中正确设置即可

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)插件声明

2)仓库地址声明

注意:以上的WING_SDK_REPOSITORY_URL为WINGSDK仓库地址:http://repo.wingsdk.cn:8081/repository/winga-group/,地址可能有变,请留意最新的对接文档。
3)Android编译配置声明

说明:除了以上必要配置外,Android的相关配置还可以添加签名、代码混淆等配置
注意:上面的sourceSet中的内容必须跟你在项目目录下的文件类型对应起来
4) 依赖配置声明


注意:
1)其中x.x.x为各个模块的具体版本号,随SDK版本升级会发生改变,各个版本对应的渠道包版本请参考:https://admin.wingsdk.com/developers/pack_config.do在这个地址页面,也可以通过选择版本和所需要的渠道,一键生成依赖脚本。

2.2.4.6 编译

打开命令行,进入项目目录,执行以下命令:
Windows:

MAC/Linux:

这里的gradle.bat是下载的gradle编译工具(如果没有配置环境变量,请使用绝对路径),初始化成功后,将会得到SUCCESS字样,如下图:
导入SDK包到项目中
此时项目目录下会多了一些目录和文件
接下来执行clean task,清理项目
Windows:

MAC/Linux:

最后一步是执行build task,进行编译
Windows:

MAC/Linux:

编译成功后将看到BUILD SUCCESSFUL字样,如下图:
导入SDK包到项目中
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标签下添加以下设置。不同的应用配置的参数值不相同,需要申请相应资源

注意:以上配置中android:name必须保持一致,android:value根据CP应用申请的资源而定。

注:WINGSDK中使用到的权限
1)SDK内部自动添加的权限(普通权限)

2)CP选配权限(危险权限) 如果应用上Google推荐,需注意Google推荐位需知

3)CP接入aihelp必备权限

2.3.1.2 Activity结果传递配置

在所有使用到SDK接口的Activity的onActivityResult方法中增加以下代码:

2.3.2 SDK初始化

调用下面接口对SDK进行初始化:

注意:SDK初始化必须在第一个Activity的onCreate()方法中调用,强烈建议在UI线程中调用。

2.4 登录

2.4.1 使用登录窗口

2.4.1.1 调用登录窗口

SDK内置了一个包含所有支持的登录方式的一个对话框,通过调用以下接口显示对话框:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用接口的Activity
enableCache boolean Y 是否启用登录缓存,true为启用,false为关闭 如果开启登录缓存,那么调用这个接口的时候会看是否有登录记录,如果有,不会显示登录方式选择对话框,直接使用上一次的登录方式登录。
callback WACallback<WAloginResult> N 回调,用来返回登录结果 2.4.3 处理登录结果

注意:使用登录窗口时,点击图标登录SDK自动弹出加载框,无需再次添加加载框。

2.4.1.2 清除登录窗口的缓存

使用登录窗口对话框进行登录,如果启用了缓存,SDK会缓存当前登录方式,下一次在启用缓存的前提下使用登录窗口登录,会自动使用上一次登录方式登录,不再弹出登录窗口。清除掉缓存后,可以重新弹出登录窗口,清除缓存调用以下接口:

2.4.2 使用接口登录

如果CP有自己的登录窗口,可以使用以下登录接口:

参数名 类型 必填 说明 备注
activity Activity Y 调用接口的Activity
platform String Y 登录账户的平台类型 在WAConstants类中定义,详情请看5.1.2 平台取值
callback WACallback<WAloginResult> N 回调,用来返回登录结果 2.4.3 处理登录结果
extra String N 额外信息 Facebook自定义权限登录、应用内登录等高级登录设置请参考3.3 登录高级设置相关章节

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 用户登出

退出游戏的时候,必须执行登出操作。用户登出调用以下接口:

注意:调用logout接口后,serverId、gameUseId、level字段值会被重置,如果需要保持相应字段的值不重置,需要重新设置相应字段的值,参考3.1 公共参数设置

2.5 支付

WINGSDK支付流程如下:
支付流程

2.5.1 初始化支付

初始化支付,SDK会对所有已经支持的支付平台做初始化,初始化调用接口

参数说明:

参数名 类型 必填 说明 备注
context Context Y Context对象
callback WACallback<WAResult> N 回调方法,返回初始化结果 初始化成功才能使用支付

支付的初始化在调用Activity的onCreate中初始化。

2.5.2 查询库存商品列表

通过查询库存商品列表,可以获取所有可以购买的库存商品,查询库存调用接口

注意:这里返回的库存商品信息是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)直接弹出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声明中添加如下语句:

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。

参数说明:

参数名 类型 必填 说明 备注
context Context Y 上下文

2.5.5 资源释放

不再使用支付时需要对资源进行释放,可以清理所有支付渠道所占用的资源,在调用接口Activity的onDestroy方法内调用以下接口

示例:

2.5.6 查询商品本地价格

通过查询商品信息,可以获取库存商品的本地价格,查询商品本地价格调用接口

注意:这个接口需要在查询库存商品(WAPayProxy.queryInventory)成功回调后使用。

参数说明:

参数名 类型 必填 说明 备注
channel String Y WAConstants类中定义的渠道类型,比如谷歌渠道传WAConstants.CHANNEL_GOOGLE
callback WACallback<Map<String,WAChannelProduct>> Y 回调方法,结果返回,如果未获取到谷歌商品本地化价格信息,Map返回空集合 Map中的键是库存商品id(sku)

WAChannelProduct实体类说明:

Get方法名 返回值类型 不为空 说明 备注
getChannel() String Y 渠道类型
getSku() String Y 库存商品id
getPriceCurrencyCode() String Y 本地货币类型 比如美元返回USD
getPrice() String Y 本地货币类型换算的价格(格式化) 比如美元返回US$1.17
getPriceAmount() Double Y 本地货币价格(数值类型)

2.6 数据收集

使用WINGSDK数据收集接口配合大数据平台,可以轻松统计玩家习惯以及充值等行为,为游戏的市场营销提供数据依据。WINGSDK数据收集使用在游戏的过程中打点的方式,如图所示:
iOS-数据收集流程图
1. 以上流程图中涉及到的几个接口是有时序要求的,请参考流程图中的逻辑步骤进行设置:setServerId、setGameUserId、setLevel、setNickname、ghw_user_import事件、ghw_user_create事件
2. 其它的事件如ghw_level_achieved、ghw_user_info_update、ghw_gold_update等请根据对应业务逻辑,在对应业务发生时调用接口发送。

序号 事件(接口)名称 事件描述 事件作用 建议触发点 备注
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类对象,并设置数据收集的相关参数:

2.6.1.2 发送数据

调用第一步创建WAEvent对象的trackEvent(Context)方法发送数据

或者调用以下接口发送:

2.6.1.3 WAEvent.Builder方法介绍

  • 设置默认的事件名称

参数:
eventName事件名称

  • 设置渠道自定义事件名称,针对某个渠道需要设置特定的事件名称

参数:
eventChannel 渠道名称
eventName 事件名称

注意:
1)AppsFlyer预定义的事件名称和WINGSDK预定义的事件名称已经做了映射(例如: ghw_login <-> af_login),用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。

  • 设置默认累加值

参数:
value 累加统计的数值

  • 设置渠道自定义累加值,针对某个渠道需要设定特定的累加值

参数:
eventChannel 渠道名称
value 累加统计的数值

注意:
1)如果不进行设置,所有的渠道将采用设置的默认值。

  • 设置事件默认的参数/值,每次可添加多个

参数:
eventValues 参数/值Map

  • 添加一个事件默认的参数/值,每次添加一个

参数:
paramName 参数名称
paramValue 参数值

  • 设置事件渠道自定义的参数/值,每次可添加多个,针对某个渠道需要设定特定的参数或者值

参数:
eventChannel 渠道名称
eventValues参数/值Map

注意:
1)AppsFlyer预定义的参数名称和WINGSDK预定义的参数名称已经做了映射,用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。

  • 设置事件渠道自定义的参数/值,每次添加一个,针对某个渠道需要设定特定的参数或者值

参数:
eventChannel 渠道名称
paramName 参数名
paramValue 参数值

注意:
1)AppsFlyer预定义的参数名称和WINGSDK预定义的参数名称已经做了映射,用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。

  • 禁用渠道,禁用后的渠道不会发送数据

参数:
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 自定义事件

说明:支持自定义事件的统计
例如:

2.7.隐私政策

如果CP对接的登录方式是接口登录方式,则可以使用以下几个接口来实现隐私政策流程,具体流程可参考下图。
图片1

2.7.1.获取隐私政策url

WINGSDK有自己的隐私政策,调用以下接口获取到隐私政策url(隐私政策内容为html页面):

参数说明:

参数名 类型 必填 说明 备注
context context Y 上下文

返回值说明:

类型 必填 说明 备注
String Y 隐私政策html页面对应的url

2.7.2.获取隐私政策更新时间

隐私政策更新需要重新显示时可以调用以下接口获取最新隐私政策更新时间,和上一次保存的时间戳作对比,从而确定是否需要展示:

参数说明:

参数名 类型 必填 说明 备注
context context Y 上下文

返回值说明:

类型 必填 说明 备注
String Y 最新隐私政策更新的时间戳

2.7.3.显示隐私政策详情UI

当需要显示隐私政策详情时,可以调用以下接口显示出隐私政策详情界面:

参数说明:

参数名 类型 必填 说明 备注
context context Y 上下文
callback WACallback N 回调方法,窗口关闭时可以在onCancel中得知结果

调用示例,当窗口关闭时会回调onCancel接口。

2.8 代码混淆配置

打包apk混淆代码配置中增加以下配置

三、高级功能

3.1 公共参数设置

WINGSDK包括serverId等公共参数,这些参数主要用于数据跟踪和统计。
公共参数必须严格按照文档进行设置,在后续的接口中会使用到这些公共的参数,没有按照要求配置会导致部分接口调用失败。

3.1.1 设置服务器ID

当用户的服务器ID发生改变时,需要调用设置服务器ID接口设置新的服务器ID,例如每次进入服务器

注意:设置服务器id的操作在每次选服后都需要进行,必须在调用其他接口前设置。

3.1.2 设置gameUserId

当gameUserId发生改变时,需要调用设置gameUserId接口设置新的gameUserId,例如成功登录账号后、切换账号成功后

注意:必须在调用其他接口前设置。

3.1.3 设置用户等级Level

当用户角色等级发生改变时,需要调用设置等级接口设置新的等级,例如开始进入游戏、等级提升等。

注意:第一次进服获取玩家等级或玩家等级变更后,需要及时调用这个接口设置玩家等级,必须在调用其他接口前设置。

3.1.4 设置游戏玩家昵称

设置游戏玩家的昵称,调用接口:

注意:
1.当玩家登录、登出游戏,或修改昵称时,需要及时调用这个接口设置玩家昵称。
2.调用该接口设置昵称后,玩家进行购买时会自动记录昵称到订单信息中。

3.2 调试模式

3.2.1 开启/关闭调试模式

SDK默认是关闭调试模式的,开启调试模式可以在IDE的Logcat中查看到程序的Log信息,方便调试和测试。开启/关闭调试模式调用以下接口。

说明:调用此接口后即可显示Log悬浮窗按钮,不用再另外调用enableLogcat接口,同时如果需要,也可以调用disableLogcat接口隐藏Log按钮。

3.2.2 Logcat工具

SDK提供了调试信息显示的Logcat工具,使用这个工具测试人员不需要IDE环境就可以查看调试信息,工具可以看到应用的调试Log信息(不包含系统打印)。使用前必须确保手机的安全软件没有拦截该程序的悬浮窗口权限,使用调用以下接口:

3.2.2.1 显示Logcat悬浮按钮

说明:如果已经开启了调试模式,不需要调用该接口就可以显示Logcat入口悬浮窗。

3.2.2.2 隐藏Logcat悬浮按钮

3.2.2.3 向Logcat增加一条日志

通过以下接口,开发者可以向Logcat工具中增加一条开发日志,日志会在Logcat工具的Log标签中显示。

3.3 登录高级设置

3.3.1 设置登录流程

使用该接口需注意以下两点:
1)一般来说,如果应用登录的时候有登录方式选择界面,就不需要使用此接口,此接口默认是这种方式(取值为1)。
2)这个接口主要是用来满足以下需求:用户第一次登录是以游客方式进行登录,进到应用里面可以切换其它登录方式,下次登录会直接以切换后的账户进行登录(取值为2)。

登录流程有两种模式,在WAConstants类中定义,取值如下表:

名称 取值 备注
LOGIN_FLOW_TYPE_DEFAULT 1 适用于有登录界面的场景,登录的时候不会重新绑定设备
LOGIN_FLOW_TYPE_REBIND 2 适用于无登录界面的场景,登录时重新将新账号与当前设备绑定,如在游戏中切换账户,切换以后的匿名登录是以切换后的账户进行登录。

3.3.2 应用内登录

SDK平台应用内登录,是指CP本身有自己登录系统,先登录CP后台拿到用户信息后登录SDK后台,应用内登录调用接口2.4.2 使用接口登录,登录平台取值WINGA(CHANNEL_WA),需要将CP后台返回的用户信息按照规定格式(JSON字符串)通过extInfo字段传入。

应用内登录extInfo格式(标准JSON格式字符串)

示例:

字段说明:

字段名 类型 说明 必填 备注
appSelfLogin boolean 应用内登录固定值true Y
puserId String CP用户id Y
accessToken String CP用户Token Y
extInfo String 额外信息 N CP 扩展信息字段,限长512,WING服务器到CP服务器验证登录时原样返回给CP。CP可以添加任意自定义的字段(JSON格式),用于检验登录或扩展其它功能,不超过长度限制即可。

3.3.3 Facebook自定义权限登录

Facebook平台登录默认权限是public_profile,如果需要自定义登录获取的权限,可以调用接口2.4.2 使用接口登录,将需要获取的权限声明按照规定格式(JSON字符串)通过extra字段传入。

Facebook自定义权限登录extra格式(标准JSON格式字符串)

字段说明:

字段名 类型 说明 必填 备注
permissionType String 权限类型 Y read 或write,登录类型只能选一种
permissions JSONArray 权限列表 Y 列表中的权限类型必须跟权限类型声明的类型一致且都是同一类型,否则会登录失败。4.2.3 Facebook登录权限对照表

3.4 账户管理

3.4.1 内置账户管理界面

SDK内置了账户管理界面,在这个界面可以对账户进行管理操作,包括账号绑定、解绑、切换账户、新建账户。

注意:使用内置账户管理界面之前必须先登录
参数说明:

参数名 类型 必填 说明 备注
activity Activity Y Activity对象
callback WAAccountCallback N 回调 onLoginAccountChanged(WALoginResult currentAccount)回调方法,在新建账号、账号切换时会回调这个方法,返回当前登录的账号信息.
onBoundAccountChanged(boolean binding, WABindResult result)回调方法,在绑定账户信息发生变更时会回调这个方法,每次变更都调用一次,CP可根据需要实现相应功能。

3.4.2 绑定第三方平台账户

绑定第三方平台账户,不但可以使用第三方平台账户登录,而且可以防止账户信息丢失,调用以下接口绑定平台账户

参数说明

参数名 类型 必填 说明 备注
activity Activity Y 调用接口的Activity
platform String Y 绑定第三方平台账号的平台类型 取值参考5.1.2 平台取值
extInfo String N 额外信息 预留字段
callback WABindCallback N 回调,用来返回绑定结果

3.4.3 查询已绑定的第三方平台账户

查询当前的账户已经绑定的第三方平台账户列表,调用接口

WAAccountResult字段说明

字段名 类型 说明 备注
code int 结果码 5.1.1 状态码说明
message String 结果消息
accounts List<WAAccount>
platform String 绑定的平台类型 取值参考5.1.2 平台取值
platformUserId String 平台用户id

WAAccount字段说明

字段名 类型 说明 备注
platform String 绑定的平台类型 取值参考5.1.2 平台取值
platformUserId String 平台用户id

3.4.4 解绑第三方平台账户

解绑已经绑定的第三方平台账户,调用接口

注意:有以下情况之一者,不可解绑
1.解绑的账户为SDK平台的;
2.用户没有绑定第三方平台账户的;
3.用户只绑定一个第三方平台账户,且用户没有与当前设备绑定的

3.4.5 切换账户

切换账户可以一键切换登录账户,调用接口

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y
platform String Y 需要切换的账号类型 取值参考5.1.2 平台取值
callback WACallback<WALoginResult> N 回调 用来返回结果

3.4.6 新建账户

新建账户可以新建一个全新的玩家账户。

注意:新建账户后,新的账户会跟当前设备绑定,如果之前的账户没有绑定第三方平台账户,数据将会丢失。

3.4.7 获取账户信息

获取账户信息接口可以获取指定平台的账户信息,调用接口

参数说明:

参数名 类型 必填 说明 备注
platform String Y 平台名称 取值参考5.1.2 平台取值
callback WACallback<WAUser> N 回调 结果中包含平台用户的id,名称,头像等信息

3.5 社交

3.5.1 分享

分享内容到社交平台,支持分享链接、图片、视频、Facebook OpenGraph(Facebook专属),调用接口

参数说明

参数名 类型 必填 说明 备注
activity Activity Y 调用的Activity
platform String Y 分享的平台 分享到哪个平台
shareContent WAShareContent Y 分享内容
shareWithAPI boolean Y 是否通过API分享 如果所选平台支持API分享,设置为true时直接通过API层分享,没有界面。注意:目前不支持这种方式,相关权限已被facebook收回,此值只能为false
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 配图

示例

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 图片描述

示例

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

示例

3.5.1.4 分享OpenGraph (Facebook)

分享OpenGraph shareContent参数传入WAShareOpenGraphContent类型实体类对象。

注意:分享OpenGraph时,platform参数固定值FACEBOOK

WAShareOpenGraphContent字段说明

字段名 类型 必填 说明 备注
action WAShareOpenGraphAction Y action
previewPropertyName Y 预览属性名称

3.5.2 发送请求

向平台的好友发送请求,请求类型包括普通请求、游戏邀请,发送请求调用接口

参数说明

参数名 类型 必填 说明 备注
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 部分请求类型必填
receiptIds List<String> Y 接收者id 根据平台而定,有些平台支持一次发送请求给多个用户,有些平台一次只能发送给一个用户。VK平台一次只能发送一个用户;Facebook平台发送邀请请求此字段传空。
callback WACallback<WARequestSendResult> N 回调 结果返回
extInfo String N 额外数据信息 扩展字段,根据各个平台需要定义

WARequestSendResult字段说明:

参数名 类型 必填 说明 备注
requestId String Y 平台生成的请求id 部分平台会为空或只是网络请求id
recipients String Y 接收者id列表 返回一个或者多个

3.5.3 游戏邀请

发送游戏邀请请求接口请参照章节3.5.2 发送请求

3.5.3.1 查询可邀请好友列表

游戏邀请只能邀请没有玩过当前游戏的好友,称为可邀请好友,查询可邀请的好友调用以下接口:

参数说明

参数名 类型 必填 说明 备注
activity Activity Y 调用的Activity
platform String Y 平台名称 所查询的平台
duration long Y 过滤时间间隔 当过滤时间间隔大于0时,在这个时间间隔内不会出现已经发出邀请的好友
callback WACallback<WAFriendsResult> N 回调方法,结果返回

3.5.3.2 记录邀请成功信息

成功邀请好友后,调用以下接口向服务器记录邀请信息:

参数说明:

参数名 类型 必填 说明 备注
context Context Y 上下文
platform String Y 平台名称 发出邀请的平台
requestId String Y 邀请请求id 没有的渠道可以传空字符(如VK)
recipients Collection<String> Y 邀请成功好友的id列表
callback WACallback<WAResult> N 回调方法,结果返回

3.5.3.3 邀请安装奖励

通过邀请安装使用的用户,安装后需要通知服务器对邀请人进行奖励,需要在游戏启动后登录并且选服后调用以下接口:

注意:这个接口必须在用户登录并且选服后调用。采用platform指定平台方式登录或者绑定platform指定的平台后,均可以调用该接口。

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用的Activity
platform String Y 平台名称 邀请的平台
callback WACallback<WAResult> N 回调方法,结果返回

3.5.3.4 邀请事件奖励

通过邀请安装使用的用户,在触发定义的特定事件,需要通知服务器奖励邀请人,比如等级达成、充值等,调用以下接口

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用的Activity
platform String Y 平台名称 邀请的平台
eventName String Y 事件名称 事件名称必须后台已经定义
callback WACallback<WAResult> N 回调方法,结果返回

3.5.4 查询好友

查询指定平台正在玩游戏的好友列表,调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用的Activity
platform String Y 平台名称 查询好友的平台
callback WACallback<WAFriendsResult> N 回调方法,结果返回

3.5.5 Game Service

3.5.5.1 登录Game Service

登录Game Service调用接口:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用的Activity
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持Google平台
callback WACallback<WAPlayer> N 回调方法,结果返回 WAPlayer是平台返回的玩家

3.5.5.2 登出Game Service

登出Game Service调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
platform String Y 要登出的平台 平台类型在WAConstants类中定义,目前支持Google平台

3.5.5.3 成就解锁

标准类型的成就是一次性解锁,解锁调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
context Context Y Context上下文
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持Google平台
id String Y 成就id
callback WACallback<WAUpdateAchievementResult> N 回调方法,结果返回

3.5.5.4 分步成就进度增加

分步类型成就是可以分步进行解锁的,进度增加会在原来的进度上完成递增,无需知道当前的进度,进度递增调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
context Context Y Context上下文
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持Google平台
id String Y 成就id
numSteps int Y 递增的步数 0<numSteps<成就总分步数
callback WACallback<WAUpdateAchievementResult> N 回调方法,结果返回

3.5.5.5 分步成就进度设置

分步类型成就除了可以使用3.5.6.4 分步成就进度增加实现进度递增外,也可以使用以下接口直接设置进度:

参数说明:

参数名 类型 必填 说明 备注
context Context Y Context上下文
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持Google平台
id String Y 成就id
numSteps int Y 成就步数 当且仅当:已完成进度<numSteps<成就总分步数 是有效
callback WACallback<WAUpdateAchievementResult> N 回调方法,结果返回

3.5.5.6 显示隐藏成就

隐藏状态下的成就不能解锁,需要显示后才能解锁操作,显示隐藏的成就调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
context Context Y Context上下文
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持Google平台
id String Y 成就id
callback WACallback<WAUpdateAchievementResult> N 回调方法,结果返回

3.5.5.7 展示成就列表

展示成就列表是打开自带的页面,调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用Activity
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持Google平台
callback WACallback<WAResult> N 回调 成就页面登出账号后,会在onError中得到一个code值为CODE_GAME_NEED_SIGN=-605的错误回调,在这里可以更新UI

3.5.5.8 加载成就列表

通过以下接口,可以加载所有成就的列表:

参数说明:

参数名 类型 必填 说明 备注
context Context Y Context上下文
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.5.9 判断是否已经登录Game Service

判断当前是否已经登录了Game Service,调用以下接口,接口返回boolean类型结果,true为已登录,false为未登录

参数说明:

参数名 类型 必填 说明 备注
context Context Y Context上下文
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持VK平台

3.5.6 游戏社区

3.5.6.1 通过Group id查询Group详情

通过Group id查询Group详情,调用以下接口

参数说明:

参数名 类型 必填 说明 备注
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.6.2 查询当前应用关联的Group

一个应用只能关联一个Group,通过以下接口可以查询当前应用关联的Group详细信息:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y Activity对象
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持VK平台
extInfo String N 额外数据信息 扩展字段,根据各个平台需要定义
callback WACallback<WAGroupResult> N 回调方法,结果返回 结果实体类WAGroupResult中含有Group数据Map对象,Group数据实体类为WAGroup

3.5.6.3 查询当前用户已加入的Group

查询当前用户加入的Group详细信息调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y Activity对象
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持VK平台
extInfo String N 额外数据信息 扩展字段,根据各个平台需要定义
callback WACallback<WAGroupResult> N 回调方法,结果返回 结果实体类WAGroupResult中含有Group数据Map对象,Group数据实体类为WAGroup

3.5.6.4 查询当前用户是否Group的成员

查询当前的用户是否为指定的某个Group的成员,调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
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.6.5 加入Group

加入指定的某个Group,调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y Activity对象
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持VK平台
groupId String Y Group id
extInfo String N 额外数据信息 扩展字段,根据各个平台需要定义
callback WACallback<WAResult> N 回调方法,结果返回 返回成功的结果只代表请求发送成功,但是未必加入成功,对于封闭的和私有的Group是不能加入的

3.5.6.6 进入Group详情页

进入Group的详情页面,调用以下接口:

如果客户端已经安装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 应用墙

3.6.1 应用墙使用

注意:此模块会对应用商店上架造成一定的风险,请酌情使用。
WINGSKD应用墙包含了应用推荐等功能。使用前必须确保手机的安全软件没有拦截该程序的悬浮窗口权限,使用调用以下接口:

3.6.1.1 显示应用墙入口悬浮按钮

3.6.1.2 隐藏应用墙入口悬浮按钮


注意:
1)应用墙入口悬浮按钮的生命周期依赖显示它的Activity,多个Activity中显示,需要在每个Activity中都调用一次显示悬浮按钮接口;
2)在Activity创建后只需要显示一次,Activity销毁后自动销毁在当前Activity创建的悬浮按钮,但其他Activity中显示的悬浮按钮不会消失。

3.7 推送

WINGSDK推送功能可以给客户端发送推送通知,通过简单几步配置即可使用。
温馨提示:WINGSDK当前版本的推送是基于Firebase实现,国内环境需要VPN才能使用。

3.7.1 Firebase相关配置

在Firebase后台配置后,会得到两个文件,一个是google-services.json,需要研发配置到游戏中去;另一个是Firebase服务器秘钥,需要配置到SDK后台,游戏内无需操作

3.7.1.1 新建Firebase项目

如果您还没有 Firebase 项目,请在Firebase控制台中创建一个。 如果已经有一个与您的移动应用关联的现有 Google 项目,请点击导入项目(Import Google Project)。 否则,请点击新建项目(Create New Project)。

3.7.1.2 新建应用

进入项目,新建应用,输入应用的包名称,新建应用后下载一个 google-services.json 配置文件。可以随时重新下载此文件,如果包名改变必须重新配置并且重新下载google-services.json。将下载的配置文件复制到项目模块文件夹,通常为 app/。
注:如果您有多个CPS渠道包含有已定义的不同包名称,则必须在 Firebase console 中将每个应用添加到您的项目。

3.7.1.3 在WINGSDK后台配置Firebase服务器秘钥

在WINGSDK后台应用配置中,添加Firebase服务器秘钥,打开Firebase控制台,进入项目,进入关联的应用,打开设置页面,打开云消息传递标签页面可以找到服务器秘钥。

3.7.2 推送集成配置

3.7.2.1 将WINGSDK推送模块集成到项目

添加推送模块依赖方法参考2.2 集成SDK到项目

添加依赖后,在项目(Project)的build.gradle文件中添加依赖

在项目模块(Module)的build.gradle文件中添加插件声明(将这一句添加到build.gradle文件的最低端, 没有添加推送模块的依赖,不要添加这句

3.7.2.2 获取推送消息的数据

收到推送消息后,WINGSDK将在设备通知栏显示通知,用户点击通知后打开应用程序,会将消息的数据传递给应用(例如自定义的数据),如果在应用中需要接收数据,需要实现一个BroadcastReceiver子类,并且在AndroidManifest.xml配置。当BroadcastReceiver接收到一个Action值为com.wa.sdk.push.intent.NOTIFICATION_OPENED的广播时,即收到了打开的推送消息包含的数据,数据为存放在Intent的Extras中。
说明:推送消息数据的处理非必要,如果推送消息中没有数据需要处理,可以不用配置。

数据接收BroadcastReceiver实现示例
实现一个类继承BroadcastReceiver,在onReceive方法中处理数据

在AndroidManifest.xml中配置Receiver,注意action值必须一致。

3.7.3 发送推送消息

进入WINGSDK后台消息推送页面,填写推送消息的内容,发送到已注册的设备。
说明:
1. 应用启动时Logcat日志中会打印出token,在SDK的Logcat工具的设备信息中也有token信息,如果token不为空,即说明程序已向服务器注册成功,可以接收推送消息了(SDK初始化时自动注册,无需手动调用接口)。
2. 程序卸载后,需要重新注册,覆盖安装不需要重新注册,但是有可能会出现token更新的情况。
3. 推送服务使用Firebase服务,必要时可能需要VPN。

3.8 广告

WINGSDK广告功能可以向玩家展示视频广告,可实现对观看视频广告的玩家进行奖励,提高广告的点击播放数。通过简单几步配置即可使用。

3.8.1 设置广告缓存成功回调接口

使用广告系统,必须先登录SDK,登录成功后SDK自动同步广告数据,当有新的广告数据缓存完成时,会在此回调中收到通知。

WAAdCachedCallback回调说明:

回调方法 说明 参数说明
onVideoCached(int validVideoCount) 广告缓存成功回调 当前可展示广告数

3.8.2 获取展示广告数接口

这个接口返回当前可展示的广告数量,当返回值大于1时,才能展示视频广告

3.8.3 展示视频广告接口

当用户登录SDK后,SDK自动同步广告并且缓存,缓存成功后广告才可用,有可展示广告时调用接口打开广告页面,无可用广告时返回错误。

说明:extra参数是CP自定义数据,在展示视频的回调中和通知CP后台发放奖励时,会原样返回。

WAAdCallback回调说明:

回调方法 说明 参数说明(从左往右)
onPreDisplayRewardedVideo(String campaignId, String adSetId, int rewardAmount, String rewardType, String extra) 显示视频前页面成功时回调回调 1、活动id
2、广告id
3、奖励数量
4、奖励类型(物品单位:例如金币、钻石)
5、额外数据(CP调用展示广告接口传入的自定义数据)
onDisplayRewardedVideo(String campaignId, String adSetId, int rewardAmount, String rewardType, String extra) 播放视频结束回调 1、活动id
2、广告id
3、奖励数量
4、奖励类型(物品单位:例如金币、钻石)
5、额外数据(CP调用展示广告接口传入的自定义数据)
onCancelRewardedVideo(int process, String campaignId, String adSetId, String extra) 点击关闭按钮退出后回调 1、关闭位置(0-播放视频前,1-播放视频过程中,,2-播放结束后页面)
2、活动id
3、广告id
4、额外数据
onLoadRewardedVideoFail(String campaignId, String adSetId, String extra) 加载视频失败回调(视频文件错误或者丢失) 1、活动id
2、广告id
3、额外数据(CP调用展示广告接口传入的自定义数据)
onClickRewardedVideo(String campaignId, String adSetId, int rewardAmount, String rewardType, String extra) 播放完视频点击推广信息回调 1、活动id
2、广告id
3、奖励数量
4、奖励类型(物品单位:例如金币、钻石)
5、额外数据(CP调用展示广告接口传入的自定义数据)

3.9 智能客服 AIHelp

3.9.1.机器人客服界面

示例代码:

参数说明:

参数名 类型 必填 说明 备注
showConversationFlag String Y 是否开启人工入口 为”1″时,将在机器人客服聊天界面右上角,提供人工客服聊天的入口。
config HashMap<String, Object> N 自定义HashMap信息。可以在此处设置特定的Tag信息。 使用默认配置直接传null

3.9.2.运营界面

调用此接口需要到AIHelp后台配置运营支撑模块tag设置,具体配置请参考WINGSDK第三方后台配置-相关章节

示例代码:

参数说明:

参数名 类型 必填 说明 备注
showConversationFlag String Y 是否开启人工入口 为”1″时,将在机器人客服聊天界面右上角,提供人工客服聊天的入口。
config HashMap<String, Object> N 自定义HashMap信息。可以在此处设置特定的Tag信息。 使用默认配置直接传null

3.9.3.展示全部FAQ菜单

调用此接口需要到AIHelp后台配置运营支撑模块tag设置,具体配置请参考WINGSDK第三方后台配置-相关章节

示例代码:

参数说明:

参数名 类型 必填 说明 备注
config HashMap<String, Object> N 自定义HashMap信息。可以在此处设置特定的Tag信息。

3.9.4.展示FAQ分类

调用此接口需要到AIHelp后台配置运营支撑模块tag设置,具体配置请参考WINGSDK第三方后台配置-相关章节

示例代码:

参数说明:

参数名 类型 必填 说明 备注
sectionPublishId String Y FAQ分类的分类编号 打开AIHelp 客服后台,在机器人→常见问题→[分类]页面下找到指定FAQ类别的分类编号。
config HashMap<String, Object> N 自定义HashMap信息。可以在此处设置特定的Tag信息。 使用默认配置直接传null

3.9.5.展示单条FAQ

调用此接口需要到AIHelp后台配置运营支撑模块tag设置,具体配置请参考WINGSDK第三方后台配置-相关章节

示例代码:

参数说明:

参数名 类型 必填 说明 备注
faqId String Y FAQ的编号 打开AIHelp 客服后台,在机器人→常见问题页面下找到指定FAQ的FAQ编号,注意:此faqId不能填写客服后台未存在的FAQ编号。
config HashMap<String, Object> N 自定义HashMap信息。可以在此处设置特定的Tag信息。 使用默认配置直接传null

3.9.6.人工客服界面

示例代码:

3.9.7.设置客服系统中所展示的游戏名称

示例代码:

参数说明:

参数名 类型 必填 说明 备注
game_name String Y 您想在AIHelp智能客服系统中展示的您的游戏名称

3.9.8.设置客服系统语言

示例代码:

语言支持列表图:
图片1

3.9.9. 判断是否开启AiHelp

说明:该接口返回布尔值,true表示已开启,false表示未开启。在使用其他AIHELP接口前请先判断这个接口,在返回true的情况下使用。示例如下:

3.9.10. 展示WING后台配置界面

参数说明:

参数名 类型 必填 说明 备注
language String Y 语言设置 如果使用默认配置传null,比如简体中文传zh_CN。
isVip boolean Y 是否vip用户 true表示vip用户,false是非vip用户。

说明:这个接口展示的界面由WING后台中SDK客服开关配置决定。如果后台未开启客服开关,此接口不生效。同时提供了无参数的重载方法WACscProxy.openAiHelp(),表示使用默认语言设置和设置非Vip用户。

3.9.11. 设置机器人或人工客服头像ICON

Android替换icon的方法:
1.前往如下地址:src>main>res>drawable,显示文件夹内容,其内是所有可替换icon的图片
2.替换包内的icon图片资源文件,例如:
机器人头像 bot_guide_elva.png
人工头像 default_guide_elva.png
玩家头像 default_player_elva.png

注意:替换时,新图片的格式、大小以及文件名都需要与包中原图片相同。

3.10 用户中心(充值中心账号信息)

3.10.1.获取用户中心数据接口

示例代码

3.10.2.显示用户中心弹窗

示例代码

结果通过传入的回调返回,数据封装在WAUserCenterResult类中。
WAUserCenterResult字段说明

字段名 类型 说明 备注
code int 登录结果码 登录结果码
message String 错误信息 登录结果码
userCenterInfo String 用户中心文字内容
userName String 用户名
password String 初始密码 如果用户修改过密码,此字段为空

3.11 获取CPS Channel更新链接地址

Android会出现需要分包的情况,分不同的cps channel包,不同的包会有不同的更新链接地址(分包请参阅分包相关文档),获取当前的包的更新链接调用以下接口:

结果在Callback中返回,如果后台配置了渠道的更新地址,将会返回相应渠道的更新链接地址,返回的结果可能为null或者空字符,需要判断处理。

3.12 Android6.0 权限管理

buildVersion 在23以下版本,只需要在AndroidManifest.xml中配置权限即可,buildVersion 在23及以上版本,在AndroidManifest.xml中配置的敏感权限声明,当程序运行在API 23(android6.0)及以上的系统时,授权声明是无效的,敏感权限需要在程序运行时授权。
SDK提供了运行时权限的检查与授权接口,在程序运行时,调用以下接口进行权限自检:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y Activity对象
permission String Y 权限名称 权限全称字符串,参考android.Manifest.permission
forceRequest boolean Y 是否强制申请权限 true 强制申请
false非强制申请
这个参数决定权限申请流程。强制申请权限时,拒绝后会弹出确认对话框,如果拒绝且勾选不再询问时,调用接口检查权限时会要求到设置中打开权限;非强制申请权限时,拒绝授权不再弹任何对话框,下一次调用接口权限继续弹出授权对话框
denyConfirmMsg String N 拒绝授权确认对话框的消息文字 拒绝授权后弹出确认对话框的消息文字
permissionSettingMsg String N 提示跳转到设置页面打开权限对话框的消息文字 拒绝且勾选不再询问时,调用接口检查权限时弹出要求到设置中打开权限对话框中显示的消息文字
callback WAPermissionCallback N 回调 接收返回的授权结果,CP根据授权结果做相应操作

示例:

在调用上面权限自检接口的Activity中的onRequestPermissionsResult()方法中调用已下接口,完成权限自检和授权的传递。

示例:

3.13 google 应用内评分

Google 应用内评分参考:
https://developer.android.com/guide/playcore/in-app-review
通过此接口,可以在应用内调起应用内评分

示例:

备注:
评分回调onSuccess后,并不能知道用户是否已经评分,是否弹出评分界面,这是调用google 评分的api流程完成,不能作为用户已经完成评分的依据

四、第三方配置

4.1 Google相关配置

游戏如需使用Google账号进行登录、Google商店进行支付,需要进行以下配置。 如果不需要使用Google相关功能,请忽略此章节
后台配置请参考第三方后台配置—Android版公共配置流程。

4.1.1 Google基本配置

在values/strings.xml中添加公钥字符串资源:

获取Google public key
请参考第三方后台配置—Android版1.7 获取Google Play Public Licensing Key。

在values/strings.xml中添加服务器OAuth client ID(即Google后台Web application 类型的OAuth client ID):

4.1.2 Google Game Service配置

游戏如需使用Google game service相关功能,需要进行以下配置。 如果不需要相关功能,请忽略此章节
使用Google Game Service服务,还需要在AndroidManifest.xml.xml中application标签下添加以下配置:

说明:字符资源的值是Google Game Service的APP ID,需要Google开发者控制台创建游戏服务获得。请参考第三方后台配置—Android版1.6 添加Google Game Service成就。

4.1.3 Google代码混淆配置

4.1.4 Google获取SHA-1指纹

具体配置请参考第三方后台配置—Android版1.1 配置应用程序证书指纹。

获取程序签名文件SHA-1命令如下:

其中<release_key_alias>是证书别名,<path-to-production-keystore>是证书的地址。

4.1.5 Firebase推送配置

游戏如需使用SDK消息推送功能,需要进行以下配置。 如果不需要相关功能,请忽略此章节
详情请参考3.7.1 Firebase相关配置

4.2 Facebook相关配置

游戏如需使用Facebook相关登录、社交、数据收集功能,需要进行以下配置。如果不需要相关功能,请忽略此章节

4.2.1 Facebook基本配置

在strings.xml中添加Facebook APPId声明:

在AndroidManifest.xml中添加配置

注意:
1、string的name必须为facebook_app_id,不可更改,值为Facebook app id
2、fb_login_protocol_scheme格式为fb+ YOUR_FACEBOOK_APP_ID,如facebookkid为2929419560408279,则fb_login_protocol_scheme为 fb2929419560408279
3、将FacebookContentProvider后面的${YOUR_FACEBOOK_APP_ID}替换成你的Facebook app id。获取方式请参考第三方后台配置—Android版2.1 Facebook基础配置。

4.2.2 Facebook代码混淆配置

4.2.3 Facebook登录权限对照表

权限 WAConstants中定义 类型 权限取值 说明
读取用户配置 FB_PERMISSION_PUBLIC_PROFILE read public_profile
读取好友列表 FB_PERMISSION_USER_FRIENDS read user_friends

4.2.4 Facebook获取程序签名KeyHash

使用下面代码片段获取程序签名KeyHash

4.3 AppsFlyer相关配置

游戏如需使用Appsflyer相关数据收集功能,需要进行以下配置。如果不需要相关功能,请忽略此章节

4.3.1 AppsFlyer基本配置

在AndroidManifest.xml中添加以下声明

4.3.2 AppsFlyer代码混淆配置

4.3.3 AppsFlyer卸载检测配置

要使用Appsflyer的卸载检测功能,前提条件如下:
1)需要下载google-services.json文件到工程目录中,参考Firebase相关配置;
2)在root级别build.gradle文件添加rules来添加google-services依赖,如下图:图片1

3)在module Gradle文件(通常是app/build.gradle)的底部添加apply plugin 来应用Gradle plugin。

图片2

如果没有集成SDK的推送模块功能,需要在Firebase后台进行相关配置,参考3.7.1 Firebase相关配置,配置好后将ServerKey配置在AppsFlyer后台;
如果已经集成了SDK推送模块功能,将当前应用现有的Firebase后台的ServerKey配置到AppsFlyer后台即可。AppsFlyer配置参考https://support.appsflyer.com/hc/en-us/articles/208004986-Android-Uninstall-Tracking(只需要关注将Firebase ServerKey配置到AppsFlyer后台的步骤,SDK已经实现Firebase的集成,CP无需重复集成)

4.4 Chartboost相关配置

游戏如需使用Chartboost相关数据收集功能,需要进行以下配置。如果不需要相关功能,请忽略此章节

4.4.1 Chartboost基本配置

在AndroidManifest.xml中application标签下添加声明

特别提醒:以上所有配置的android:name字段值都必须和文档一致,android:vlaue值由各应用申请的资源而定。

4.4.2 Chartboost代码混淆配置

4.5 VK相关配置

游戏如需使用VK相关登录、社交功能,需要进行以下配置。如果不需要相关功能,请忽略此章节

4.5.1 VK基本配置

在values/strings.xml中添加加以下字符串资源:

说明:APP_ID需要在VK的开发者管理后台创建应用后获得。

4.5.2 VK代码混淆配置

4.6 Twitter相关配置

游戏如需使用Twitter账号登录游戏,需要进行以下配置。如果不需要相关功能,请忽略此章节

4.6.1 Twitter基本配置

在AndroidManifest.xml的application标签下中添加以下配置

4.6.2 Twitter代码混淆配置

4.7 Instagram相关配置

游戏如需使用Instagram账号登录游戏,需要进行以下配置。如果不需要相关功能,请忽略此章节

4.7.1 Instagram基本配置

在AndroidManifest.xml文件的application标签下中添加以下配置

需要注意的是com.ghw.sdk.INSTAGRAM_REDIRECT_URI的值可以自己定义,但是需要和Instagram后台配置的一致。如下图所示:

instagram

4.8.智能客服

4.8.1 AIHelp相关配置

游戏如需使用智能客服 AIHelp客服系统,需要进行以下配置。如果不需要相关功能,请忽略此章节
在AndroidManifest.xml文件的application标签下中添加以下配置

说明:AIHelp SDK 要求android 最低版本(sdkminSdkVersion )>= 14,目标版本(targetSdkVersion) >= 23

4.8.2 AiHelp混淆配置

打包apk混淆代码配置中增加以下配置

4.9.华为HMS相关配置

4.9.1.华为HMS基本配置

1)在项目级别根build.gradle中配置华为仓库地址和依赖插件,如下:

2)在应用级别的根目录中添加agconnect-services.json文件,如下图所示:
instagram

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中添加配置:

4.9.2.华为HMS混淆配置

1)proguard-rules.pro文件配置

2)AndResGuard配置方式

说明:如果应用无相关混淆可不配置。

4.9.3.华为HMS权限配置

说明: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_GOOGLE GOOGLE Google平台
CHANNEL_FACEBOOK FACEBOOK Facebook平台
CHANNEL_VK VK VK平台
CHANNEL_TWITTER TWITTER Twitter平台
CHANNEL_INSTAGRAM INSTAGRAM Instagram平台
CHANNEL_HUAWEI_HMS 华为海外 华为平台

5.1.3 请求类型说明

变量名 取值值 说明 备注
REQUEST_INVITE INVITE 邀请
REQUEST_REQUEST REQUEST 普通请求

说明:vk平台测试游戏邀请功能需要申请权限,可以把请求类型设置成REQUEST_REQUEST来测试普通邀请,待申请权限通过后改成REQUEST_INVITE来测试。关于vk邀请功能的业务流程图如下:
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_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 状态

六、常见问题以及解决方案

6.1 Facebook SDK更新到4.26.0后打包apk(或直接运行)出现OutOfMemoryError: GC overhead limit exceeded。

问题描述:

Facebook SDK更新到4.26.0后,打包apk或直接运行项目时失败,出现OutOfMemoryError:GC overhead limit exceeded的异常信息,如下图(可在AndroidStudio的“Messages”标签或者“Gradle Console”标签看到)
android-常见问题及解决方案

解决方案:

这个问题是升级Facebook SDK到4.26.0后,导致开发工具打包是出现内存不足的问题,解决方法如下:

在程序模块下面的build.gradle文件中,在android里面添加下面配置:

WINGSDK_Android华为hms使用指南(v3.9.1)

wapublisher No Comments

二、快速集成

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)部分项目中可能只有一个build.gradle文件;

在程序module下面的build.gradle文件的dependencies内增加依赖配置;

注意:
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标签下添加以下设置。不同的应用配置的参数值不相同,需要申请相应资源

注意:以上配置中android:name必须保持一致,android:value根据CP应用申请的资源而定。

注:WINGSDK中使用到的权限
1)SDK内部自动添加的权限(普通权限)

3)CP接入aihelp必备权限

2.3.1.2 Activity结果传递配置

在所有使用到SDK接口的Activity的onActivityResult方法中增加以下代码:

2.3.2 SDK初始化

调用下面接口对SDK进行初始化:

注意:SDK初始化必须在第一个Activity的onCreate()方法中调用,强烈建议在UI线程中调用。

2.4 登录

2.4.1 使用登录窗口

2.4.1.1 调用登录窗口

SDK内置了一个包含所有支持的登录方式的一个对话框,通过调用以下接口显示对话框:

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用接口的Activity
enableCache boolean Y 是否启用登录缓存,true为启用,false为关闭 如果开启登录缓存,那么调用这个接口的时候会看是否有登录记录,如果有,不会显示登录方式选择对话框,直接使用上一次的登录方式登录。
callback WACallback<WAloginResult> N 回调,用来返回登录结果 2.4.3 处理登录结果

注意:使用登录窗口时,点击图标登录SDK自动弹出加载框,无需再次添加加载框。

2.4.1.2 清除登录窗口的缓存

使用登录窗口对话框进行登录,如果启用了缓存,SDK会缓存当前登录方式,下一次在启用缓存的前提下使用登录窗口登录,会自动使用上一次登录方式登录,不再弹出登录窗口。清除掉缓存后,可以重新弹出登录窗口,清除缓存调用以下接口:

2.4.2 使用接口登录

如果CP有自己的登录窗口,可以使用以下登录接口:

参数名 类型 必填 说明 备注
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 用户登出

退出游戏的时候,必须执行登出操作。用户登出调用以下接口:

注意:调用logout接口后,serverId、gameUseId、level字段值会被重置,如果需要保持相应字段的值不重置,需要重新设置相应字段的值,参考3.1 公共参数设置

2.5 支付

2.5.1 初始化支付

初始化支付,SDK会对所有已经支持的支付平台做初始化,初始化调用接口

参数说明:

参数名 类型 必填 说明 备注
context Context Y Context对象
callback WACallback<WAResult> N 回调方法,返回初始化结果 初始化成功才能使用支付

支付的初始化在调用Activity的onCreate中初始化。

2.5.2 查询库存商品列表

通过查询库存商品列表,可以获取所有可以购买的库存商品,查询库存调用接口(建议支付初始化完成后,就开始调用此接口)

注意:这里返回的库存商品信息是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)直接弹出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声明中添加如下语句:

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。

参数说明:

参数名 类型 必填 说明 备注
context Context Y 上下文

2.5.5 资源释放

不再使用支付时需要对资源进行释放,可以清理所有支付渠道所占用的资源,在调用接口Activity的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类对象,并设置数据收集的相关参数:

2.6.1.2 发送数据

调用第一步创建WAEvent对象的trackEvent(Context)方法发送数据

或者调用以下接口发送:

2.6.1.3 WAEvent.Builder方法介绍

  • 设置默认的事件名称

参数:
eventName事件名称

  • 设置渠道自定义事件名称,针对某个渠道需要设置特定的事件名称

参数:
eventChannel 渠道名称
eventName 事件名称

注意:
1)AppsFlyer预定义的事件名称和WINGSDK预定义的事件名称已经做了映射(例如: ghw_login <-> af_login),用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。

  • 设置默认累加值

参数:
value 累加统计的数值

  • 设置渠道自定义累加值,针对某个渠道需要设定特定的累加值

参数:
eventChannel 渠道名称
value 累加统计的数值

注意:
1)如果不进行设置,所有的渠道将采用设置的默认值。

  • 设置事件默认的参数/值,每次可添加多个

参数:
eventValues 参数/值Map

  • 添加一个事件默认的参数/值,每次添加一个

参数:
paramName 参数名称
paramValue 参数值

  • 设置事件渠道自定义的参数/值,每次可添加多个,针对某个渠道需要设定特定的参数或者值

参数:
eventChannel 渠道名称
eventValues参数/值Map

注意:
1)AppsFlyer预定义的参数名称和WINGSDK预定义的参数名称已经做了映射,用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。

  • 设置事件渠道自定义的参数/值,每次添加一个,针对某个渠道需要设定特定的参数或者值

参数:
eventChannel 渠道名称
paramName 参数名
paramValue 参数值

注意:
1)AppsFlyer预定义的参数名称和WINGSDK预定义的参数名称已经做了映射,用户无需再手动自定义。
2)如果不进行设置,所有的渠道将采用设置的默认值。

  • 禁用渠道,禁用后的渠道不会发送数据

参数:
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 自定义事件

说明:支持自定义事件的统计
例如:

三、高级功能

3.1 公共参数设置

WINGSDK包括serverId等公共参数,这些参数主要用于数据跟踪和统计。
公共参数必须严格按照文档进行设置,在后续的接口中会使用到这些公共的参数,没有按照要求配置会导致部分接口调用失败。

3.1.1 设置服务器ID

当用户的服务器ID发生改变时,需要调用设置服务器ID接口设置新的服务器ID,例如每次进入服务器

注意:设置服务器id的操作在每次选服后都需要进行,必须在调用其他接口前设置。

3.1.2 设置gameUserId

当gameUserId发生改变时,需要调用设置gameUserId接口设置新的gameUserId,例如成功登录账号后、切换账号成功后

注意:必须在调用其他接口前设置。

3.1.3 设置用户等级Level

当用户角色等级发生改变时,需要调用设置等级接口设置新的等级,例如开始进入游戏、等级提升等。

注意:第一次进服获取玩家等级或玩家等级变更后,需要及时调用这个接口设置玩家等级,必须在调用其他接口前设置。

3.1.4 设置游戏玩家昵称

设置游戏玩家的昵称,调用接口:

注意:
1.当玩家登录、登出游戏,或修改昵称时,需要及时调用这个接口设置玩家昵称。
2.调用该接口设置昵称后,玩家进行购买时会自动记录昵称到订单信息中。

3.2 调试模式

3.2.1 开启/关闭调试模式

SDK默认是关闭调试模式的,开启调试模式可以在IDE的Logcat中查看到程序的Log信息,方便调试和测试。开启/关闭调试模式调用以下接口。

说明:调用此接口后即可显示Log悬浮窗按钮,不用再另外调用enableLogcat接口,同时如果需要,也可以调用disableLogcat接口隐藏Log按钮。

3.2.2 Logcat工具

SDK提供了调试信息显示的Logcat工具,使用这个工具测试人员不需要IDE环境就可以查看调试信息,工具可以看到应用的调试Log信息(不包含系统打印)。使用前必须确保手机的安全软件没有拦截该程序的悬浮窗口权限,使用调用以下接口:

3.2.2.1 显示Logcat悬浮按钮

说明:如果已经开启了调试模式,不需要调用该接口就可以显示Logcat入口悬浮窗。

3.2.2.2 隐藏Logcat悬浮按钮

3.2.2.3 向Logcat增加一条日志

通过以下接口,开发者可以向Logcat工具中增加一条开发日志,日志会在Logcat工具的Log标签中显示。

3.9 智能客服 AIHelp

3.9.7.设置客服系统中所展示的游戏名称

示例代码:

参数说明:

参数名 类型 必填 说明 备注
game_name String Y 您想在AIHelp智能客服系统中展示的您的游戏名称

3.9.8.设置客服系统语言

示例代码:

语言支持列表图:
图片1

3.9.9. 判断是否开启AiHelp

说明:该接口返回布尔值,true表示已开启,false表示未开启。在使用其他AIHELP接口前请先判断这个接口,在返回true的情况下使用。示例如下:

3.9.10. 展示WING后台配置界面

参数说明:

参数名 类型 必填 说明 备注
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中配置华为仓库地址和依赖插件,如下:

2)在应用级别的根目录中添加agconnect-services.json文件,如下图所示:
instagram

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中添加配置:

4.9.2.华为HMS混淆配置

1)proguard-rules.pro文件配置

2)AndResGuard配置方式

说明:如果应用无相关混淆可不配置。

4.9.3.华为HMS权限配置

说明: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 状态

第三方后台配置—Android版

wapublisher No Comments

1.Google后台应用配置

1.0 Google后台公共配置

Google后台首先需要做一些公共配置,大致流程如下:

Google配置流程.drawio

上图中的所涉及到的流程在后续章节中都有详细指引。

1.2 Google Cloud 控制台项目配置

控制台地址:https://console.developers.google.com

简要流程:
1.创建新的游戏项目,并在游戏项目中完成后续配置
2.启用 Google Play Android Developer API
3.创建服务者账号,生成p12证书,用户WA后台Google支付证书配置
4.配置OAuth权限请求页面
5.创建Web类型ClientId凭据,用于WA后台Google登录配置,以及研发项目配置
6.创建Android类型ClientId凭据,需要研发提供包名(PackageName)和应用签名jks文件的SHA-1信息

1.2.1 创建游戏项目

1

进入Google Cloud控制台,点击项目,弹出项目选择框,点击“新建项目”

2

在“新建项目”页面,填入“项目名称”,点击“创建”完成新项目创建

注意记下项目名称,后续会在WingSDK后台的支付渠道配置中使用

1.2.2.启用 Google Play Android Developer API

1

展开左侧菜单,在“API和服务”项下选择“已启用的API和服务”

2

进入“API和服务”页面,点击“启用API和服务”
3

进入“API库”页面,在搜索框输入内容“Google Play Android Developer API”,按回车进行搜索

4

进入搜索结果页面,点击对应结果

5

进入“Google Play Android Developer API”详情页,点击“启用”

6

等待启用完成后,自动跳转到“Google Play Android Developer API”服务详情,至此即表示启用成功。

7

也可以按照前面的搜索步骤,重新进入“Google Play Android Developer API”详情页面,可以看到状态变成了“API已启用”


1.2.3.创建服务账号

1

在“API和服务”的“凭据”页面中,点击“创建凭据”,选择“服务账号”
2

进入“创建服务账号”页面,输入“服务账号名称”,点击“创建并继续”

3

进入第二步,在“角色”栏中选择授予“Editor”角色权限,点击“继续”

4

进入第三步,点击“完成”
5

完成创建后,在“凭据”页面的“服务账号”中查看并点击刚刚创建的服务账号

6

进入“服务账号详情”页面,点击切换到“密钥”标签页,点击“添加密钥”并选择“创建新密钥”
7

在弹出的提示框中,选择“P12”类型,点击“创建”

8

等待创建成功,会自动完成p12证书下载,此时可以在本地下载目录中找到该证书并保存

注意记下“服务账号电子邮件”和保存下载到本地的“p12证书”,后续会在WingSDK后台的支付渠道配置中使用


1.2.4 配置OAuth权限请求页面

必须先完成“OAuth权限请求页面”配置,否则无法进行后面步骤中的“创建Web和Android类型ClientId凭据”
“OAuth权限请求页面”会影响用户授权是看到的界面,如下:

1

1

展开左侧菜单,在“API和服务”项下选择“OAuth权限请求页面”
2

进入“OAuth Consent screen”(OAuth同意屏幕)页面,在“User Type”(用户类型)中选择“External”(外部),点击“创建”

3

4

进入第一步页面,完成必填项填写:“应用名称”(决定用户授权登陆时看到的应用名称),“用户支持电子邮件”,“开发者联系信息”

其他可选项:
1.应用徽标,用于展示在授权页面供用户识别,该项需要审核
2.应用网域,包含“应用首页”,“应用隐私权链接”,“应用服务条款链接”,链接的域名需要点击“+添加网域”进行添加,并且要经过Google Search Console的验证。

5

进入第二步“范围”页面,无需操作,点击“保存并继续”

6

进入第三步“Test users”(测试用户),点击“保存并继续”
7

进入第四步“Summary”(摘要),到这一步已经完成了,可以直接返回
8

回到“OAuth Consent screen”(OAuth同意屏幕)页面,在“Publishing status”(发布状态)显示是“Testing”(测试状态),点击“PUBLISH APP”(发布应用)
9

如果没有填写需要验证的项,可以无需验证直接发布到“正式版”,如图提示您的应用无需审核,点击“确认”

10

验证状态显示“Verification not required”(无需验证),“Publishing status”(发布状态)显示“In productiong”(正式版)

以上是无需验证的流程,如果需要验证则参考下面流程,否则忽略下面内容。
有需要验证的项的改动,则需要按照提示完成验证,例如添加了“应用徽标”点击“发布应用”,则是弹出下面提示框

11

11-2

点击“确认”

12

“Publishing status”(发布状态)显示已经是“In productiong”(正式版),但是验证状态显示“Needs verification”(需要验证),点击“PREPARE FOR VERIFICATION”(执行验证准备),后面会开始重新走一遍前面的步骤,并按要求完善,最后提交验证。
13

进入第一步页面,填入必填项“应用首页”,“应用隐私权政策链接”,并点击“+添加网域”填入上面链接所用域名,注意域名必须经过Google Search Console验证,最后点击“保存并继续”
14

进入第二步“范围”页面,点击“保存并继续”

15

进入第三步“Option info”(可选信息)页面,为确保审核通过,尽量补充完善可选内容。需要按照之前的发布提示,提供内容:
1.提供YouTube视频,展示如何使用从范围中获取的Google用户数据
2.一份书面说明,告知访问敏感数据和受限用户的原因

16

进入第四步“Final review”(最终审核),勾选“OAuth范围符合规定声明”,点击“SUBMIT FOR VERIFICATION”(提交以执行验证)

17

提交审核后,可以在页面看到审核状态变为“Verification in progress”(正在进行审核),并提示审核流程将需要4-6周时间。


1.2.5 创建Web类型OAuth Client ID

1

进入“凭据”页面,点击“+创建凭据”,选择“OAuth客户端ID”

2

进入“Create OAuth Client ID”(创建OAuth客户端ID)页面,应用类型选择“Web应用”,点击“创建”

3

成功创建后弹窗提示,点击上面的复制按钮进行 复制并保存,后续将需要提供给研发和WA后台Google登录配置

1.2.6 创建Android类型ClientId凭据

4

同创建“Web类型”ClientID凭据一样,但是在“应用类型”中选择“Android”,然后完成填写“名称”,“软件包名”,“SHA-1指纹证书”,最后点击“创建”

包名获取(研发):在Android项目“应用层级”的build.gradle文件中的找到applicationId

7

SHA-1 证书指纹获取(研发):首先需要研发创建游戏的“正式应用签名jks文件”,然后使用下方命令输出“SHA-1证书指纹”信息,输出结果参考下图
命令:keytool -keystore path-to-debug-or-production-keystore -list -v

8

5

成功创建后弹窗提示,一般“隔天”会生效,生效后就可以正常进行Google登录。

1.3 Google Play创建应用

图片9
在“所有应用”的“首页”中,点击“创建应用”

图片10

按照要求完成填写,勾选同意政策和法律,最后点击“创建应用”即可完成创建

1.4 Google Play授予服务账号权限

2

回到“所有应用”,进入“用户和权限”页面,点击“邀请新用户”

3

进入“邀请用户”页面,填入“电子邮件地址”( 服务账号的电子邮件地址参考创建服务账号获取 ),点击“添加应用”,在弹出框中选择“目标应用”并点击“应用”

4

在弹出的“xx(应用)的权限”弹框中,勾选“查看财务数据”和“管理订单和订阅”,点击“应用”

5

完成后,可以看到应用和权限信息,也可点击进入查看详情。最后点击“邀请用户”

6

在弹出的确认框中点击“发送邀请”
7
完成后可以在“所有应用”的“用户和权限”中看到刚刚邀请的“服务账号”


1.5 Google Play上传签名密钥

创建新应用后,在上传游戏包前,必须先完成签名密钥选择,此时“上传”按钮为灰色不可点击状态

1

在“目标应用”下,展开并选择“测试”下面的“内部测试”,进入“创建内部测试版本”页面,点击“选择签名密钥”

2
弹出选择提示框,点击选择“使用其他密钥”

3

在弹出的“应用签名偏好设置”页中,选择“从Java密钥库导出并上传密钥”。

按照其指示步骤,下载“加密公钥”文件和“PEPK工具”文件,并复制“代码”提供给研发,研发使用代码及“应用签名jks文件”和其签名信息生成output.zip文件,然后点击“上传生成的ZIP文件”将它上传,最后点击“保存”即可完成

命令:


注意:jdk环境:jdk12或以上版本,注意需要Open JDK,不是Oracle JDK
Open JDK 下载地址

4

保存成功后,可以在应用“设置”下的“应用签名”中查看“应用签名密钥证书
”的证书指纹信息,同创建Android类型ClientID凭据 中研发提供的SHA-1证书指纹信息进行比对,如果一致则说明配置正确,否则需要重新配置,同样是从“内部测试”的“创建内部测试版本”页面开始,只不过按钮变为了“更改签名密钥”。

5

1.6 Google Play添加应用内商品

添加应用内商品前,按要求需要先上传有BILLING 权限的应用包。建议在“内部测试”上传已接入WingSDK的Google模块(自带BILLING权限)应用包,完成上传即可,无需发布。

1

单个商品创建

在游戏应用的“应用内商品”界面,可以“创建商品”
图片2

按照提示填写完成对应项,最后点击“保存”,其中“设置价格”和“税费和法规遵从设置”界面如下图
注意:商品ID是唯一的,即使被删除后也依然占用原ID。

图片2

图片2

图片2

保存之后,商品默认是“无效”状态,需要点击“启动”改为“有效”状态

图片2

“启用”商品之后,在应用内对应商品详情界面,可以进行停用及删除

图片2

批量导入商品

GooglePlay后台目前支持批量导入,因为csv模板可能会变更,所以建议先创建一个商品,再导出,根据导出的最新csv模板样式,添加商品,再保存csv文件上传导入。

同样是在“应用内商品”界面,先根据上一步操作创建一个商品,然后点击“创建商品”旁边的选项“图标”,选择“导出”

图片2

导出的商品csv文件内容如下图,再参考已有的导出商品,按照相同方式补充完剩下的商品,保存商品csv文件

2

同样是“应用内商品”界面,点击选项“图标”,选择“导入”

图片2

导入最新的商品csv文件。注意:批量导入,如果csv商品文件中包含已有商品则会修改对应商品内容。

图片2

导入完成之后就可以在列表中看到所有已导入的商品

注意:如果文件内容中有中文,那么csv文件可能存在乱码问题,如果有这种情况,需要把csv的编码改为utf-8,确认中文字符正常,再保存上传。

 
 

1.7 添加Google Play测试用户

在应用未正式发布前,Google支付可以在Google Play添加测试用户才能进行沙盒测试。

详细的GooglePlay应用测试说明和方法可参考下方官方文档:
https://support.google.com/googleplay/android-developer/answer/9845334

“封闭式测试”和“内部测试”:
进入游戏应用的“内部测试”轨道(“封闭式测试”也相似),在“测试用户数量”标签中,如果勾选“已有测试列表”,如果没有则“创建电子邮件列表”再勾选(创建界面截图如下),然后保存。保存之后可以复制“测试邀请链接”,发给测试人员,注意要发布过版本才会有“测试邀请链接”

图片2

图片2

测试人员在浏览器上登录被邀请的Google账号,然后打开“测试邀请链接”,点击“接受邀请”

图片2

“接收邀请”之后,测试人员根据指示下载测试版应用安装测试

图片2

 
 

1.8.Google Play添加Game Service支持

1

在应用的“Play游戏服务”中展开“设置和管理”并选择“配置”,进入“Play游戏服务设置”页面,选择“创建新的Play游戏服务项目”,在“Cloud 项目”中选择 创建游戏项目 章节中创建的游戏项目,点击“使用”

2

成功创建游戏服务项目后,才会变为实际的配置页,点击“添加凭据”

3

进入“添加凭据”页面,
1.“类型”选择“Android”
2.填入“名称”,玩家会看到该名称,此名称应与 Google Play 商店中的应用名称一致。
3.“反盗版功能”(非通过 Google Play 安装您游戏的用户将无法访问 Play 游戏服务)选择“关闭”
4.OAuth客户端,选择型 创建Androdi类ClientId凭据 中的Android类型ClientID
5.点击“保存更改”

4

成功添加Android凭据后,可以在Play游戏服务的配置页面中看到凭据。另外可以在左上角找到“项目ID”,复制并保存,后续需要提供给研发使用。
5

之后就可以进行游戏服务的功能配置了,比如“成就”,“活动”,“排行榜”,需要创建成就,可以参考详细的官方指南:
https://developers.google.com/games/services/common/concepts/achievements

6

配置完功能以后,在“配置”页点击“检查并发布”
7

完成发布前需要处理的内容,点击“发布”
8

在确认框中点击“发布游戏项目”

9

完成发布后,在“配置”页可以看到状态变为已发布

1.9.Google 促销商品配置

参考地址:https://developer.android.com/google/play/billing/promo

1
进入应用的“促销代码”页,点击“创建促销代码”

2

在“创建促销代码”页中,按要求完成填写,最后点击“保存”
1.填入促销活动名称
2.开始日期和时间,注意是0时区日期时间,时间可以输入或者下拉选择
3.结束日期和时间,注意是0时区日期时间,时间可以输入或者下拉选择
4.促销类型,选择“应用内商品”类型并点击下拉选择已经创建的商品
5.填入代码数量,注意每个季度最多500个促销代码

3

在确认框中点击“创建”

4

创建完成后,回到“促销代码”页,可以看到已经创建的促销活动状态为“已安排”,点击右侧“下载按钮”可以下载促销代码列表。

5

如果促销活动已经生效,状态为“目前已发布”

促销活动生效后,用户就可以使用促销代码进行商品兑换了,兑换有两种方式。
第一种是购买该促销商品是,选择“兑换代码”完成支付并获得商品。
注意:创建促销商品的商品id为google_001,在应用内兑换时,需要点击相对应的商品(对应google商品id为google_001)弹出支付界面,然后输入兑换码才能正常兑换。

6

7

第二种是在Play商店APP中进行兑换后打开游戏,进入游戏后自动获得商品。 在Play商店 -> 账号信息 -> 付款与订阅 -> 兑换代码,然后点击兑换代码进行兑换(预注册奖励也可使用此方式测试)

8

9

10

11

12

13

 
 

1.10.Google Play 签名密钥

如果已经成功执行《Google Play 上传签名密钥》 章节,本章节可以忽略。若需要更详细了解Google Play密钥,或者需要升级密钥,可以查看本章内容。

Google Play控制台的签名密钥有两种,一种是应用签名密钥,一种是上传签名密钥,他们对应的实体文件是keystore/jks文件。

上传签名密钥:上传Google Play 的aab或apk包必须使用该签名秘钥进行签名,不能使用证书指纹不一致的应用签名秘钥或者其他签名秘钥,否则会提示签名错误,无法上传。该签名密钥用于Google Play验证上传的应用包的合法性。

应用签名密钥:是应用最终所使用的签名密钥。虽然上传Play的应用包使用的是上传签名秘钥签名,但是正式上架对外时,Google Play会抹去原来的签名,并使用应用签名秘钥签名。

为了方便管理,建议“应用签名密钥”和“上传签名密钥”使用相同的签名密钥jks文件
说明:使用下面步骤,不包含“上传签名密钥”的配置,因为Google不允许两个签名一致,但是“更改签名密钥”时不进行“创建新的上传密钥”即可让两个签名保持一致。

1.10.1.上传自己的签名密钥

在选择签名密钥是,Google推荐的选择是“使用Google生成的密钥”,该选项
实际是:由Google自行创建签名密钥,并保存在谷歌服务器,无法访问和下载,最终向用户分发应用时再由Google进行签名。该方式的签名密钥文件不可访问,无法控制,不利于管理签名密钥文件和调试测试,所以建议上传自己的签名密钥。

注意:这一步,是应用未正式上架时可以重复操作修改的,但是正式上架后不可用再从这里修改,需要参考下一章节执行“升级密钥”操作才可更改。

具体操作同《Google Play 上传签名密钥》一致,最终验证“应用签名密钥证书”和“上传密钥证书”保持一致即说明配置正确。

1.10.2.验证签名密钥配置

1.研发在命令终端通过输入keytool命令获取签名密钥jks文件的证书指纹。
命令:keytool -list -v -alias ALIAS_NAME -keystore KEYSTORE_PATH

图片_20230307160725(1)

2.在Google Play控制台的,设置->应用签名,中找到当前生效的密钥证书信息

1

3.第一步和第二步的证书指纹进行比较,如果保持一致则配置正确

1.10.3.升级应用签名密钥

适用对象:已上架,并且之前执行过《Google Play 上传签名密钥》 章节,把默认的Google生成签名改为自己签名文件的应用

不适用对象:
1.未上架的应用,无需升级也可在“内部测试”或任意轨道版本中选择“更改应用签名密钥”进行更改
2.已上架,但是之前默认由Google生成签名的应用(未执行过《Google Play 上传签名密钥》 章节),界面参考下图

使用“Google生成的签名”的应用,会没有“请求升级密钥”按钮

2

升级注意:“请求升级密钥”操作,一年只有一次机会,无法撤销,请谨慎操作

同样是“应用完整性”页面,在“应用签名”标签里面找到“请求升级密钥”按钮,并点击

3

在弹出框中,升级方式选择“从Java密钥库上传新的应用签名密钥”

4

按照“从Java密钥库上传新的应用签名密钥”的指示,下载加密公钥(encryption_public_key.pem)和PEPK文件(pepk.jar)给研发使用,研发使用指示命令生成zip文件,其中命令的黑体参数需要替换为本地对应参数,具体参考如下,最后完成“上传zip文件”,选择“升级原因”,点击“升级”。
foo.keystore:新的应用签名密钥jks文件
foo:foo.keystore文件使用的别名
upload.keystore:原应用签名密钥jks文件
upload-key-alias:upload.keystore文件使用的别名
/path/to/encryption_public_key.pem:加密公钥文件

注意:若upload.keystore使用的不是原应用签名密钥jks文件,会升级失败

5

点击“升级”按钮,弹出确认弹窗,选择“确认”完成升级

6

升级之后可以在“设置”的“应用签名”标签中,确认最新生效的“证书指纹”信息,也可以查看“曾用密钥”的证书指纹信息。另外升级后“请求升级密钥”按钮变为不可用状态,并且旁边会有显示上一次的升级日期,如果距离上次升级日期超过一年,则会重新变为可点击状态。

7

更多内容可以查看Google文档了解:

https://support.google.com/googleplay/android-developer/answer/9842756

1.10.4.应用签名密钥变更后续配置

无论是“上传自己的签名密钥”或者“升级应用签名密钥”,都会影响应用的验证,比如Google登录,Facebook登录等三方功能,所以修改后确认同步修改对应平台相关内容。

  • 如果是未上架应用“上传自己的应用签名密钥”,更改原有对应配置即可。
  • 如果是已上架应用“升级应用签名密钥”,为了保证旧的“应用签名密钥”用户也可以暂时使用,保留“原应用签名密钥”证书指纹相关配置,并添加新的“新应用签名密钥”证书指纹相关配置。

下面罗列一些平台需要用到签名信息的相关配置指南:

Google:Google Cloud Platform(https://console.cloud.google.com/)控制台,API和服务 -> 凭据中,添加Android类型的OAuth 2.0 客户端 ID,输入包名和新的应用签名的SHA-1证书指纹。子项目中配置应用的OAuth Client Id

Facebook:Facebook登录的“密钥散列”与应用签名有关,需要添加新的“密钥散列”。
添加签名密钥散列

Fireabse:关联应用有用到应用签名的SHA-1和SHA-256证书指纹,需要添加
手动关联GooglePlay应用

Huawei:华为应用需要配置证书指纹。
生成签名证书指纹

1.10.3.4 签名密钥常见问题

1.打包的时候该使用哪个签名密钥?
上传签名密钥,只有在给需要上传到Google Play任意轨道(测试或正式等)的应用包打包时使用。
其他任意时候,比如想在本地运行调试,或者本地打包测试,只要不需要上传到Google Play的,都使用应用签名密钥进行打包。

2.MD5,SHA-1,SHA-256这些证书指纹该用哪个签名密钥的?
上传签名密钥只有在上传Google Play任意轨道时候打包应用包时使用,其他任何情况都以应用签名密钥为准。所以给Google,Firebase,Facebook,Huawei等平台提供的SHA-1,SHA-256证书指纹都需要使用应用签名密钥的证书指纹。

3.什么是keystore/jks文件,怎么生成的?
二者是同一个东西,都是Android签名密钥文件,用来打包Android应用的,当前常用的是jks文件。该文件用于确保应用的唯一性及合法性,非常重要,请务必保管好该文件及相关的密码,并确保不会泄漏。
虽然可以使用JDK的keytool工具生成这两种文件,但常用的方式是开发者使用Android Studio生成jks文件,而keystore文件一般使用Eclipse生成。

4.Google Play上的应用签名密钥keystore/jks文件找不到了,能否重新生成一个跟上面相同证书指纹的签名密钥文件?如果不能又该如何处理?
不能生成指定证书指纹的签名密钥文件。Google Play上也无法下载签名密钥文件。
处理方法:
1)上传应用到任意轨道(正式或测试),从Play Store的应用页面下载应用,上面下载的应用都会使用应用签名密钥打包签名过。
2)如果想自己重新掌握keystore/jks文件,并且Play控制台中该应用未升级过应用签名密钥(每个应用只有一次升级机会),可以进行密钥升级,更换为新的keystore/jks文件信息。升级的时候务必选择“上传自己的签名密钥”,不要选择默认的“由Google Play生成。。。”,升级成功后也务必对一些平台上的配置做出相依的配置改动,否则会影响这些平台的API使用,如Google登录,Facebook登录等,具体升级请参考“升级应用签名密钥”章节操作。

5.应用打包运行之后的签名密钥,和Play上的应用签名密钥不一致会有什么后果?
通常会影响所有配置了与应用签名密钥有关信息的平台API。比如Google的Android类型OAuth ClientID使用了SHA-1,会影响谷歌登录,导致谷歌登录直接返回取消。Facebook使用的散列秘钥,影响Facebook登录。其他的还有Firebase的应用关联,Huawei的应用配置。

 

1.11Google Play 发布应用

准备应用包:
使用上传签名密钥打包签名好的aab应用包,大小不能超过200M,如果超过需要使用 Play 分发服务(如 Play Asset Delivery 或 Play Feature Delivery)来分发超过 200MB 的文件,也可以使用第三方内容分发网络。若使用应用签名密钥或其他签名密钥,会提示错误。关于签名密钥可以参考上一章节说明。

登录Google Play 控制台,选择并进入需要发布的应用。

1.选择发布的版本,根据需要可以选择内部测试,封闭测试,开放性测试,正式版。
1

2.若是测试轨道,可以选择测试人员并保存。

2

3.若是开放式测试,或正式版,需要设置发布的国家。

3

4

4.创建新版本,上传应用包,保存。若之前已上传过该应用包,可以直接从内容库中选择。保存之后,点击检查发布版本。

5

5.在检查发布版本页面,查看所有错误警告消息,若是错误,必须按照指引完成修改。完成所有错误的修改后,回到该页面,点击 “保存”

图片8

其他说明:发布前错误提示,信息中心需要完成步骤,主要是设置应用部分,按照指引完成任务即可。

6

6.在发布确认框中点击“保存并发布”。

10

11

7.跳转到“发布概览”页面,点击“将x项更改送审”,并在确认框中点击“将更改内容送审”,即可完成提审。等待Google Play审核过后即可将应用进行对外发布。

图片7

建议开启“自管式发布模式”,审核过后自行决定发布。否则审批过后会立即发布。

 

1.12.Google Play广告ID声明设置

1

在应用的“政策和计划”下选择“应用内容”,在“应用内容”页面找到“广告ID”项,点击“开始声明”
2

进入“广告ID”页面,在“您的应用是否使用了广告ID”中选择“是”,后续出现使用目的选项,勾选“分析”和“广告或营销”,最后点击“保存”即可完成。

1.13.Google Cloud后台Appsflyer卸载检测配置

1.13.1.创建 AppsFlyer uninstalls角色

进入Google Cloud后台 ,选择项目,IAM和管理,选择角色

WechatIMG603

点击创建角色

WechatIMG604

名称输入 AppsFlyer uninstalls
ID输入 af_uninstalls
角色发布阶段选择 正式版
然后点击添加权限

WechatIMG605

过滤条件输入 cloudmessaging.messages.create

WechatIMG607

WechatIMG608

选择cloudmessaging.messages.create权限,点击添加按钮。最后点击创建按钮。

WechatIMG609

1.13.2.将AppsFlyer指定为卸载角色

进入Google Cloud后台 ,选择IAM,点击授予访问权限

WechatIMG610

新的主账号输入:af-uninstalls-tracking@af-uninstalls-tracking.iam.gserviceaccount.com
角色选择   :AppsFlyer uninstalls

WechatIMG611

WechatIMG612

然后保存,完成Google Cloud后台Appsflyer卸载检测配置操作。

2.Facebook第三方后台配置


2.1 Facebook基础配置

Facebook应用控制台地址:https://developers.facebook.com/

2.1.1 创建Facebook应用

1

进入Facebook应用页,点击“创建应用”

2

进入“创建应用”页面,在第一步“业务资产组合”中,点击“继续”

3

进入第二步“用例”,选择“用Facebook登录来验证用户身份并请求访问数据”,然后点击“继续”

5

进入第三步“应用详情”,填入“应用名称”及“应用联系邮箱”,点击“继续”

6

进入第四步“审核”,这里会列举应用发布的要求,点击“创建应用”即可完成应用创建


2.1.2 设置登录

7

7-2

在控制面板页面,会默认显示指引步骤,展开第一步的用例,点击“定制如何添加Facebook登录按钮”。也可以在在“用例”里面找到“身份验证和账户创建”点击旁边的“定制”。两者效果一样,只是入口不同。

8

进入到“定制”页,在左侧展开“Facebook Login”用例,选择“Permissions”,然后在右侧的权限配置页中,点击“添加”email权限

9

完成权限配置,选择“Facebook Login”下的“Quickstart”,点击“Android”

10

前面2步是接入指引,无需配置,进入第3步,填入“包名”和“默认启动类名称”,其中“默认启动类名称”由研发提供。然后点击“Save”保存后,再点击下方“继续”

11

进入到第4步,需要研发配置好OpenSLL库(必须是Google Code Archive的版本)和Keytool工具(Android Studio自带)环境,然后使用命令指定签名密钥文件jks信息来生成“密钥散列”。
填入“密钥散列”后,点击“Save”保存,然后点击“继续”


根据签名的SHA-1获得密钥散列(建议):

在网址填入SHA-1,通过转换获得密钥散列: 转换获得密钥散列网址

官方获取密钥散列指引(不建议):
https://developers.facebook.com/docs/facebook-login/android#6–provide-the-development-and-release-key-hashes-for-your-app

jdk环境:jdk12或以上版本,注意需要Open JDK ,不是Oracle JDK
openssl-for-windows 下载地址 ,建议使用openssl-0.9.8e X64版本

命令:

12

进入第5步,如果需要启用单点登录,则打开“单点登录”,否则保留关闭,点击“Save”保存,然后点击“继续”

到这里就已经完成了登录配置,后续6.7.8.9.10步都是代码接入说明,无需处理。

2.1.3 获取配置信息给技术配到工程项目中

1

展开“应用设置”选择“基本”,进入“基本”配置页,选中并复制保存上方“应用编号”(Facebook App ID),后续需要提供给研发使用

2

展开“应用设置”选择“高级”,进服“高级”配置页,在“安全”卡片中找到“客户端口令”(Client Token),选中并复制保存,后续提供给研发使用


2.2 Facebook添加开发者

1

展开“应用身份”选择进入“用户身份”页,点击“添加用户”

2

在弹出的邀请框中,选择邀请目标的“指定身份”(所有身份都是相同的步骤),然后填入“邀请对象信息”,如果是好友关系可以直接输入好友名称会出现对应的好友选择项直接选择,不是好友,则建议使用Facebook账户编号(即Facebook ID),可以网上搜索一些工具网站进行获取,或者使用这个工具网站(https://cn.piliapp.com/facebook/id/)。
填入邀请对象后,点击“添加”

3

可以看到该用户已经被邀请,状态为“待添加”,下面是被邀请人同意邀请过程

4

被邀请用户,进入Facebook开发者页面(https://developers.facebook.com/apps/),如果账号未认证需要先使用手机号认证。在右上角的用户头像处可以看到有未读消息,点击“头像”,展开“账户信息”,点击“待处理的应用请求”

5

在“请求”页面中,点击“接受”应用邀请即完成添加用户身份过程,其他身份也是一样操作。

6

完成后被邀请用户就可以在应用页,看到刚刚接受邀请的应用以及对应身份

7

在应用控制台的“应用身份”页可以看到被邀请用户的“待添加”状态已经消失

下面是创建“模拟用户账户”过程,“模拟用户账户”是专用于测试的临时性Facebook账户,会分配账户随机邮箱和密码

8

展开“应用身份”选择“测试用户”,进入“模拟用户账户”页,点击“创建测试用户”

9

在“创建测试Facebook账户”弹框中,按步骤选择“测试用户人数”,在“自动安装应用问题”中勾选“否”,填入“年龄”(默认18),选择“语言”,最后点击“创建测试用户”

10

创建完成后,可以看到测试用户信息,可以点击“更多按钮”进行更改用户名称和密码。复制“邮箱”到Facebook网页或者APP中,输入密码即可完成测试账号的登录,然后进行相关测试。

2.3 上线注意事项

图片2

进入应用的“控制面板”中,按照步骤完成相关内容,其中“准备并提交应用审核”这几步对应左侧“审核”的相关项,最后点击跳转到“发布”页

1

进入“发布”页面,可以看到一些发布提示,按照建议完成所有必要设置,即可进行发


2.4 完成API权限测试

图片1

展开左侧“审核”点击进入“测试”页面,下方会列出需要进行测试的权限和测试状态,已经完成测试状态为“Completed”,最后点击“图谱API探索工具”

图片2

进入“图谱API探索工具”,按照顺序,选择应用,选择权限(上一步中列出的权限),授权获取token,在API地址后面参数填入id,name,picture(因为包含权限 game_user_picture 所以需要填入picture),然后点击提交进行API请求,请求成功后会返回请求结果。
成功请求API后,会在几个小时后更新测试结果,可以在第一步中查看。

3.VK后台应用配置

VK目前必接的功能包括登录,登出,显示用户名称以及头像,group和邀请。

3.1. VK基础配置

创建VK应用,创建地址如下(如果还没注册,需要先注册):https://new.vk.com/editapp?act=create
Android-VK基础配置

title中填入应用的名称, 点击Connect Application按钮,并按照提示创建应用。填写关键信息,主要是填写Information和Settings部分:
Android-VK基础配置

Android-VK基础配置

Android-VK基础配置

上图的SDK settings中安卓部分需要填写应用的包名和指纹,指纹的获取方式请参考1.1 配置应用程序证书指纹(去掉冒号),也可以参考:https://new.vk.com/dev/android_sdk,或者与开发人员联系获取。

获取vk app id提供给开发人员并且注意设置应用状态为可见
android-VK基础配置

3.2 应用提交审核

VK的邀请功能是对接VK渠道官方要求必须接入的,而邀请功能只能在审核通过的应用中使用,所以需要将配置好的应用提审。

这里需要注意的是:
VK的应用审核比较严格,首先必须是游戏应用,并且需要全部翻译成俄文,不能是demo,有人工审核。
如果需要测试邀请,原则需要审核过的应用,在应用审核通过之前,使用apps.sendRequest接口,type为request来测试,测试者需要双方是好友,都是管理员并且都已经安装过该应用。
对接VK邀请功能业务流程图如下:
vk上线流程图

控制台提审大致步骤如下:
Android-VK基础配置

Android-VK基础配置

4.Firebase后台配置

Firebase控制台

在Firebase后台配置后,会得到两个文件,一个是google-services.json,需要给研发配置到游戏中去;另一个是Firebase服务账号私钥文件(项目名称-firebase-adminsdk-xxx.json),需要配置到SDK后台推送设置中

4.1 添加项目

1

在浏览器中打开Firebase控制台,点击“添加项目”

2

进入创建项目第一步,输入项目名称,选择创建游戏项目 章节中创建的游戏项目,点击“继续”

3

进入第二步,了解注意事项,点击“继续”

4

进入第三步,默认启用“Google Analytics”,点击“继续”

5

进入第四步,选择“Google Analytics账号”,点击“添加Firebase”

6

等待项目创建完成即完成了项目的添加,点击“继续”可以进入该项目控制台

4.2 新建应用

1

进入游戏项目中,如果该项目还没有应用,可以直接点击右侧“对应平台按钮”进行应用添加

1-2

也可以点击项目概览右侧“设置按钮”,选择进入“项目设置”页面,在“常规”标签页下方“您的应用”中,点击“添加应用”进行应用添加

2

进入添加应用第一步,完成填入“应用包名”,“应用名称”,“签名证书指纹SHA-1”,点击“注册应用”

3

进入第二步,下载“google-services.json”文件,该文件后续提供给研发在项目中使用,下载完成后,点击“下一步”

4

进入第三步,该步骤主要是接入指引内容,无需配置,点击“下一步”

5

进入第四步,此时已经完成应用添加,点击“继续前往控制台”可以回到控制

6

应用添加成功后,可以在“项目概览”的“设置按钮”,选择进入“项目设置”,在“常规”标签页下面“您的应用”中,可以找到已创建的应用,可以在这里重复下载“google-services.json”文件,及更改应用相关信息

4.3 消息推送配置

1

点击“项目概览”的“设置按钮”,选择进入“项目设置”页面,点击切换到“云消息传递”标签页,可以看到“Firebase Cloud Messaging API(V1)”默认是“已启用”状态。

如果是“未启用”,则需要点击右边的“更多按钮”,弹出并点击“在Google Cloud 控制台中管理API”,会跳转到Google Cloud控制台的“Firebase Cloud Messaging API”产品详情

2

点击“启用”后即可看到状态变为“API已启用”

3

确认前面API已启用后,在“项目设置”中点击切换到“服务账号”标签页,点击下方的“生成新的私钥”按钮

4

在弹出的确认框中继续点击“生成私钥”,即可开始下载密钥文件,文件名称一般为“项目名称-firebase-adminsdk-xxx.json”,下载并保存该文件,后续需要配置到SDK后台的推送设置中

4.4 关联Google Play

前提条件:所关联的应用,必须在GooglePlay中已经创建,并上传过对应包名的应用包,否则无法关联。
重要说明:
1.必须关联到Google Play才能查看Android应用的in_app_purchase和订阅事件。
2.需要使用主账号关联

1

在“项目概览”的“设置按钮”中选择进入“项目设置”,然后点击切换到“集成”标签页,在下方找到“Google Play”卡片并点击其中的“关联”

2

进入关联Google Play第一步,里面是一些介绍和说明,点击“下一部分”

3

里面有三个配置开关,分别是“App Distribution”,“Crashlytics”,“Google Analytics”,三个开关全部打开,并选择关联Play上对应的应用,关联操作如下图。其中最重要为“Google Analytics”,该项目决定Firebase能否获取到应用内购买和订阅收入数据。

完成上述操作后,点击“关联到Google Play”

4

图:选择关联Play的应用并保存

5

关联完成后,可以看到对应项“已启用”状态,以及其中关联的应用

4.5 .调试事件

参考:https://firebase.google.com/docs/analytics/debugview
要在 Android 设备上启用 Analytics“调试”模式,请执行以下命令:

例如:adb shell setprop debug.firebase.analytics.app com.ghw.sdk2

“调试”模式将保持启用状态,直至您通过执行以下命令明确停用“调试”模式:

开启调试后,打开管理后台,选择项目–分析–DebugView,能够看到目前正在调试的设备,以及上传的事件。

图片36

注意:为了防止测试和开发影响测量值,在调试模式下记录的事件将从总体 Analytics 数据中排除,并且不会包含在每日 BigQuery 导出报告中。

4.6 获取 Firebase Project ID

1.进入FCM Console(FCM控制台)
2.选择一个项目。
3.进入Project Overview(项目总览)> Project settings(项目设置)。

图片12

4.复制Project ID,即为Firebase 的Project ID

5.Twitter后台配置

5.1 Twitter后台应用配置

注册一个Twitter账号,打开Twitter开发者页面,如果您的Twitter账号不是开发者账号,还需要将Twitter账号注册成为开发者账号。进入My Apps页面,可管理应用。如果还没有应用,点击“Create New App”进入创建应用界面,填写相关信息新建应用。
Twitter-后台配置
新建应用后,点击应用列表中的应用,可以查看应用的详情。
Twitter-后台配置
点开“Keys and Access Tokens”标签可以看到ConsumerKey和ConsumerSecret
Twitter-后台配置

5.2 WINGSDK后台应用配置

将Twitter中新建应用的consumeKey和ConsumeSecret配置到WINGSDK后台。选中应用→设置→登录平台→添加Twitter登录平台,在“平台应用ID”中填写consumeKey,在“公钥”中填写consumeSecret。
Twitter-后台配置

6.Instagram后台配置

打开Instagram开发者页面,注册账号并登陆。点击“Manage Clients”标签打开应用列表,点击“Register a New Client”新建一个客户端。
Instagram-后台配置
在新建客户端的页面填写相关信息提交即可完成创建。
Instagram-后台配置
回到“Manage Clients”页面,点击刚刚新建的客户端可以查看详情,在这里可以看到Client ID和Client Secret。
Instagram-后台配置
新建的客户端的状态是“Sandbox”,在这种状态下,所有参与测试的人员都需要添加到“Sandbox”才能参与测试,添加用户到“Sandbox”的方法如下:打开“Sandbox”标签页面,输入邀请的用户名,用户名不是邮箱,一般用户名是注册邮箱@符号的前部分。注意,添加后一定要保存才能生效。保存后通知被邀请人接受邀请,可在“Sandbox Invites”看到邀请记录,接受邀请后的用户可以测试登录。
Instagram-后台配置
应用如果完成了测试要准备上线,需要将应用发布为正式状态,在“permissions”标签下,点击“Start a submission”进行权限申请。
Instagram-后台配置
在下一步选择“My app allows people to login with Instagram and share their own content.”,填写相关信息,这一步需要一个视频演示链接,完成提交后等待审核即可。
Instagram-后台配置

7.智能客服 AIHelp后台配置

AiHelp官方支持地址:
https://aihelp.net/elva/FAQ/FAQList.aspx?l=zh_CN&SectionID=0&pf_app_id=5

AiHelp 官方后台配置文档地址(页面内有下载链接介绍文档pdf):
https://aihelp.net/elva/FAQ/FAQList.aspx?SectionID=3392&LanguageID=5&pf_app_id=5&kmContentId=122760

已下是常用功能配置说明,需更多更详细请到官方下载最新pdf文档

7.1.新建应用

7.1.1 左侧“设置”-> “应用”-> “+”如下图位置

WechatIMG548
弹出界面,输入应用名称,点击“Add”完成新建 如下图
WechatIMG549

7.1.2 选择新建应用,如下图操作

WechatIMG550

选择中刚刚新建应用,会切换到应用下内容。

7.2.获取参数

如果不在需要app下,需按照 7.1.2 切换app
左侧“设置”-> “应用”-> “+”如下图位置

WechatIMG551

7.3.添加语言

设置语言后app应用Aihelp部分功能支持多语言。
左侧“设置”-> “语言”-> “添加语言”如下图位置
WechatIMG552
点击设置后,弹出语言列表,可以增加需要语言
WechatIMG553

7.4.配置FAQ

此功能配置是在app 应用中FAQ相关功能

7.4.1.新建FAQ分类

左侧“机器人”->“常见问题”-> “[分类]”-> “新增分类+” 如下图位置
WechatIMG554

弹出新增页面,输入名称和顺序编号后保存

WechatIMG556

WechatIMG555

分类列表会出现新建分类,左侧栏也会出现对应分类

7.4.2编辑FAQ分类

在分类列表中,点击如下图按钮
WechatIMG558

弹出详情页面,可做对应修改。其中中文,英文对应aihelp sdk显示的语言内容。

WechatIMG557

7.4.3.新建FAQ

在左侧栏选择FAQ分类->“新增FAQ”,如下图
WechatIMG559

弹出新增页面

WechatIMG560

7.4.4.编辑FAQ

在FAQ列表中,点击如下图按钮

WechatIMG562

弹出详情页面,其中语言对应aihelp sdk显示的语言内容。

WechatIMG563

7.4.5.发布FAQ

如,在热门问题分类下,创建了一个信息,然后发布流程
左侧“机器人”-> “常见问题”-> “发布” 如下图位置

WechatIMG564

7.5.配置运营模块Tab

此功能是app应用中运营界面功能

7.5.1.新建Tab

左侧“运营支持”-> “运营模块”-> “[Tab设置]”-> “新增Tab” 如下图位置
WechatIMG566

弹出新增页面

WechatIMG567

7.5.2.编辑Tab

左侧“运营支持”-> “运营模块”-> “[Tab设置]”-> 编辑,如下图

WechatIMG568

7.5.3.新建文章

左侧“运营支持”-> “运营模块”-> “[Tab列表]”,选择刚才创建的tab1,点击新建,如下图
WechatIMG569

弹出新增页面

WechatIMG570

7.5.4.编辑文章

在文章列表中,点击如下按钮
WechatIMG571

弹出详情页面,其中语言对应aihelp sdk显示的语言内容。

WechatIMG572

7.5.5.发布Tab

Tab要在app应用中显示需要发布,每次修改都需要发布。
左部“运营支撑”-> “运营模块”-> 需要发布的Tab -> “发布” 如下图位置
选择平台、语言后发布

WechatIMG573
发布后,效果图如下
WechatIMG575

7.6 自定义SDK配置

7.6.1 展示头像配置

WechatIMG575

7.6.2 APP对外名称配置

WechatIMG575

7.6.3 设置横竖屏

WechatIMG945

7.6.4 更多其他配置

另外还包含欢迎语设置,主题设置等等功能。
详情请参考:
https://aihelp.net/FAQ/#/AIhelp%20Support/app/zh_CN/EB5AE263D8AB85A4/35E3B9E6396692FE/396CD31FF6A33A5D

8.华为HMS后台配置


8.1 基本流程

1、登录流程
WechatIMG575

参考:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/dev-process-0000001050443773
2、支付流程
WechatIMG575
参考:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/dev-process-0000001050033070

8.2 配置AppGallery Connect

1)注册成为开发者
2)在 AppGallery Connect创建项目、创建应用
A、 如果没有项目,则创建项目,我的项目—添加项目,输入项目名称,确认,则项目创建成功。
WechatIMG575

WechatIMG575
点击确定完成后,点击添加应用,跳转添加应用界面
WechatIMG575

WechatIMG575

注:需要集成支付能力,包名后缀必须为.HUAWEI或者.huawei

B、如果已存在项目,则可在项目下,创建具体的应用,一个项目下可创建多个应用
WechatIMG575


3)生成签名证书指纹
keytool -list -v -keystore C:\TestApp.jks
执行结果如下:

WechatIMG575

说明:C:\TestApp.jks表示应用签名文件,CP替换成自己的签名文件即可。

4)在“我的项目”中找到刚创建的项目项目,找到对应的应用,配置SHA256证书,如下图所示
WechatIMG575

5)打开相关服务
5.1)打开API权限服务,在“项目设置”->“API管理”菜单中,开启相应服务,如下图所示:
WechatIMG575
登录服务为 Auth Service,支付服务为 In-App Purchases,其他权限为创建应用默认开启的权限,可以忽略。

此操作为项目级别操作,操作完后,项目下所有应用都会有此权限。

5.2)配置支付参数
① 在我的项目中,选择具体某个应用,在左侧导航栏选择“盈利 > 应用内支付服务”,点击“设置”。

WechatIMG575
说明:如果首次配置会弹出签署协议弹框,其中订阅通知地址,可不填写

8.3.获取应用的AppGallery Connect配置文件

1)获取agconnect-services.json文件
WechatIMG575

8.4.配置商品

1)打开“ AppGallery Connect”->“我的应用”->“运营”菜单,如下:
WechatIMG575

2)点击“添加商品”,如下图所示:
WechatIMG575
填写商品相关的商品信息,点击保存即可,这里选择“消耗型”商品。

3)创建商品后,默认状态为失效状态,需要点击激活按钮:
WechatIMG575
点击后,提示此商品将被开放购买,点击确认。

8.5.配置沙盒测试账号

参考:https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-tester_account_mgt

接入完支付sdk后,华为提供沙盒支付测试模式。打开华为AppGallery Connect管理后台,选择用户与访问,选择左侧沙盒测试栏目下的测试账号,点击新增,输入华为账号即可
WechatIMG575

WechatIMG575

注:测试帐号必须填写已注册、真实的华为帐号。

添加完成后,使用此沙盒测试账号,支付时,可以直接进行沙盒支付测试

8.6.配置华为分析

1)接入流程
WechatIMG575
2)后台开启分析服务

a、如果没有华为开发者联盟帐号,需要先注册帐号并通过实名认证。详细操作请参见帐号注册认证。
b、参见创建项目和在项目中添加应用完成应用的创建。
c、登录AppGallery Connect网站,点击“我的项目”图标
d、选择需要查看分析数据的应用。
e、点击“华为分析”下的任意菜单,并点击“启动分析服务”按钮可开通分析服务。(注:需拥有产品管理权限才可开通服务)

WechatIMG575

f、进入“项目接入设置”页面,设置数据存储位置、数据共享设置、支持行业分析、标识用户、时区、货币、设置用户数据留存时间、设置自然周定义后,点击“完成”,即完成Analytics Kit 服务开通。对于支持行业分析,如果您已经设置应用的分类情况,则默认开启

WechatIMG575

g、开启后,选择项目设置–我的项目–应用,下载最新的配置文件,给到研发进行更新

WechatIMG575

3)调试

1、开启/停用调试模式

调试模式打开后,所有事件将实时上报,在应用调试界面可实时查看上报的数据。
说明:请将命令行中的“package_name”字段替换为您的应用包名
数据成功上报后,“华为分析 > 应用调试”页面会展示出数据,如下图

WechatIMG575

2、您可执行如下命令行,停用调试模式

8.7.开通华为性能分析

参考:https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-apms-viewdata

进入“质量->性能管理”,如果APM服务未开通,请点击“立即开通”按钮,开通APM服务

WechatIMG575

说明:
由于开通服务时可能需要设置数据存储位置,设置数据存储位置后会刷新agconnect-services.json文件里的配置。如果您开通服务时设置了数据存储位置,在开通完成后您需要重新下载agconnect-services.json文件并集成到您的工程中。

9. appsflyer后台配置

9.1 appsflyer卸载配置

说明:
需要完成Google Cloud后台Appsflyer卸载检测配置操作,如已操作可继续执行以下步骤

进入appsflyer后台 ,选择项目-配置-卸载模块,如未开启则点击开启

WechatIMG601

输入 选择HTTPV1
输入 Project ID(获取 Firebase Project ID )
点击Test connection 按钮,测试成功会提示:Success! Your app is connected to Firebase
然后保存设置,即完成操作。

WechatIMG594

10.AdMob后台配置

AdMob后台入口地址:https://apps.admob.com/v2/home

10.1 创建应用

创建应用分为,已上架,和未上架两个步骤,最终都需要应用上架应用商店。

10.1.1 添加未上架应用

10.1.1.1 添加应用

添加应用-1

在应用页中,点击“添加应用”

添加应用-7

在上架选项中,选择“否”

添加应用-8

输入“应用名称”,点击“添加应用”

添加应用-9

点击“完成”应用添加。

注意:到这里只是完成了应用添加,要准备广告实际投放使用,还需要完成后续完成应用商店添加。

10.1.1.2 应用商店信息配置

应用上架商店后,可以继续完成商店信息添加。

添加应用-9

应用 > 选择前面添加的应用 > 应用设置 > 在“应用商店详细信息” > 点击“添加”

添加应用-9

输入“应用商店地址”或者“应用包名”,点击“搜索”,在查找结果中找到目标应用,点击“添加”

添加应用-9

点击“继续”

添加应用-9

点击“保存”

添加应用-9

点击“完成”

添加应用-9

最终看到已经完成应用商店添加的应用设置页面

10.1.2 添加已上架应用

添加应用-1

在应用页中,点击“添加应用”

添加应用-1

在上架选项中,选择“是,此应用已在受支持的应用商店中上架”

添加应用-1

输入“应用商店地址”或“应用包名”,点击“搜索”,在查询结果中找到目标应用,点击“添加”

添加应用-1

确认目标应用无误,然后点击“继续”

添加应用-1

确认应用包名等信息,点击“添加应用”

添加应用-1

点击“完成”

10.1.3 获取应用ID

成功添加应用后,在 应用 > 目标应用 > 应用设置 > 应用ID 中可以查看应用ID,点击可以进行复制

图片16

10.2 设置app-ads.txt

完成应用添加后,AdMob需要对已上架应用进行验证,确定该账号是应用的所有者,才允许进行广告投放。这需要在该应用的商店详情页中的开发者网站地址中,完成app-ads.txt的添加与设置。

官方指引文档:https://support.google.com/admob/answer/9363762

10.2.1.确认或添加开发者网站

设置ads-3

在Play后台 > 选择应用 > 商店发布 > 商店设置 > 网站,中确认当前设置的网址,如果未设置,则可以点击“修改”进行设置

设置ads-4

在弹出信息修改页中,填入网址,点击“保存并发布”,在确认弹框中点击“保存并发布”

可以在应用的商店详情页中可以查看到该网址和跳转

设置ads-5

10.2.2.创建app-ads.txt文件

如果开发者网站之前已有app-ads.txt,可以直接使用之前的文件,如果没有则新创建一个,然后在该文件中添加从AdMob后台中得到的代码段。

设置ads-1

在AdMob后台 > 应用 > 查看所有应用 > 点击“设置app-ads.txt”

设置ads-2

在弹出的设置app-ads.txt指引中,点击复制代码段

设置ads-8

粘贴复制好的代码段,如果app-ads.txt已有内容,则在新行中粘贴,如图。最后保存修改。

10.2.3 在开发者网站发布 app-ads.txt文件

AdMob 的 app-ads.txt 抓取工具会根据应用商品详情中的开发者网站查找 app-ads.txt 文件。根据 app-ads.txt 规范,抓取工具会查找采用以下网址格式的文件:
https://<<主机名>>/app-ads.txt
http://<<主机名>>/app-ads.txt
如果开发者网站是带有子域名的,抓取工具会在开发者网站中探查最多一个子域名层级,建议app-ads.txt文件发布在不带子域名的网址下,更多详细规则查看官方说明:https://support.google.com/admob/answer/9363762?sjid=5773086561328805503-AP#step3

图片1

10.2.4 等待 AdMob 验证 app-ads.txt 文件

AdMob 最长可能需要 24 小时才会抓取并验证 app-ads.txt 文件。

10.2.5 查看 app-ads.txt 文件验证结果

在应用> 查看所有应用 > app-ads.txt 中可以查看应用的验证结果

设置ads-7

10.3 添加广告单元

广告单元可以简单理解为需要在应用上播放广告的广告位。广告单元分不同类型,目前SDK支持的有,横幅广告,插页广告,开屏广告,激励广告,播放广告需要使用广告单元ID。

在AdMob后台添加广告单元

广告单元-1

应用 > 目标应用 > 广告单元 > 添加广告单元

广告单元-2

选择广告单元类型

10.3.1.横幅广告

这是一种矩形广告,会占据应用中的一部分版面;可在一段时间后自动刷新。实际效果:

横幅

广告单元-3

输入名称 > 高级设置(查看或修改) > 创建广告单元

广告单元-4

成功创建广告单元后,可以得到该广告单元的ID,以供SDK使用。

10.3.2.插页广告

这是一种全屏广告格式,在自然间歇点和过渡点(比如在打完一关时)显示,实际效果:

插页

广告单元-5

输入名称 > 高级设置(查看或修改) > 创建广告单元

广告单元-6

成功创建广告单元后,可以得到该广告单元的ID,以供SDK使用。

10.3.3.开屏广告

这种格式的广告在用户打开或切换回您的应用时显示。广告会叠加在加载屏幕上。实际效果:

开屏

广告单元-7

输入名称 > 高级设置(查看或修改) > 创建广告单元

广告单元-8

成功创建广告单元后,可以得到该广告单元的ID,以供SDK使用。

10.3.4.激励广告

这是一种会为选择观看广告的用户提供奖励的全屏广告格式。这种广告与插页式激励广告的不同点在于,必须让用户能够自主选择是否观看。实际效果:

激励

广告单元-9

输入名称 > 输入奖励数量 > 输入奖品名 > 设置回调地址(具体看下一步) > 创建广告单元

设置回调地址:

广告单元-10

输入回调地址 > 验证网址 > 使用经过验证的网址,该地址由WingSDK后台提供。

广告单元-11

成功创建广告单元后,可以得到该广告单元的ID,以供SDK使用。

10.3.5.查看广告单元ID

在 应用 > 目标应用 > 广告单元 列表中能查看所有广告单元ID,点击可以进行复制

广告单元-12

也可以点击广告单元,进入编辑页面中进行选中复制

广告单元-14

10.3.6.费用底价

有效每千次展示费用底价设置。

10.3.6.1 Google优化

默认选中的是由Google优化,并且是接受所有价格。

较高的的底价,和适中的底价目前还是属于Google的BETA测试功能,越高的底价对应广告填充率越低,也就是用户可以观看的广告越少。

广告单元-15

10.3.6.2 人工定价

选择人工定价,需要指定“全球有效前次展示费用底价”,也可以针对不同国家地区设置不同的底价。

广告单元-16

10.4 关联Firebase

官方指引文档:https://support.google.com/admob/answer/6383165

10.4.1 权限要求

操作关联对账号权限有相关的要求:
6

10.4.2 关联

1

应用 > 目标应用 > 应用设置 > 管理管理的服务

2

会自动跳转到 设置 > 已管理的服务 页面,在 管理应用管理 > 展开目标应用,点击Firebase右侧的关联开关

关联弹窗,会有三种关联方式,根据目前Firebase的项目和应用创建情况选择符合自身的选项。

10.4.2.1 与现有的 Firebase 应用和项目相关联

3

Firebase后台已经创建了项目和该应用,则选择该项 , 然后选择该应用所在项目 , 如果在该项目中找到该应用则会在下方显示该应用,最后点击“关联应用”。

10.4.2.2 在现有 Firebase 项目中创建新应用

4

Firebase后台未创建该应用,如果希望在已有项目下创建该应用,则应该选择该项,然后选择需要创建该应用的项目,最后点击“创建并关联应用”。

10.4.2.3 创建新的 Firebase 应用和项目

5

Firebase后台未创建该应用,如果希望创建新的项目并在新项目下创建应用,则应该选择该项,点击“转至Firebase”,跳转到Firebase后台进行后续操作创建项目及应用操作。

10.4.2.4 关联结果

最终关联成功后弹框提示:

7

关联之后,在应用 > 目标应用 > 应用概览 中出现Firebase用户指标模块,有相关的数据。

8

10.5 UMP隐私权与消息

“隐私权和消息”工具可帮助您与用户沟通,以根据欧盟《一般数据保护条例》(GDPR) 及美国州级隐私保护法律等法规征求用户意见或收集停用请求,或者挽回因用户屏蔽广告而造成的收入损失。

目前只需应对GDPR要求即可,该部分功能是结合UMP SDK一起使用的,主要用于控制UMP同意弹窗的显示效果。

1

1.进入 隐私权和消息 > 管理

2

2.点击“创建消息”

3

3.在消息创建编辑界面,可以完成UMP同意弹窗消息的展示控制。

必须完成的内容:
1)添加应用,可以多选
2)选择不同意按钮的开启或关闭(建议选择关闭)

其他编辑控制项:
1)消息名称
2)默认语言,建议使用英语
3)其他支持的语言
4)关闭(不同意)按钮的控制,建议关闭

预览:
1)可以选择横竖屏,和语言
2)可以选择页面进行效果查看

4

应用选择页面中,勾选适用应用,可以多选,如果未填写隐私权政策网址,则需要点击“添加网址”并完成添加。

5

可选,点击“样式”可以进行显示的样式控制

6

可选,点击“定位”,可以查看生效区域,默认为GDPR国家地区,无需修改

7

4.完成编辑后,点击“发布”即可完成最终发布。发布之后,一般是立即生效,可以在应用上立即查看到发布后的改动。

10.6 审核

官方说明文档:https://support.google.com/admob/answer/10564477

10.6.1 审核条件

必须达成下面条件,AdMob才会开始进行审核:
1.应用必须在已支持的应用商店中上架,比如Google PlayStore。
2.AdMob后台中该应用必须已经通过app-ads.txt验证。
3.AdMob后台中的该应用必须已经设置好与支持的应用商店关联。

审核通常需要几天时间,应用审核通过,或者拒绝都会有相应的电子邮件通知,也可以在AdMob后台的所有应用页面查看状态。

10.6.2 审核状态

在 应用 > 所有应用 > 应用标签 > 审批状态 中查看应用的审批状态

2

1

11 Didomi后台配置 (Consent弹窗)

11.1 选择平台

参考 指引文档:https://support.didomi.io/create-your-consent-notice-directly-in-the-console-new-flow

image_4

image_4

11.2 选择框架

因为需要符合GDPR,所以必须选择TAB TCF 框架
image_4

11.3 法规配置

image_4

11.3.1 选择覆盖的法规

勾选GDPR
image_4

11.3.2 选择国家区域

默认是前面GDPR法规的适用国家地区,包含欧盟和欧盟经济合作区之类,测试的时候勾选覆盖所有国家地区,方便测试
image_4

11.3.3 同意配置项

包含以下项目:
1)同意有效期(法国限制是6个月,建议填写6个月);
2)拒绝同意持续时间(当用户拒绝所有目的和供应商时,重新发起同意采集弹窗的时间)
3)重新采集同意,允许向指定特定日期之前同意的用户重新发起,及限制两次同意采集弹窗间隔时间,防止过于频繁(添加新供应商时会重新弹出)
4)合法权益配置项:
a.当用户点击通知中的“不同意并关闭”按钮或“不同意继续”链接时,只有基于同意法律依据的用途和供应商才会被禁用。基于合法权益的目的和供应商将保持启用状态,用户可以通过首选项禁用它们。
b.当用户单击目的列表中的“不同意所有”按钮时,基于同意的法律依据将被禁用。基于合法利益的目的和供应商将保持启用状态,用户可以通过特定选择禁用它们。 保存并继续

image_36

11.3.4 供应商置项

image_35

概念:供应商是您与之共享数据(接收者)或从(外部源)收集数据的第三方

1)供应商选择
通过关键字搜索供应商,目前SDK需要选择,Facebook,Google Analytics Products(Firebase),AppsFlyer,Google Advertising Products(AdMob)。
可以新建自定义供应商,需要配置目的,隐私协议,数据存储时间,联系方式等等内容。

2)启用所有IAB供应商
不建议

3)IAB TCF 发行商限制
对于 IAB 供应商,您可以限制供应商处理个人数据的目的,并指定您要求供应商运营的法律依据。

4)目的
这些目的将在同意通知中向用户显示。已自动添加您的供应商所需的用途。
a.添加分类
b.添加新目的(在新建自定义供应商时可选)

image_34

11.4 自定义配置

image_32

11.4.1 样式配置

全局设置(所有法规生效)
1)品牌logo地址
2)品牌颜色(按钮,和整体主题颜色)
3)链接颜色

image_31

指定配置(特定法规配置)
1)标题
2)描述
3)弹出样式
a.底部弹窗
b.中间弹窗
c.全屏显示
4)按钮选项控制
a.同意并关闭(与b不能同时选择)
b.不同意并继续(与a不能同时选择)
c.右上角显示x(底部弹窗不可用)
d.选滚动时显示固定操作按钮(仅全屏下可选)
5)特殊控制选项
a.来自法国的流量:显示同意并关闭
b.来自意大利的流量:显示x按钮

image_30

11.4.2 内容编辑

全局配置
1)公司名称
2)公司位置
选择您的公司运营所在的国家/地区。这将在 TCF 同意字符串中使用,并且可用于 Didomi 的配置建议。
3)隐私协议链接
4)默认语言
5)多语言支持

image_29

指定配置
1)选择适用的语言
可以单独针对某一种支持的语言配置下面内容
2)首页配置
a.标准文本:必须选择标准的TCF文本,可选带供应商数量
b.额外的文案:会显示在前面
c.按钮文案:同意并关闭,不同意并关闭,更多
3)目的配置
a.标题
b.主体文案内容
c.启用批量操作
d.按钮配置
e.可选文本
4)供应商配置
a.主体文案内容
b.按钮:授权,禁用
可选文本

image_28

image_27

image_26

11.4.3 集成

前面选择GDPR时默认启用,自动与IAB供应商分享用户的同意操作。

image_25

11.5 发布

点击“发布”按钮完成发布

image_24

10.7.2 查看ConsentNoticeId(同意通知ID)

登录didomi后台

选择Consent Notices,选择应用,copy对应ID

iShot_2024-07-11_16.04.38

12 nowgg后台信息获取

12.1 PaymentId 付款编号获取

具体参考:https://docs.now.gg/nowstudio/publish#app_id

图片1

12.2 ClientId 登录凭证获取

具体参考:https://docs.now.gg/nowstudio/publish#login

图片2

12.3 支付验证API密钥获取

具体参考:https://docs.now.gg/nowstudio/publish#payments-verification-api-key

图片3

华为HMS渠道对接注意事项

wapublisher No Comments

对接了WINGSDK的应用,如果需要上华为渠道,需要注意以下事项:

1、华为包需要在wingsdk后台新建应用,不能和Google、IOS共用。建议不要接入Google相关功能,如Google登录、Google支付、消息推送。(sdk需要接入wa-sdk-huaweihms模块,不要接入wa-sdk-google模块)

2、华为游戏渠道包,游戏包名必须以.huawei结尾,例如com.wa.huawei

3、wingsdk后台新建的应用,平台信息需要配置包名-渠道名,如com.wa.huawei-Huawei,否则会影响市场推广

图片1

4、appsflyer创建应用时,如果是华为渠道包,渠道名固定为Huawei

图片1

5、AndroidManifest.xml中AppsFlyer的Channel设置Huawei

6、如使用华为分析功能,AndroidManifest.xml需要配置(开启后,选择项目设置–我的项目–应用,下载最新的配置文件,给到研发进行更新)

7、华为包如需Facebook 渠道,需要在Facebook 后台申请新的应用。如果要实现Facebook账号与Google包、iOS包互通,需要将Facebook 应用设置到同一个business manager下

附:华为HMS后台配置华为HMS后台配置

服务端接口文档

wapublisher No Comments

一、简介

此文档描述了使用SDK的CP(内容提供商)用到的与WINGSDK后台交付的所有接口的详细定义。
接口分两种:
1、WINGSDK后台实现,CP后台调用。
2、CP后台实现,WINGSDK后台调用。

名词说明:

名词 说明
CP 内容提供商(Content Provider)游戏、应用等
第三方平台登录 通过第三方社交平台的OAuth authentication登录第三方帐号,并绑定WINGSDK帐号
游客登录 通过设备信息登录帐号,设备信息与WINGSDK帐号绑定
应用内登录 用户通过CP提供的帐号系统登录,然后CP通过WINGSDK提供的接口将用户绑定WINGSDK的帐号,以便CP使用SDK提供的服务

二、登录

后台-登录
注:实线表示请求的发起,虚线表示请求的返回

登录流程说明:
1)SDK客户端封装了其它不同第三方登录平台,用户登录后,SDK会返回后台验证的参数
2)客户端去WINGSDK服务端获取在线token,服务端先去第三方登录平台验证accessToken,获取第三方用户信息,并返回对应的WINGSDK用户ID和token给客户端
3)客户端通过SDK API 获取token,userId,puserId,platform等用户信息,然后向游戏后台发送登录请求
4)游戏后台调用WINGSDK提供的接口验证用户登录,请求参数见下
5)如果是应用内登录,以上登录流程图可以将第三方登录平台当成CP服务端,CP需要提供验证用户帐号的接口供WINGSDK后台调用。

2.1 CP验证用户登录接口

接口说明:

接口相关 说明
接口提供方 WINGSDK平台
接口调用方 CP
接口实现方式 HTTP/POST
接口描述 登录流程图第8步,CP验证WINGSDK token是否合法,是否与ghwUserId匹配
生产环境 https://api.wingsdk.com/cpapi/v2/user/authorize.do
支持Http Method POST (需要以表单的形式提交 content-type=application/x-www-form-urlencoded)
返回信息格式 JSON

输入参数说明:

参数名 类型 是否必须 参数说明
token String(100) Y WINGSDK验证token,从客户端获取
appId String(100) Y WINGSDK应用ID
osign Stirng(100) Y MD5(
appId+
token +
secureKey
),如果有参数为空,用空字符串””替代,secureKey (登录验证key,即SDK后台对应的登录秘钥)由运营人员在SDK后台获取

返回格式

参数名 类型 是否必须 参数说明
code Int Y 状态码,请参照状态码说明表
msg String(32) Y 结果描述
error String(32) N 验证错误描述信息
ghwUserId Long N 验证成功后返回ghwUserId,CP通过检验客户端的ghwUser与此字段是否相等防止客户端冒充其它用户

请求示例:

$ curl -s -XPOST -H ‘content-type:application/x-www-form-urlencoded’ ‘https://api.wingsdk.com/cpapi/v2/user/authorize.do’ -d ‘appId=39a59e6182b911eebb5a02c85f0429f5&osign=2df4b4da628ff9e9da8ade02d5f9bd94&token=30_o1hgud5ogc9CSlgwul4AEaFr8jS0g3sD’

3.2 CP发货通知接口

该接口由移动平台定义,CP负责实现
发货接口调用说明
1.WINGSDK服务端系统订单在支付完成之后将实时通知到 CP 发货接口。

2.WINGSDK服务端系统通知 CP 发货时,若未接收到 CP 接口成功回复,该笔订单将重复通知 3次。

3.WINGSDK服务端系统在重复 3 次通知 CP 发货的过程中,若都未收到 CP 的成功回复,订单将进入后台轮询通知发货。每次轮询将有 3 次的通知;第一次轮询为订单新建之后的 15 分钟;之后每小时轮询通知一次; 24 小时之后隔日通知一次。

4.WINGSDK服务端系统收到 CP 接口返回 code=200 时将不再对该笔订单做重复通知。

5.WINGSDK服务端系统若对某笔订单重复通知,则 CP 需自行判断是否已经发货,若已发货则接
口直接返回 code=200,当作成功处理。

6.WINGSDK回调服务器的 IP 地址为 xx.xx.xx.xx,CP 可以考虑在回调接口中做该 IP 的白名单匹
配(可选)。不过 IP 地址可能存在变更,如有变更,将在SDK管理后台上另行通知

URL:http://****/deliver.do
支持Http Method:POST
返回信息格式:Json

输入参数说明:

参数名 类型 是否必须 参数说明
appId String(32) Y WINGSDK 应用 ID
orderId String Y WINGSDK订单号
defaultAmount Double Y 第三方支付后台配置的商品基准货币价格,单位(元);
如果非商品购买(如预点卡支付,短信充值、充值金额由玩家定义),此字段为0
defaultCurrency String(32) Y 第三方支付后台配置的商品价格使用的基准货币
gameAmount Int Y 游戏币数量,如钻石数,金币数
gameCurrency String(32) Y 游戏币种,如钻石,金币,元宝
productId String(32) N WINGSDK后台定义商品Id
如果非商品购买(如点卡支付,充值金额由玩家定义),此字段为
具体值:customAmountProduct,这类购买CP可以通过gameAmount给玩家发相应的游戏币
payChannel String Y 支付渠道:APPLE 、GOOGLE
userId Long Y 用户ID,WINGSDK游戏平台userId
serverId String Y 服务器ID
orderStatus Int Y 订单状态:
1:成功
2:失败
5:退款
6:争议
statusMsg String Y 订单状态说明
ots Int Y 订单创建时间戳(秒)
payDoneTime String N 支付完成时间(秒),已转成字符串,支付失败为空
extInfo String N CP 扩展信息字段,限长512,创建订单时通过客户端SDK传入,发货通知原样返回给CP。CP可以添加任意自定义的字段(JSON格式),用于检验订单信息或扩展其它功能,不超过长度限制即可。
如果CP的通知发货地址是动态变化的(比如每个服务区的地址都不一致),可以添加参数deliverUrl;
添加merId字段(选填),收款商户ID,使用场景:同一个支付渠道下有多个不同的收款验证信息(或收款帐号)。如果是APPLE支付渠道,merId使用客户端bundleId。
参考格式
{
“deliverUrl”:” http://game.com/deliver.do”,
“merId”:”payChanelMerId”
}
osign String Y 签名,MD5(
appId+
orderId+
defaultAmount+
defaultCurrency+
gameAmount+
gameCurrency+
productId+
userId+
serverId+
orderStatus+
ots +
payDoneTime +
extInfo +
paySecretKey
)
payDoneTime、extInfo参数无值则使用””(空字符串)代替参与签名
paySecretKey(支付验证key,即SDK后台对应的支付秘钥)由运营人员在SDK后台获取

返回结果说明:

参数名 类型 是否必须 参数说明
appId String(32) N 应用 ID
code Int Y 通知结果状态码,200表示通知成功
msg String(32) Y 结果描述
userId Long N 用户ID
deliverStatus Int N 订单发货状态
0:未知
1:发货成功
2:发货失败
CP在接受到发货通知后,如果能同步确定发货状态,可以返回此状态,如果不能确定发货状态,可以忽略此字段。CP也可以通过发货结果异步回调接口通知SDK发货结果

3.3 发货结果异步回调接口(可选)

接口说明:

接口相关 说明
接口提供方 WINGSDK平台
接口调用方 CP
接口实现方式 HTTP/POST
接口描述 1.CP在向用户发货成功后,将发货结果反馈给WINGSDK平台
2.CP在通知失败情况下(通知结果返回code值非200),需要重试通知
3.WINGSDK对发货成功的订单不再做修改发货状态(发货成功/发货失败),但发货失败的订单可以再修改发货状态。
4.CP对通知结果状态码code=200的订单不需要再重复通知。
生产环境 https://api.wingsdk.com/cpapi/v1/deliver_callback.do
支持Http Method POST
返回信息格式 JSON

输入参数说明:

参数名 类型 是否必须 参数说明
appId String(32) Y 应用 ID
orderId String Y WINGSDK订单号
productId String(32) Y 商品Id
如果非商品购买(如点卡支付,充值金额由玩家定义),此字段为
具体值:customAmountProduct
userId Long Y 用户ID,WINGSDK游戏平台userId
serverId String N 服务器ID
deliverStatus Int Y 订单发货状态
1:发货成功
2:发货失败
statusMsg String N 订单状态说明
osign String Y 签名,MD5(
appId+
orderId+
productId+
userId+
serverId+
deliverStatus +
paySecretKey
)
serverId等参数无值则使用””(空字符串)代替参与签名
paySecretKey(订单验证key,即SDK后台对应的支付秘钥)由运营人员在SDK后台获取

返回结果说明:

参数名 类型 是否必须 参数说明
code Int Y 通知结果状态码,200表示通知成功
msg String(32) Y 结果描述

3.4 退款通知接口(可选)

该接口由移动平台定义,CP负责实现
退款通知接口调用说明
1.WINGSDK服务端每天定时任务查询第三方支付平台退款订单列表,目前只支持Google play

2.用于Google支付渠道的服务邮箱账号需拥有查看财务的权限。

3.WINGSDK服务端系统通知 CP退款订单时,若未接收到 CP 接口成功回复,该笔退款订单将重复通知5次。每隔30分钟通知一次

4.WINGSDK服务端系统收到 CP 接口返回 code=200 时将不再对该笔退款订单做重复通知。

5.WINGSDK服务端系统若对某笔退款订单重复通知,则 CP 需自行判断是否已经处理,若已处理则接口直接返回 code=200,当作成功处理。

6.WINGSDK回调服务器的 IP 地址为 xx.xx.xx.xx,CP可以考虑在回调接口中做该 IP 的白名单匹配(可选)。不过 IP 地址可能存在变更,如有变更,将在SDK管理后台上另行通知

URL:http://****/refund_notify.do
支持Http Method:POST
返回信息格式:Json

输入参数说明:

参数名 类型 是否必须 参数说明
appId String(32) Y WINGSDK应用 ID
orderId String Y WINGSDK订单号
defaultAmount Double N 第三方支付后台配置的商品基准货币价格,单位(元);
如果非商品购买(如预点卡支付,短信充值、充值金额由玩家定义),此字段为0
defaultCurrency String(32) N 第三方支付后台配置的商品价格使用的基准货币
payAmount Double Y 用户支付的本地货币金额,单位(元)
currencyCode String(32) N 用户支付时候使用的本地货币币种
如果非商品购买(如点卡支付,充值金额由玩家定义),此字段为WINGSDK后台设置的支付渠道对应的基准货币
gameAmount Int Y 游戏币数量,如钻石数,金币数
gameCurrency String(32) Y 游戏币种,如钻石,金币,元宝
dollarAmount Double Y 将本地货币金额转换成美元($)的商品金额(精确至小数点后4位),如果没有本地货币,使用基准货币替代。
productId String(32) N WINGSDK后台定义商品Id
如果非商品购买(如点卡支付,充值金额由玩家定义),此字段具体值:customAmountProduct,这类购买CP可以通过gameAmount给玩家发相应的游戏币
payChannel String Y 支付渠道:APPLE 、GOOGLE
userId Long Y 用户ID,WINGSDK游戏平台userId
serverId String Y 服务器ID
orderStatus Int Y 订单状态
1:成功
2:失败
statusMsg String Y| 订单状态说明
ots Long Y 订单创建时间戳(秒)
payDoneTime String N 支付完成时间(秒),已转成字符串,支付失败为空
purchaseTime Long N 第三方支付平台购买时间(秒), 若无不返回
voidedTime Long N 第三方支付平台退款时间(秒), 若无不返回
extInfo String N CP 扩展信息,CP通过客户端SDK 传入,发货通知原样返回,CP可用此字段检验订单信息。
如果CP的通知发货地址是动态变化的(比如每个服务区的地址都不一致),可以通过此字段设置:参数格式为JSON,参数名为deliverUrl,参考格式
{
“deliverUrl”:” http://game.com/deliver.do”,
“otherInfo”:”otherInfo”,
“merId”:””
}
添加merId字段(选填),收款商户ID,使用场景:同一个支付渠道下有多个不同的收款验证信息(或收款帐号)。
如果是APPLE支付渠道,merId使用客户端bundleId
osign String Y 签名,MD5(
appId+
orderId+
defaultAmount+
defaultCurrency+
gameAmount+
gameCurrency+
productId+
userId+
serverId+
orderStatus+
ots +
payDoneTime +
purchaseTime +
voidedTime +
extInfo +
paySecretKey
)
payDoneTime、extInfo参数无值则使用””(空字符串)代替参与签名
paySecretKey(支付验证key,即SDK后台对应的支付秘钥)由运营人员在SDK后台获取

返回结果说明:

参数名 类型 是否必须 参数说明
appId String(32) N 应用 ID
code Int Y 通知结果状态码,200表示通知成功
msg String(32) Y 结果描述

四、奖励通知

4.1 邀请奖励通知接口定义

接口相关 说明
接口提供方 CP后端
接口调用方 WINGSDK平台
接口实现方式 HTTP/POST
接口描述 奖励通知调用说明:
1.WINGSDK服务端系统在用户触发奖励机制后会通知CP对指定用户发送奖励,奖励规则在SDK管理后台配置。
2.WINGSDK服务端系统通知 CP 奖励通知时,若未接收到 CP 接口成功回复,该奖励通知将重复通知 3次。
3.WINGSDK服务端系统在重复 3 次奖励通知的过程中,若都未收到 CP 的成功回复,通知将进入后台轮询通知。每次轮询将有 3 次的通知;第一次轮询为通知新建之后的 15 分钟;之后每小时轮询通知一次; 24 小时之后隔日通知一次。
4.WINGSDK服务端系统收到 CP 接口返回 code=200 时将不再对该奖励做重复通知。
5.WINGSDK服务端系统若对某笔奖励重复通知,则 CP 需自行判断是否已经发货,若已发货则接口直接返回 code=200,当作成功处理。
生产环境 CP自定义
支持Http Method POST
返回信息格式 JSON

输入参数说明:

参数名 类型 是否必须 参数说明
appId String(32) Y 应用 ID
eventName String Y 触发奖励机制的事件名称,由运营人员配置在WINGSDK后台
installTime Long Y 被邀请者应用安装时间戳
inviteePfUserId String(32) Y 被邀请者社交平台openId
inviteeUserId Long Y 被邀请者ghwUserId
inviteeGameUserId String N 被邀请者游戏ID
inviteeServerId String N 被邀请者服务区ID,安装事件可能为空可能为空
platform String Y 社交平台标识 FaceBook, VK
rewardType String Y 奖励物品标识: 钻石,元宝等
rewardAmount Int Y 奖励物品数量
rewardId String 奖励事件唯一标识Id
userId Long Y 邀请者 ghwUserId
serverId String N 邀请者服务区Id
osign String Y 签名,MD5(
appId +
eventName +
installTime +
inviteePfUserId+
inviteeUserId +
inviteeGameUserId+
inviteeServerId +
platform+
rewardAmount +
rewardId +
userId +
serverId+
secureKey )
参数无值则使用””(空字符串)代替参与签名,secureKey 服务端验证key,在SDK后台配置(即SDK后台对应的秘钥)

返回结果说明:

参数名 类型 是否必须 参数说明
appId String(32) N
code Int Y 通知结果状态码,200表示通知成功
msg String(32) Y
userId Long N
deliverStatus Int N 奖励状态
0:未知
1: 奖励成功
2: 奖励失败
CP在接受到奖励通知后,如果能同步确定奖励状态,可以返回此状态,如果不能确定奖励状态,可以忽略此字段

4.2 视频广告奖励通知接口定义

接口说明:

接口相关 说明
接口提供方 CP后台
接口调用方 WINGSDK平台
接口实现方式 HTTP/POST
接口描述 玩家观看完广告视频后,WINGSDK平台通知CP对玩家进行奖励
生产环境 CP自定义,配置到SDK后台即可。
支持Http Method POST
返回信息格式 JSON

输入参数说明:

参数名 类型 是否必须 参数说明
appId String(32) Y 应用 ID
viewId String Y 视频观看Id,全局唯一,每次观看至奖励一次,WINGSDK平台可能会通知多次,CP需要判断去重,避免重复发放奖励
rewardType String Y 奖励物品标识:钻石,元宝等
rewardAmount Int Y 奖励物品数量
userId Long Y 玩家的WINGSDK平台用户ID
serverId String N 玩家所在的游戏服
gameUserId String Y 玩家的角色Id
extInfo String Y 扩展字段,游戏在客户端观看视频前通过API传给SDK,原样返回给CP后台
osign String Y 签名,MD5(
appId +
viewId+
rewardType+
rewardAmount +
userId +
serverId+
gameUserId+
extInfo+
secureKey )
参数无值则使用””(空字符串)代替参与签名,secureKey 服务端验证key,在SDK后台配置(即SDK后台对应的秘钥)

返回结果说明(JSON格式):
失败返回错误码,请参照附录1的状态码说明表;

参数名 类型 是否必须 参数说明
code Int Y 状态码,请参照状态码说明表
msg String Y 结果描述

4.3 admob激励广告奖励通知接口定义

接口说明:

接口相关 说明
接口提供方 CP后台
接口调用方 WA平台
接口实现方式 HTTP/POST
接口描述 玩家观看完激励广告后,WA平台通知CP对玩家进行奖励
生产环境 CP自定义,配置到SDK后台即可。
支持Http Method POST
请求信息格式 application/x-www-form-urlencoded
返回信息格式 JSON

接口调用说明
连续通知3次,都失败则不再通知。

输入参数说明:

参数名 类型 是否必须 参数说明
appId String(32) Y 应用 ID
transactionId String Y 广告奖励订单流水号
adName String Y 广告名称
rewardItem String Y 奖励物品标识:钻石,元宝等
rewardAmount Int Y 奖励物品数
userId Long Y 玩家的WA平台用户ID
serverId String N 玩家所在的游戏服
extInfo String N 扩展字段,游戏在客户端观看视频前通过API传给SDK,原样返回给CP后台
osign String Y 签名,MD5(
appId +
transactionId +
adName+
rewardItem +
rewardAmount +
userId +
serverId+
extInfo+
secureKey )
参数无值则使用””(空字符串)代替参与签名,secureKey 服务端验证key,在SDK后台配置

返回结果说明(JSON格式):
失败返回错误码,请参照附录1的状态码说明表;

参数名 类型 是否必须 参数说明
code Int Y 状态码,请参照状态码说明表
msg String Y 结果描述
deliverStatus int N 奖励发货状态
0:未知
1:发货成功
2:发货失败
CP在接受到发货通知后,如果能同步确定发货状态,可以返回此状态,如果不能确定发货状态,可以忽略此字段。

4.4 礼包通知接口定义

接口说明:

接口相关 说明
接口提供方 CP后台
接口调用方 WingSDK平台
接口实现方式 HTTP/POST
接口描述 给玩家发放礼包
生产环境 CP自定义,配置到WingSDK后台即可。
支持Http Method POST
请求信息格式 application/x-www-form-urlencoded
返回信息格式 JSON

输入参数说明:

参数名 类型 是否必须 参数说明
appId String(32) Y 应用 ID
giftId String Y 礼包id
transactionId String Y 唯一流水号,可根据此字段来判断是否是重复通知。
userId Long Y 玩家的WingSDK平台用户ID
serverId String Y 玩家所在的游戏服
osign String Y 签名,MD5(
appId +
giftId +
transactionId+
userId +
serverId+
secureKey )
参数无值则使用 “”(空字符串)代替参与签名,secureKey 服务端验证key,由运营提供

返回结果说明(JSON格式):
失败返回错误码,请参照附录1的状态码说明表;

参数名 类型 是否必须 参数说明
code Int Y 状态码,200表示通知成功;400表示通知失败
msg String Y 结果描述

五、数据查询接口

5.1 通过第三方OPEN_ID获取WINGSDK平台用户ID

接口说明:

接口相关 说明
接口提供方 WINGSDK平台
接口调用方 CP后端
接口实现方式 HTTP/POST
接口描述 通过第三方平台openId获取WINGSDK平台的userId
生产环境 https://api.wingsdk.com/cpapi/v1/get_user_info.do
支持Http Method POST
返回信息格式 JSON

输入参数说明:

参数名 类型 是否必须 参数说明
appId String Y WINGSDK平台分配的应用id
platform String Y 第三方平台标识: FACEBOOK、APPLE、GOOGLE、GUEST等
openId String Y 第三方平台openId
osign String Y 验证用的加密串
Md5(
appId+
appKey+ //登录验证key,注意保密
platform+
openId
)

返回结果说明(JSON格式):
失败返回错误码,请参照状态码说明表

参数名 类型 是否必须 参数说明
code Int Y 状态码,请参照状态码说明表
msg String Y 结果描述
userId Long N SDK平台用户Id

5.2 查询区服角色信息

该接口由移动平台定义,CP负责实现
查询区服信息接口调用说明
1、WA服务端系统通过WA的userId来查询用户已经玩过的区服角色以及最近玩过的区服角色。
2、Url:https://****/serverinfo.do

接口说明:

接口相关 说明
接口提供方 CP后端
接口调用方 WINGSDK平台
接口实现方式 HTTP/POST
接口描述 通过WA的userId来查询用户已经玩过的区服角色
生产环境 https://****/serverinfo.do
支持Http Method POST
返回信息格式 JSON

输入参数说明:

参数名 类型 是否必须 参数说明
appId String Y WINGSDK平台分配的应用id
userId Long Y 用户ID,WA游戏平台userId
osign String Y 验证用的加密串Md5(appId+userId+secureKey) //secureKey即SDK后台对应的登录密钥, 需运营人员在SDK后台获取

返回结果说明(JSON格式):
失败返回错误码,请参照状态码说明表

参数名 类型 是否必须 参数说明
code Int Y 状态码,请参照状态码说明表
msg String Y 结果描述
currentServerId String Y 当前服务器Id,没有则是最近登录的服务器Id.(游戏没有区服概念时可以传”1”)
currentRoleId String Y 当前角色Id,没有则是最近使用的角色Id
serverList object Y 数组对象
serverList为数组对象,包含数据如下,见示例
serverId String Y 服务器Id。(游戏没有区服概念时可以传”1”)
serverName String Y 服务器名称。(游戏没有区服概念时可以传”server1”)
roleList object Y 数组对象
roleList为数组对象,包含数据如下,见示例
roleId String Y 角色Id
roleName String Y 角色名称

示例:

六、消息推送

6.1 消息推送接口

接口说明:

接口相关 说明
接口提供方 WA平台
接口调用方 CP
接口实现方式 HTTP/POST
接口描述 可通过该接口发起推送任务,需要在sdk后台配置IP白名单后,才能正常访问此接口
生产环境 https://api.wingsdk.com/cpapi/v1/user/push.do
支持Http Method POST
报文类型 application/json; charset=utf-8
返回信息格式 JSON

请求报文头:

字段 类型 必须 参数说明
appId String Y WA应用ID
sign String Y 接口调用签名, 小写MD5(appId + body + secureKey), secureKey (登录验证key)由运营人员在SDK后台生成

body说明:

参数名 类型 是否必须 参数说明
message Object Y 消息对象
message.id String N 自定义ID,当一次推送任务需要多次请求接口时,可以设置相同的ID,标识为同一任务,便于回溯推送情况(不超过64字符)
message.title String Y 消息题目(不超过64字符)
message.body String Y 消息内容(不超过200字符)
message.platform Int Y 推送平台;0-安卓 1-IOS
message.priority String Y 推送优先级;1-低;2-中;3-高;
message.pushType Int Y 推送类型;0-自定义uid推送;1-全服推送;
message.uids List N Uid列表(最多支持1000个),当pushType为”自定义uid推送”时,该参数必须要传值。[123,456,789]

返回格式:

参数名 类型 是否必须 参数说明
code Int Y 状态码,请参照附录1
msg String(32) Y 结果描述

调用实例:

附录1:返回状态码说明

通用返回状态码说明(参考了Http状态码设计):

状态码code 说明
200 成功
400 错误请求:请求参数有错,头信息有误等,导致请求无法被正确理解
401 请求未认证:访问受限资源是缺少认证信息,或者认证未通过
403 禁止访问:由于应用上下文原因或请求端上下文的原因被禁止访问资源,例如IP限制等;
404 找不到被访问资源:接口不存在、页面不存在或对应的业务实体找不到
500 服务器内部故障
501 所请求接口或页面未实现

平台自定义状态码说明

状态码code 说明
4010 无效appId: appId不存在或未开启
4011 无效osign:osign校验失败
4079 推送配置无效,APNS证书及密码(IOS推送)或Firebase(Android推送)认证 Key未配置