Uncategorized

WingSteamExeSDK 使用指南(1.0.1)_bak_20240821

wapublisher No Comments

1.简介

WingSteamExeSDK主要是为满足PC端Steam平台Windows的游戏需要,为此类游戏提供基于Steam平台的登录、支付、数据收集等通用功能。以下文档中会把WingSteamExeSDK简称为SDK。

2.集成

2.1.SDK库选择

SDK提供了多个版本的库文件,可以根据项目需求使用。

序号 平台 是否MT编译 lib库文件 SDK下载
1 x86 wingsdk.lib 下载
2 x64 wingsdk64.lib 下载
3 x86 wingsdk_mt.lib 下载(推荐)
4 x64 wingsdk64_mt.lib 下载

MT编译版本:已经内置VC运行库内容,不依赖于外部VC运行库。
普通(MD)编译版本:该版本会使用附带的vcruntime140.dll,msvcp140.dll,vcruntime140_1.dll这几个文件。

对应的dll版本:

版本 包含文件 备注
x86 libcrypto-3-wing.dll
libssl-3-wing.dll
sdkencryptedappticket.dll
steam_api.dll
wingsdk.dll
msvcp140.dll
vcruntime140.dll
x64 ibcrypto-3-x64-wing.dll
libssl-3-x64-wing.dll
sdkencryptedappticket64.dll
steam_api64.dll
wingsdk64.dll
msvcp140.dll
vcruntime140.dll
vcruntime140_1.dll
x86_mt libcrypto-3-wing-mt.dll
libssl-3-wing-mt.dll
sdkencryptedappticket.dll
steam_api.dll
wingsdk_mt.dll
x64_mt libcrypto-3-x64-wing-mt.dll
libssl-3-x64-wing-mt.dll
sdkencryptedappticket64.dll
steam_api64.dll
wingsdk64_mt.dll

2.2.项目集成

以VisualStudio项目工程为例

1.下载最新版本SDK压缩包,并解压
2.SDK头文件引入
1)复制include文件夹及其内容到项目中,主要包含wing目录下的wing_api.h头文件
2)右键项目->属性->C/C++->常规->附加包含目录,填入include文件夹路径,例如include文件夹是复制到项目根目录下,则路径可以填写:$(ProjectDir)include

图片1

图片2

3.SDK库文件引入
1)复制lib文件夹及其内容到项目中,并在项目属性页->链接器->常规->附加库目录,中填入lib文件夹路径,例如lib文件夹是复制到项目根目录下,则路径可以填写:$(ProjectDir)lib
2)在项目属性页->链接器->输入->附加依赖项中填入sdk的lib文件,如果是x86编译,则填入wingsdk.lib,如果是x64编译,则填入wingsdk64.lib,如果使用mt版本,则选择对应带mt后缀lib文件。
图片3

图片4

4.SDK的Api使用
1)在项目中引入。以前面步骤的配置路径作为示例,那么引入的路径为 #include “wing/wing_api.h”
2)在项目中使用。wing_api.h的接口为命名空间+方法的使用方式,例如:sdk的初始化方法使用,WingProxy::Init(“appId”,“appKey”,[](int code,string msg,string data){});

5.项目编译后,需要把sdk用到的dll文件复制到编译后的exe程序目录中,否则项目无法正常运行。具体版本对应的dll文件,参考前面dll版本文件对应表。例如x86的dll内容如下图:

图片5

6.运行程序

2.3.三方库版本

三方库 版本 包含dll(只列举x86版本) 功能
OpenSSL 3.1.3 libcrypto-3-wing.dll
libssl-3-wing.dll
网络请求
SteamSDK 1.5.8 steam_api.dll
sdkencryptedappticket.dll
Steam平台SDK

3.接口说明

3.1.使用方式

sdk的api采用命名空间+方法的形式定义的,WingProxy是所有sdk接口的命名空间,以支付是否可用方法为例,使用方式:

3.2.回调函数

sdk接口的参数中,除了一些常见类型参数,在wing_api.h中还声明了WingCallback回调函数,参数说明如下:

参数 类型 说明
code int 状态码,具体取值参考《状态码说明》章节
msg std::string 状态码说明
data std::string Json字符串,里面包含该接口会返回的字段,例如登录接口登录成功后返回的data内容:{“msg”:”token refreshed”,”code”:200,”isFirstLogin”:0,”userId”:7822920,”token”:”30_o1hejvBB22LKMu”}

4.SDK接口

4.1.初始化

调用下面接口对SDK进行初始化,建议在程序开始时首先调用,确保后续其他sdk接口可以正常使用

参数说明:

参数 类型 必填 说明
appId std::string Y appId,具体值从运营处获取
appKey std::string Y appKey,具体值从运营处获取
WingCallback WingCallback Y 回调函数

代码示例:

4.2.退出程序

调用下面接口对SDK内资源进行释放,必须在程序退出前调用。

4.3.登录

使用下面接口进行登录

参数说明:

参数 类型 必填 说明
WingCallback Y 回调函数

WingCallback的data内容字段说明:

字段名 类型 必填 说明
userId long Y 用户Id
token string Y 在线token

代码示例:

4.4.退出登录

调用下面接口退出账号

4.5.检查支付是否可用

进行支付之前,需要先判断支付是否可用

返回值为bool类型,true 表示支付可用,false表示支付不可用。

4.6.购买商品

进行支付之前,需要先判断支付是否可用

参数说明:

参数 类型 必填 说明
productId std::string Y WINGSDK平台的商品ID
extInfo std::string Y CP 扩展信息字段,限长512(JSON格式),WING服务器到CP服务器发货通知时原样返回给CP。如果CP的通知发货地址是动态变化的(比如每个服务区的地址都不一致),可以通过此字段设置:参数格式为标准JSON,参数名为 deliverUrl,参考格式{ “deliverUrl”:” http://game.com/deliver.do”, “otherInfo”:”otherInfo”,“merId”:””}merId字段(选填),收款商户ID,使用场景:同一个支付渠道下有多个不同的收款验证信息(或收款帐号)。无内容建议传入空字符串“”
WingCallback Y 回调函数

WingCallback的data内容字段说明:

字段名 类型 必填 说明
orderId std::string Y 订单ID
productId std::string Y WINGSDK平台的商品ID
currency std::string Y 基准货币
amount long long Y 基准货币价格
quantity int Y 购买数量,目前一般都是1
extInfo std::string N 扩展信息字段,内容与该方法传入的extInfo相同
status int Y 1表示支付成功,其他表示支付失败

代码示例:

4.7.游戏必要参数设置

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

参数设置时机除了按照说明设置,另外需要特别注意在游戏启动时的设置时机,具体参考 流程要求

4.7.1 设置服务器ID

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

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

4.7.2.设置GameUserId

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

注意:
1.必须在调用其他事件前设置。
2.游戏角色ID是游戏角色在游戏中的ID,不是WINGSDK自身的UserId。
3.若未创角前拿不到游戏角色ID,可以先设置-1,创角后再设置一次正确的角色ID

4.7.3.设置用户等级Level

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

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

4.7.4.设置玩家游戏昵称

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

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

4.8.数据收集

4.8.1.流程要求

WINGSDK数据收集使用在游戏的过程中打点的方式,如图所示:

图片6

注意:

1.以上流程图中涉及到的几个接口是有时序要求的,请参考流程图中的逻辑步骤进行设置:WingProxy::SetServerId()、WingProxy::SetGameUserId()、WingProxy::SetLevel()、WingProxy::SetNickName()、ghw_user_import事件、ghw_user_create事件。

2.其它的事件如ghw_level_achieved、ghw_self_tutorial_completed等请根据对应业务逻辑,在对应业务发生时调用接口发送。

序号 事件(接口)名称 事件描述 事件作用 建议触发点 备注
1 SetServerId 设置服务器ID 标记玩家当前所在的服务器,后台根据该字段统计每个服务器的数据 登录游戏服成功后
2 SetGameUserId 设置玩家角色ID 标记玩家当前的游戏角色ID,后台根据该字段统计玩家的数据 登录游戏服成功后
3 SetLevel 设置玩家当前等级 标记玩家当前的游戏角色等级 玩家等级发生变更后,如登录游戏服成功后、玩家完成升级后
4 SetNickName 设置玩家昵称 标记玩家当前的游戏昵称 玩家设置昵称后
5 ghw_user_import 玩家登录游戏服 记录玩家登录游戏服的动作,后台根据该事件统计导入数、登录数、导入留存等数据 玩家登录游戏服成功后 需要先调用SetServerId、SetGameUserId、SetLevel接口
6 ghw_user_create 玩家创建角色 记录玩家创建角色的动作,后台根据该事件统计创角数 玩家创建角色成功后 需要先调用SetServerId、SetGameUserId、SetLevel接口
7 ghw_user_info_update 更新用户信息 更新用户信 玩家信息更新时 需要先调用SetServerId、SetGameUserId、SetNickname接口
8 ghw_level_achieved 更新玩家等级 更新玩家等级,后台根据此字段更新玩家等级 玩家达到新的等级时 需要先调用setLevel接口更新玩家等级
9 ghw_self_lv_x 更新关键等级 更新关键等级 关键等级到达时 属于自定义事件
10 ghw_self_tutorial_completed 完成新手任务 完成新手任务 完成新手任务时 属于自定义事件

4.8.2.发送事件

使用下面接口发送事件

参数说明:

参数 类型 必填 说明
eventName const std::string& Y 事件名称
params const std::string& N 事件参数,可以不传,默认空。以json字符串的形式传递。例如需要设置isFirstEnter为1,则应该传递内容为:{“isFirstEnter”:1}。
eventValue double N 事件价值,可以不传,默认无。

代码示例:

4.8.3.预定义事件

4.8.3.1.ghw_user_import导入用户事件(进服)

说明:导入用户事件,玩家第一次进某个服时调用

参数名 类型 说明 必填 备注
isFirstEnter int 是否第一次进服 Y 0->否;1->是;默认为0

注意:发送ghw_user_import事件前需调用设置服务器ID接口更新服务器id、设置gameUserId接口更新游戏用户id
代码示例:

4.8.3.2.ghw_user_create 创建角色

说明:创建游戏角色,游戏角色创建时调用

参数名 类型 说明 必填 备注
nickname string 角色名(昵称) Y
registerTime long long 创建时间 Y 注册时间戳,13位数,单位为毫秒(1970以后)
gender number 角色性别 N 0 女,1 男,2 未知
roleType string 角色类型 N
vip number 等级 N
bindGameGold number 绑定钻石 N
gameGold number 用户钻石数 N
fighting number 战斗力 N
status number 状态 N 状态标识,-1: 锁定,1:未锁定

代码示例

4.8.3.3.ghw_user_info_update 更新用户信息

参数名 类型 说明 必填 备注
roleType String 角色类型 N
nickname String 角色名称 Y 无昵称时,可填写空字符串
vip int 等级 N
status int 状态 N 状态标识,-1:锁定,1:未锁定

代码示例

4.8.3.4.ghw_level_achieved 等级增长事件

说明:统计玩家等级增长事件,达到等级时调用。

参数名 类型 说明 必填 备注
score number 账户分数 N
fighting number 战斗力 N

注意:发送ghw_level_achieved事件前需调用设置用户等级level接口更新用户等级信息。

4.8.4.自定义事件

如果发送的事件不属于预定义事件范围,事件发送时会自动补上ghw_self_前缀,例如关键等级5的事件名称传入,lv_5,最终发送的事件名称为ghw_self_lv_5。

4.8.4.1.ghw_self_lv_x关键等级事件

代码示例:

4.6.4.2.ghw_self_tutorial_completed完成新手任务

5.调试日志

SDK的日志默认是关闭状态的,开启日志后会在程序目录下生成winglog.log日志文件,可以查看SDK的日志信息。

开启SDK调试日志:
1.SDK日志的开启需要提供设备的ClientId,在用户的隐藏目录AppData下找到SharedConf配置文件,以文本的形式查看文件可以得到ClientId值。
具体路径:C:\Users\用户名\AppData\Local\WingSteamExeSdk\SharedConf
文本内容参考:{“ClientId”:”5c56b3400000000000000e0a76c72″}
2.把ClientId的值提供给运营,运营在后台操作加入测试设备
3.重启已接入SDK的程序,进行SDK相关操作,即可在winlog.log查看SDK输出的相关日志信息。

6.状态码说明

状态码 说明
200 操作成功
-400 一般错误
-401 SDK未初始化
-402 Steam初始化失败
-403 Steam登录授权超时
-404 Steam登录授权失败
-405 未登录
-500 服务器异常
-501 服务器异常:json解析异常
400 失败
500 服务器内部故障
501 所请求接口或页面未实现
4010 无效appId: appId不存在或未开启
4011 无效osign:osign校验失败
4012 请求已过期:ots校验失败
4013 第三方平台验证失败
4017 用户不存在(没有找到)
4019 无效orderId
4020 订单验证失败
4023 未找到渠道信息
4025 汇率转换失败
4026 支付渠道已关闭
4029 登录渠道已关闭
5005 该设备不能支付或者不允许支付
5006 支付过程中出错

WINGSDK_Android使用指南v4.1.1_bak20240708

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、分享接口,支持分享链接、文字、图片、视频
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项目集成、命令行集成,可以根据需要选择其中任意一种方式。

集成参考demo: demo代码下载地址

第三方SDK依赖关系如下表

第三方SDK 版本
GOOGLE com.google.android.gms:play-services-base:18.2.0
com.google.android.gms:play-services-auth:20.5.0
com.google.android.gms:play-services-games:v1-23.1.0
com.google.android.gms:play-services-ads-identifier:18.0.1
com.android.billingclient:billing:6.0.0
com.google.android.play:review:2.0.1
com.google.gms:google-services:4.3.10
Google Firebase com.google.firebase:firebase-analytics:21.6.1
com.google.firebase:firebase-messaging:23.4.1
FACEBOOK 17.0.0
APPSFLYER 6.13.1
CHARTBOOST 8.3.1
VK 1.6.9
Twitter 3.3.0
AIHELP 4.2.6
glide 4.11.0
Instagram 更新至2018年12月11日(无版本号)
华为海外 com.huawei.hms:hwid:6.7.0.300
com.huawei.hms:iap:6.4.0.301
com.huawei.hms:hianalytics:6.8.0.300
com.huawei.agconnect:agconnect-crash:1.7.2.300
com.huawei.agconnect:agconnect-apms:1.6.1.303
com.huawei.hms:ads-identifier:3.4.56.300

2.2.1 Gradle自动集成

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

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

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

2)以上的url为WingSdk仓库地址:http://repo.wingsdk.cn:8081/repository/winga-group/

在程序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.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推荐位需知

2.3.1.2 Activity结果传递配置

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

2.3.2 SDK初始化

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

注意:
1.SDK初始化必须在第一个Activity的onCreate()方法中调用,必须在UI线程中调用。
2.从回调中获取初始化结果,所有SDK接口都必须在SDK初始化成功的情况下才能调用。
3.建议在初始化中过程中增加laoding状态,返回结果后再关闭loading

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用接口的Activity
callback WACallback Y 初始化结果回调 1)onSuccess 初始化成功
2)onError 初始化失败

示例代码:

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会缓存当前登录方式,下一次在启用缓存的前提下使用登录窗口登录,会自动使用上一次登录方式登录,不再弹出登录窗口。清除掉缓存后,可以重新弹出登录窗口,清除缓存调用以下接口:

注意:从3.18.0开始,调用WAUserProxy.logout()时,内部已经包含清除登录窗口缓存逻辑,可以不调用该方法。

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 平台类型 当前登录的平台名称
isGuestAccount int 是否游客登录 0 不是游客账号 1是游客账号

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平台的商品信息,并非第三方平台的商品信息。建议在游戏商品页出来之前调用,最好是支付初始化完后就开始调用一次,可以参考下方代码示例进行调用:

参数说明:

参数名 类型 必填 说明 备注
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.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数据收集使用在游戏的过程中打点的方式,如图所示:

事件流程.drawio

  1. 以上流程图中涉及到的几个接口是有时序要求的,请参考流程图中的逻辑步骤进行设置:setServerId、setGameUserId、setLevel、setNickname、ghw_user_import事件、ghw_user_create事件
  2. 其它的事件如ghw_level_achieved、ghw_self_tutorial_completed、ghw_self_lv_x等请根据对应业务逻辑,在对应业务发生时调用接口发送
序号 事件(接口)名称 事件描述 事件作用 建议触发点 备注
1 setServerId 设置服务器ID 标记玩家当前所在的服务器,后台根据该字段统计每个服务器的数据 登录游戏服成功后
2 setGameUserId 设置玩家角色ID 标记玩家当前的游戏角色ID,后台根据该字段统计玩家的数据 登录游戏服成功后
3 setNickname 设置玩家角色昵称 标记玩家当前的游戏角色昵称,后台订单记录中会记录该昵称 登录游戏服成功后、创角后、修改昵称后
4 setLevel 设置玩家当前等级 标记玩家当前的游戏角色等级 玩家等级发生变更后,如登录游戏服成功后、玩家完成升级后
5 ghw_user_import 玩家登录游戏服 记录玩家登录游戏服的动作,后台根据该事件统计导入数、登录数、导入留存等数据 玩家登录游戏服成功后 需要先调用setServerId、setGameUserId、setNickname、setLevel接口
6 ghw_user_create 玩家创建角色 记录玩家创建角色的动作,后台根据该事件统计创角数 玩家创建角色成功后 需要先调用setServerId、setGameUserId、setNickname 、setLevel接口
7 ghw_self_tutorial_completed 完成新手任务 标记玩家完成新手任务
8 ghw_level_achieved 更新玩家等级 更新玩家等级,后台根据此字段更新玩家等级 玩家达到新的等级时 需要先调用setLevel接口更新玩家等级
9 ghw_self_lv_x 更新玩家关键等级 更新玩家关键等级,如ghw_self_lv_3、ghw_self_lv_5 玩家达到关键等级时
10 ghw_user_info_update 更新用户信息 更新用户信 玩家信息更新时 需要先调用setServerId、setGameUserId、setNickname接口

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事件前需调用设置服务器ID接口更新服务器id、设置gameUserId接口更新服务器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:未锁定

注意:发送ghw_user_create事件前需调用setGameUserId、setNickname、setLevel、setServerId接口
参考示例:

2.6.2.6 ghw_self_tutorial_completed 完成新手任务

说明:新手完成新手任务时调用
无参数

参考示例:

2.6.2.7 ghw_self_lv_x 关键等级

说明:完成关键等级时调用,如ghw_self_lv_1、ghw_self_lv_3

参考示例:

无参数

2.6.2.8. ghw_user_info_update 更新用户信息

参数名 类型 说明 必填 备注
roleType String 角色类型 N
nickname String 昵称 Y 无昵称时,可填写空字符串
vip int 等级 N
status int 状态 N 状态标识,-1:锁定,1:未锁定

代码示例:

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.0 设置游戏玩家昵称

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

注意:
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.2.3 如何获取 client_id

打开调试模式后,显示Logcat工具,点击-设备信息-clientid,点击获取

F757A84C441ED6EC3E50CE12F7A8F87F

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 使用接口登录,登录平台取值APPSELF(CHANNEL_APPSELF),需要将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可根据需要实现相应功能。

onBoundAccountChang方法参数说明:

参数名 类型 取值 备注
binding boolean true或false true说明本次回调是账号绑定操作,false说明本次回调是账号解绑操作
WABindResult WABindResult WABindResult 绑定或解绑结果,具体包含属性参考下方WABindResult字段说明

WABindResult方法参数说明:

参数名 类型 取值 备注
code int 状态码 200为成功,其他为错误码
message String 状态消息
platform String 平台 在WAConstants类中定义,详情请看5.1.2 平台取值
accessToken String 平台token
platformUserId String 平台user id

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 分享

分享内容到社交平台,支持分享链接、图片、视频,调用接口

参数说明

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

必须需要在AndroidManifest.xm中添加游戏服务的APPID,才可调用Game Service相关功能,具体参考《Google Game Service配置》

3.5.5.1 登录Game Service

登录Game Service调用接口:

注意:3.17.0之后Play游戏服务会在游戏启动时自动尝试登录(只有完成上一步的Game Service配置才会进行登录),若无需获取WAPlayer信息,并且不强制用户登录Play游戏服务,则可以不进行这一步操作。

参数说明:

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

3.5.5.2 成就解锁

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

参数说明:

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

3.5.5.3 分步成就进度增加

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

参数说明:

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

3.5.5.4 分步成就进度设置

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

参数说明:

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

3.5.5.5 显示隐藏成就

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

参数说明:

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

3.5.5.6 展示成就列表

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

参数说明:

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

3.5.5.7 加载成就列表

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

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用Activity
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.8 判断是否已经登录Game Service

判断当前是否已经登录了Game Service,调用以下接口,结果在callback中回调,onSuccess回调表示已经登录,onError回调表示未登录。

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 调用Activity
platform String Y 平台类型 平台类型在WAConstants类中定义,目前支持Google 平台
callback WACallback Y 回调方法,结果返回 onSuccess回调表示已经登录;onError回调表示未登录;

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 Firebase

原来的push模块更改为Firebase模块。Firebase为3.9.3及之后版本必须接入的模块。
Firebase包含推送通知及统计分析(包括事件跟踪)功能。

温馨提示: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事件记录开关

在AndroidManifest.xml中配置Firebase的事件记录开关

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.7.4 自定义通知图标及背景颜色

该项为可选配置,但是为了更好的通知显示效果,建议配置。
若不使用自定义图标,通知会默认以白色渲染的应用图标作为通知图标来显示,效果参考下方图示。

a、自定义通知图标

在res/drawable文件夹下添加通知图标的图片文件。
通知图标要求:
1.文件名ic_wa_push_notification.png
2.图片格式png
3.图标尺寸参考应用桌面图标。
4.尽量带透明效果,体现图标易于辨认的核心形状。不要有圆形,圆角,方形等不透明背景,保证轮廓辨识度,因为Android系统默认会把该图标统一渲染颜色。若是核心形状辨识度不足,会影响视觉体验。下方有相应效果示例。

b、自定义通知图标背景颜色

1.在AndroidManifest.xml清单中添加下面内容

2.在res/values/colors.xml中添加 color_wa_push_notification 颜色声明,其中色值修改为项目要求的颜色

效果展现

Demo应用图标原图:
图片1

通知显示效果:

图片2

自定义通知图标增加透明效果,及设置通知图标背景颜色为红色:
图片3

自定义后通知显示效果:

图片4

3.7.5 Android 13运行时通知权限申请

以Android 13为目标的应用项目,需要在恰当的时机(比如进入游戏时,或勾选开启通知按钮)申请通知权限,否则新安装应用无法接收Firebase通知,以下为申请通知权限逻辑示例:

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. 判断是否开启AiHelp

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

3.9.2. 展示AiHelp后台配置界面

说明:该接口受WING后台中”SDK客服开关V2”控制。如果后台未开启开关,此接口不生效。

3.9.3.打开游戏评价客服入口

说明:该接口受WING后台中”游戏评价开关”控制。如果后台未开启开关,此接口不生效。

3.9.4.设置客服系统语言

示例代码:

语言支持列表图:
图片1

3.9.5.APP对外名称及客服ICON等配置

sdk版本3.9.7及以后版本,废弃原来的设置名称(WACscProxy.setName(game_name))方法,及机器人或人工客服头像的项目本地资源配置方式。统一在AiHelp后台进行配置,设置路径为APP-设置-SDK自定义设置,详情参考《第三方后台配置—Android版》的AiHelp模块的自定义SDK配置章节。

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

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

示例代码

3.10.2.显示用户中心弹窗

示例代码

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

字段名 类型 说明 备注
code int 登录结果码 登录结果码
message String 错误信息
info String 用户中心文字内容
characterId String 充值中心Character ID
uid String 用户ID

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流程完成,不能作为用户已经完成评分的依据

谷歌商店评分页面的显示逻辑是完全由谷歌内部控制的,会根据用户是否弹过,评分接口调用频率等等一些逻辑去控制显示或者不显示,这个规则也不对外公开。
如果希望百分百观察到评分页面弹出及操作,需要按照谷歌文档进行操作,建议使用内部测试轨道进行测试。
Google测试说明:

https://developer.android.com/guide/playcore/in-app-review/test?hl=zh-cn

如果发现调不起评分界面,请查看问题排查:
https://developer.android.com/guide/playcore/in-app-review/test?hl=zh-cn#troubleshooting

3.15 游戏评价窗口

游戏评价窗口用于向用户展示评分提示窗口,弹出后用户可以选择提交好评(即拉起Google评分),或我要提意见(即打开AiHelp),或不谢谢(即关闭窗口,手势返回关闭同这个操作一样),具体UI可以查看后面的效果图。

注意:
1.如果需要评价完成给用户发放奖励,可以在onReviewComplete回调中进行处理
2.该功能受WingSDK后台开关控制,需要打开游戏评价开关
3.评分功能是无法获得具体评分内容和分值的,Google评分机制设计如此
4.关于Google评分的详情及测试 google 应用内评分

示例代码:

界面效果:
图片1

3.16 账号删除

3.16.1 UI版本

sdk内部已经完成了完整流程的UI展示,以及请求接口操作,CP只需要调用即可。

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y Activity对象
callback WACallback< WAResult> N 回调方法,结果返回

示例代码:

3.16.2 接口版本

接口版本为,cp需要自己做UI,然后调用sdk接口进行删除操作。

3.16.2.1 请求删除账号接口

注意:需要在sdk登录成功的情况下才可调用。

参数说明:

参数名 类型 必填 说明 备注
callback WACallback< WADeleteResult> N 回调方法,结果返回 WADeleteResult实体类参考下方说明

WADeleteResult实体类说明:

get方法名 返回值类型 不为空 说明 备注
getApplyDate String Y 账号删除申请时间 示例:2023-08-29 07:49
getDeleteDate String Y 账号删除时间,达到该时间账号即被删除 示例:2023-08-29 07:49

示例代码:

3.16.2.2 取消删除账号接口

参数说明:

参数名 类型 必填 说明 备注
userId String Y 用户ID 登录失败时,若用户在申请账号删除中则会返回userId
callback WACallback< WAResult> N 回调方法,结果返回

示例代码:

3.17 打开内置链接

调用该接口,可以使用WebView打开后台配置的内置链接
WACoreProxy.showOpenUrl(Context context, WACallback callback)

注意:必须先在后台配置该链接,否则返回失败

3.18 Consent同意屏幕相关

3.18.1 同意通知ID配置

在AndroidManifest.xml中添加下面代码,其中xxx为同意通知ID,具体值从运营处获取

3.18.2 用户同意界面显示

用户同意界面弹出是内置在SDK初始化逻辑中,当SDK正常初始化完成后,如果需要符合弹出条件,就会展示用户同意界面。

以下情况不会弹出:
1.不在生效地区(一般指欧盟)
2.用户已经在同意界面操作过同意或拒绝

注意:初始化时传入的Activity类型,必须是FragmentActivity,否则同意屏幕无法初始化。

展示效果:
了解更多,会跳转到目的设置页,页面效果参考同意设置。
管理我们的x合作伙伴,会跳到 供应商设置页,页面效果参考同意设置。

图片2

3.18.3 打开同意设置

为了允许用户修改同意状态,需要游戏在添加一个按钮入口,并在用户点击按钮入口时调用下面接口打开同意设置界面。

注意:如果不在生效地区(一般指欧盟),调用该接口不会有任何反应。

目的同意设置页,和供应商同意设置页,展示效果:

图片3

图片5

3.19 AdMob功能

3.19.1 应用ID配置

在AndroidManifest.xml的application标签下添加下面代码,其中xxx为AdMob的应用ID,具体值从运营处获取

3.19.2 设置测试状态

注意:只有在PlayStore上下载的应用才允许播放生产环境广告,否则可能会因违反AdMob协议而封停账号。

为了确保在本地测试时播放的是测试广告,需要在SDK初始化之前调用该接口传入true,在打线上包时才改为传入false。

参数说明:

参数名 类型 必填 说明 备注
isTest boolean Y true,表示强制开启使用测试广告;false,表示否

示例代码:

3.19.3 横幅广告

横幅广告必须启用硬件加速功能,在AndroidManifest.xml的application标签中添加android:hardwareAccelerated=”true”,示例如下:

在Activity页面的布局中加入的横幅广告

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 显示广告的Activity页面
container ViewGroup Y 放置横幅广告的容器布局对象 建议使用FrameLayout,宽属性为match_parent,高属性为wrap_content,并且容器内无其他内容

失败处理建议:尽可能确保广告加载失败时,不影响用户后续体验。建议不要
给容器强制保留固定的宽高并设置游戏不一样的特殊背景如纯白背景进行展示。

Google官方使用建议:
植入横幅广告的最佳做法:https://admob.google.com/intl/zh-CN_cn/home/resources/monetize-mobile-game-with-ads

3.19.4 插页广告

3.19.4.1 检查和预加载插页广告

检查插页广告是否已准备好,若未准备好,则内部会立即开始缓存广告。

返回值说明:

类型 必填 说明 备注
boolean Y true为广告已经准备好,调用showInterstitialAd可以展示广告;false为未准备好,此时内部会立即开始缓存广告。

备注:SDK初始化后会立即开始缓存广告,无需在此时调用该接口。为了避免调用展示的时候因缓存失败而无法显示,建议在展示前适当的时机调用该接口确保广告预加载成功(该接口判断如果接口未准备好会立即开始缓存)。比如:可以在进入关卡时调用一次该接口,确保关卡完成后调用showInterstitialAd可以正常展示广告。

3.19.4.2 展示插页广告

在Activity页面中展示插页广告

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 显示广告的Activity页面
callback FullScreenContentCallback N 广告结果回调
1.显示广告失败:onAdFailedToShowFullScreenContent(AdError adError)
2.显示广告成功:onAdShowedFullScreenContent()
3.广告关闭:onAdDismissedFullScreenContent()
4.广告点击:onAdClicked()

示例代码:

失败处理建议:尽可能确保广告加载失败时,不影响用户后续体验。建议在
WAAdMobProxy.checkinterstitialAdReady()为 false 时,直接忽略显示广告继续游戏。

Google官方使用建议:
最佳实践指南:https://developers.google.com/admob/android/interstitial?hl=en#some_best_practices
植入插页式广告的最佳做法:https://admob.google.com/intl/zh-CN_cn/home/resources/monetize-mobile-game-with-ads

3.19.5.开屏广告

3.19.5.1 检查和预加载开屏广告

检查开屏广告是否已准备好,若未准备好,则内部会立即开始缓存广告。

返回值说明:

类型 必填 说明 备注
boolean Y true为广告已经准备好,调用showAppOpenAd可以展示广告;false为未准备好,此时内部会立即开始缓存广告。

3.19.5.2 展示开屏广告

在Activity页面中展示开屏广告

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 显示广告的Activity页面
callback FullScreenContentCallback N 广告结果回调
1.显示广告失败:onAdFailedToShowFullScreenContent(AdError adError)
2.显示广告成功:onAdShowedFullScreenContent()
3.广告关闭:onAdDismissedFullScreenContent()
4.广告点击:onAdClicked()

示例代码:

失败处理建议:尽可能确保广告加载失败时,不影响用户后续体验。建议在
WAAdMobProxy.checkAppOpenAdReady()为 false 时,直接忽略显示广告继续游戏。

Google官方使用建议:
最佳实践指南:https://developers.google.com/admob/android/app-open?hl=en#best_practices

场景使用建议:
1.在启动程序的时候展示;考虑到冷启动时要等广告缓存完成才会显示,所以建议创建一个启动页,在启动页中加载游戏资源及显示开屏广告,再进入主游戏页。具体实现,可以参考Demo。
2.从其他应用切回程序的时候展示;为了避免的频繁切换应用展示过多广告,建议进行展示间隔限制,比如30分钟内切回程序只展示一次开屏广告。另外要考虑不要遮挡到可能正在展示的其他广告,比如插页,激励广告。具体实现,可以参考Demo。

Demo代码下载地址:https://github.com/ghw-wingsdk/demo-android/archive/refs/heads/master.zip

3.19.6.激励广告

在Activity页面中展示激励广告,用户看完广告后会通过后台进行奖励发放。
如果广告还未准备好,会立即开始请求广告并显示loading转圈,等广告加载完成后会立即展示,或者加载失败直接返回回调。

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 显示广告的Activity页面
adName String N 广告名称,从运营处获取,SDK会根据ad名称展示对应的广告。 传入null或空则默认使用配置的第一个激励广告。
extInfo String N 透传参数,该参数内容会在通知游戏发货时一起给到游戏服务器,长度限制为100个字符。
callback FullScreenContentCallback N 广告结果回调
1.显示广告失败:onAdFailedToShowFullScreenContent(AdError adError)
2.显示广告成功:onAdShowedFullScreenContent()
3.广告关闭:onAdDismissedFullScreenContent()
4.广告点击:onAdClicked()

示例代码:

失败处理建议:可以在广告显示的 onAdFailedToShowFullScreenContent回
调失败中提示用户,广告暂不可用,稍后再试。

Google官方使用建议:
植入激励广告的最佳做法:https://admob.google.com/intl/zh-CN_cn/home/resources/monetize-mobile-game-with-ads

3.19.7 UMP同意弹窗相关

3.19.7.1 同意弹窗说明

SDK在初始化的时候会在该Activity页面进行UMP同意弹窗初始化,并展示给需要的用户(欧盟地区)进行同意授权,授权完成后AdMob功能才会进行初始化及加载广告。如果是非欧盟地区用户,则会直接返回授权成功,并进行后续逻辑。

以上为SDK内部逻辑,研发无需处理。除此之外,研发需要在游戏内部放置一个按钮,可供用户打开UMP同意设置并修改同意状态,需要用到下面“检查设置”和”展示设置“两个方法。
UMP同意弹窗效果如下:

图片3

3.19.7.2 开关配置

UMP功能默认关闭,如果需要开启UMP功能,在AndroidManifest.xml中加入下面配置:

3.19.7.3 检查设置

返回值说明:

类型 必填 说明 备注
boolean Y true为需要展示,此时可以显示UMP配置按钮入口;false为不需要,可以隐藏UMP配置按钮入口。 如果设备在非欧盟地区一般返回false

3.19.7.4 展示设置

展示UMP同意设置

参数说明:

参数名 类型 必填 说明 备注
activity Activity Y 当前Activity页面
callback WACallback N 显示成功后,用户操作同意或不同意才会回调onSuccess;如果显示失败,则直接回调onError;

3.19.7.5 添加UMP同意监听

注意:该接口功能用于配合启动页展示开屏广告,如非必要,无需接入使用。

添加SDK初始化时的UMP同意弹窗授权状态监听,主要在SDK初始化方法之前调用。

参数说明:

参数名 类型 必填 说明 备注
callback WACallback Y 用户已经完成授权回调onSuccess;

示例代码:

3.20 官网包配置

如果是官网包,在AndroidManifest.xml中加入下面配置:

注意:Google包无需配置。

四、第三方配置

4.1 Google相关配置

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

4.1.1 Google基本配置

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

在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版添加Google Game Service支持。

注意:因为值的内容是数字,要求必须在资源清单文件(如:strings.xml)中使用string类型声明之后引用,否则Game Service SDK无法识别。

4.1.3 Google代码混淆配置


4.1.4 Google获取SHA-1指纹

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

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

4.2 Facebook相关配置

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

4.2.1 Facebook基本配置

在strings.xml中添加Facebook APP ID、Client Token、login protocol scheme声明::

在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、client token 获取方式: 获取方式参考

4.2.2 Facebook代码混淆配置

4.2.3 Facebook登录权限对照表

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

4.3 AppsFlyer相关配置

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

4.3.1 AppsFlyer基本配置

在AndroidManifest.xml中添加以下声明

其中 com.wa.sdk.track.APPSFLYER_APP_KEY 的value即使对应appsflyer的devkey。
appsflyer 的DevKey获取方式参考:获取AppsFlyer的DevKey

4.3.2 AppsFlyer代码混淆配置

4.3.3 AppsFlyer卸载检测配置

a)官方说明:官方说明
b)集成Firebase,参考3.7.2 集成配置
c)从Firebase 控制台获取 服务器密钥,填入AppsFlyer的卸载配置中

图片2

图片2

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_domain配置必须使用三级域名的形式。例如原gamehollywoodhk@aihelp.net需要改为 gamehollywoodhk.aihelp.net。

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’
如果使用性能监测,则需要添加APMS开关代码,如下:
agcp{
enableAPMS true
}

4)在应用级别的build.gradle中,添加华为多语种支持,配置如下:
android {
defaultConfig {
//华为多语种设置,由CP配置
resConfigs “en”, “zh-rCN”, “pt”
}
}

支持语言参考:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/support-language-0000001050040564-V5

5)在AndroidManifest.xml中添加配置:

4.9.2.华为HMS混淆配置

1)proguard-rules.pro文件配置

2)AndResGuard配置方式

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

4.9.3.华为HMS权限配置

说明:SDK已经集成权限,如果危险权限需要CP动态申请权限。

4.10 weblogin模块相关配置

4.10.1 基础配置

在项目app目录层级下的res/values/strings.xml中添加wa_custom_tab_scheme声明

注意:
1.string的name必须为wa_custom_tab_scheme,不可更改
2.格式为wa+YOUR_SDK_APPID。比如SDK的appid为f7f9a9d18da611e5a0be000d3a906774,则wa_custom_tab_scheme的对应内容为waf7f9a9d18da611e5a0be000d3a906774
3.这里SDK的appid为wingsdk的appid

4.10.2 横屏游戏配置

横屏游戏需要添加下面配置,其中screenOrientation 需要同游戏的 screenOrientation 保持一致,一般为landscape或sensorLandscape。

注意:
1.如果游戏的主Activity配置了launchMode为singleTask或指定了taskAffinity,若游戏没有特殊需求,建议移除。若需要保留,需要在上面配置中额外添加
tools:replace=”launchMode” 和android:launchMode=”singleInstance”,并且使用weblogin模块进行登录绑定成功后,Android后台任务会有残留Chrome登录页。

五、附录

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_GUEST GUEST 游客登录
CHANNEL_GOOGLE GOOGLE Google平台
CHANNEL_FACEBOOK FACEBOOK Facebook平台
CHANNEL_VK VK VK平台
CHANNEL_TWITTER TWITTER Twitter平台
CHANNEL_INSTAGRAM INSTAGRAM Instagram平台
CHANNEL_HUAWEI_HMS 华为海外 华为平台
CHANNEL_GHG GHG_INTEGRATION Game Hollywood Games平台
CHANNEL_R2 R2_INTEGRATION R2Games平台
CHANNEL_APPSELF APPSELF 应用内登录

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 购买完成
WAEventUserInfoUpdate ghw_user_info_update 更新用户信息
USER_CREATED ghw_user_create 创建角色
IMPORT_USER ghw_user_import 导入用户
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_iOS使用指南_v4.1.0_bak20240708

wapublisher No Comments

一、简介

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推送功能是基于苹果APNS,可以向客户端推送消息,通过简单几步配置即可使用。

1.7 广告

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

1.8 智能客服 AIHelp

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

1.9隐私政策

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

1.10 用户中心

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

二、快速集成

2.1 环境配置要求

1、系统:Mac OS
2、开发工具:Xcode(14.0及以上)
3、Deployment Target:iOS12.0及以上版本

2.2 集成SDK到项目

集成步骤:
1、集成相应库到项目中 参考:2.2.1 库的引用
2、添加依赖库,以及配置 参考: 2.2.2 工程构建配置
3、修改配置文件 参考: 2.2.3 WINGSDK基本配置
4、编译正常,可继续sdk代码集成 参考: SDK初始化

建议:cp可先运行demo,看下配置以及需要引用的第三方库,再接入
集成参考demo: demo代码下载地址

2.2.1 库的引用

SDK的抽象层和实现层以framework的形式提供,CP可以使用cocoapods的方式或者自行下载framework拖进xcode项目的方式进行引用。

方式一:使用cocoapods进行引用

CP可以使用Cocospods进行引用更新。

这部分脚本请使用WINGSDK打包配置页面生成,CP可以将生成的脚本代码复制到自己的Podfile中。
WINGSDK打包配置页面地址:https://admin.wingsdk.com/developers/pack_config.do

目前SDK提供的库包括:
抽象层:

  • WASdkIntf——必接

实现层:

  • WASdkImpl(WingSdk)——必接

其它可选:

  • WAAdImpl(Ad)——可选

  • WAAfImpl(Appsflyer)——可选

  • WAApImpl(Apple)——可选

  • WACbImpl(Chartboost)——可选

  • WAFbImpl(Facebook) ——可选

  • WAPushImpl(Push)——可选

  • WAVkImpl(VK)——可选

  • WATwitterImpl(Twitter)——可选

  • WAInstagramImpl(Instagram)——可选

  • WAAiHelpImpl(AiHelp) ——可选

  • WAWebPayImpl(WebPay)——可选,如果需要第三方支付则需添加此模块

  • WAFirebaseImpl(Firebase)——可选

  • WAWebLoginImpl(WebLogin)——可选

提示:使用CocoaPod引用的项目打开项目时需要点击’xcworkspace’而不是’ xcodeproj’

方式二:手动引用

如果手动引用,可以使用WINGSDK打包配置页面https://admin.wingsdk.com/developers/pack_config.do进行各个包的下载,并添加到xcode项目中。
cocoapods手动引用

下载完成后解压,把解压后的文件拖入xcode工程,其中WASdkIntf和WASdkImpl是必接库,其它可选。
注意:需要加入系统库libsqlite3.tbd(libsqlite3.dylib)、libz.tbd(libz.dylib)

2.2.2 工程构建配置

在项目Build Settings中搜索Other Linker Flags 修改值为-ObjC
如下图
iOS-工程构建配置

需要引用的库:
AppTrackingTransparency.framework
libz.1.dylib
Accelerate.framework
libc++.tbd
libresolv.tbd
WebKit.framework
sqlite3

2.2.3 WINGSDK基本配置(wa_sdk.plist)

在 WASdkIntf下,以及配置文件wa_sdk_track_config.plistwa_sdk.plist,如下图。
集成SDK到项目

wa_sdk.plist文件配置:
iOS-WINGSDK配置
参数说明:
WaSdkServerUrl:WINGSDK后台url(生产环境:https://api.wingsdk.com/sdkapi/)
appKey:WINGSDK后台appKey
appId:WINGSDK后台appId
os:手机操作系统
channel:发布渠道

关于wa_sdk_track_config.plist详见2.6.1 配置 (wa_sdk_track_config.plist)

2.3 SDK初始化

从3.12.0以及以后,需要增加如下配置:

1、在项目target,Signing&Capabilities,选择All,添加Capability,选择Keychain Sharing

图片1
2、点击+号,输入gamehollywood.wingsdk.clientid.group

图片1

导入头文件
#import <WASdkIntf/WASdkIntf.h>

1、请在AppDelegate的didFinishLaunchingWithOptions 调用下面代码:

2、在AppDelegate的applicationDidEnterBackground调用下面代码:

3、在AppDelegate的applicationWillEnterForeground调用下面代码:

4、在AppDelegate的applicationDidBecomeActive调用下面代码:


注:如新建Xcode项目,会默认创建SceneDelegate文件,则需要以下适配(如无SceneDelegate文件则忽略):

2.4 登录

登录过程中如果涉及到应用间跳转,需要在AppDelegate中实现以下方法

2.4.1 登录对话框

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

注意:测试时,需要联系运营添加测试设备,才能出现登录方式。

2.4.1.1 实现协议 WALoginViewDelegate

登录结果说明 WALoginResult

字段名 类型 说明 备注
message String 登录结果消息
userId String WINGSDK用户id
token String WINGSDK用户token
pUserId NSString 用户在第三方平台的Id,GUEST登录时 值与userId一致
platform String 平台类型 当前登录的平台名称
pToken NSString 第三方平台的token
isGuestAccount int 是否游客登录 0 不是游客账号 1是游客账号

3.4.1.2 调用方法

+(void)login:(id<WALoginViewDelegate>)delegate cacheEnabled:(BOOL)cacheEnabled;
cacheEnabled是否缓存登录方式。如果缓存登录方式,第二次调用的时候直接按照上次的登录方式进行登录,不会弹出登录选择框。如果想弹出登录选择框,请调用clearLoginCache方法,清除缓存
代码示例:

2.4.1.3 清除登录方式的缓存(重新弹出登录选择框)

+(void)clearLoginCache;
代码示例:

2.4.1.4 隐藏登录选择框

+(void)hide;
代码示例:

2.4.2 用户登录接口

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

2.4.2.1登录接口

(1)选择登录方式

+(void)loginWithPlatform:(NSString *const)platform extInfo:(NSString*)extInfo delegate:(id<WALoginDelegate>)delegate;
注:extInfo目前主要用于应用内登录等高级登录设置,请参考3.3.2 应用内登录相关章节
代码示例:facebook登录

登录平台请参考5.1.2 平台取值

2.4.2.2 实现协议WALoginDelegate中定义的方法

说明:关于APPLE登录,用户每次进入APP进行登录操作,Game Center只进行一次授权。假如用户在第一次登录的时候取消了,以后每次进行登录,程序都会执行登录取消的协议方法,除非用户结束应用重新打开。同样的,第一次登录的时候,出现Game Center授权错误,之后程序都会执行登录失败的协议方法,除非用户结束应用重新打开。

2.4.3 用户登出

退出游戏的时候,必须登出操作。用户登出调用以下接口:
[WAUserProxy logout];
注意:调用logout接口后,serverId、gameUseId、level字段值会被重置,如果需要保持相应字段的值不重置,需要重新设置相应字段的值,参考3.1 公共参数设置

2.5 支付

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

2.5.1 初始化

使用对应平台的支付服务前必须对其进行初始化,请在AppDelegate的didFinishLaunchingWithOptions方法调用以下方法。
+(void)init4Iap;
代码示例:

2.5.2 查询商品

2.5.2.1 实现协议 WAInventoryDelegate

2.5.2.2 调用方法

查寻库存商品,调用以下接口:
+(void)queryInventoryWithDelegate:(id<WAInventoryDelegate>)delegate;
代码示例:

注意:这里返回的库存商品信息是WINGSDK平台的商品信息,并非第三方平台的商品信息。
建议在商品页出来之前调用,最好是sdk初始化完后就开始调用,如下

2.5.3 购买商品

2.5.3.1 实现协议 WAPaymentDelegate

支付结果说明 WAIapResult

字段名 类型 说明 备注
productIdentifier NSString 商品id
resultCode long 支付结果代码 1.支付成功
2.支付失败
3.用户取消
4.支付成功,上报失败
5.商品消耗中
6.创建订单失败

注意:如果需要在订单信息中记录当前玩家昵称,需要按3.1.4 设置玩家昵称设置玩家昵称。

2.5.3.2 调用方法

购买指定平台的商品,调用以下接口:
+(void)payWithProductId:(NSString*)productId extInfo:(NSString*)extInfo delegate:(id<WAPaymentDelegate>)delegate;
代码示例:

参数说明:

参数名 类型 必填 说明 备注
productId String Y 库存商品的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

2.5.3.3 查询商品本地价格

通过查询商品信息,可以获取库存商品的本地价格,查询商品本地价格调用接口:
+ (void)queryChannelProduct:(NSString )channel
callBackBlock:(void(^)(NSArray
channelProductsArray,NSError *error))callBackBlock

代码示例

注意:这个接口需要在查询库存商品( queryInventoryWithDelegate)成功回调后使用。
参数说明:

参数名 类型 必填 说明 备注
chanel NSString Y 渠道名称 如苹果渠道 APPLE

实体结果说明 WAChannelProduct:

字段名 类型 说明 备注
channel NSString 渠道名称 传递的channel
productIdentifiere NSString 平台商品id
localeCurrencyCode NSString 本地货币code USD 、CNY
localFormattedPrice NSString 格式化价格 $999.99 、 ¥6,498.00
price NSDecimalNumber 价格 999.99、 6498

2.5.4支付服务是否可用

通过以下接口可以获取支付服务是否可用,返回boolean类型结果,true为可用,false为不可用,只要有一个支付渠道可用即为true:
+(BOOL)isPayServiceAvailableWithPlatform;
代码示例:

2.6 数据收集

使用WINGSDK数据收集接口配合大数据平台,可以轻松统计玩家习惯以及充值等行为,为游戏的市场营销提供数据依据。WINGSDK数据收集使用在游戏的过程中打点的方式,如图所示:

事件流程.drawio

  1. 以上流程图中涉及到的几个接口是有时序要求的,请参考流程图中的逻辑步骤进行设置:setServerId、setGameUserId、setLevel、setNickname、ghw_user_import事件、ghw_user_create事件
    2.其它的事件如ghw_level_achieved、ghw_self_tutorial_completed、ghw_self_lv_x等请根据对应业务逻辑,在对应业务发生时调用接口发送。
序号 事件(接口)名称 事件描述 事件作用 建议触发点 备注
1 setServerId 设置服务器ID 标记玩家当前所在的服务器,后台根据该字段统计每个服务器的数据 登录游戏服成功后
2 setGameUserId 设置玩家角色ID 标记玩家当前的游戏角色ID,后台根据该字段统计玩家的数据 登录游戏服成功后
3 setNickname 设置玩家角色昵称 标记玩家当前的游戏角色昵称,后台订单记录中会记录该昵称 登录游戏服成功后、创角后、修改昵称后
4 setLevel 设置玩家当前等级 标记玩家当前的游戏角色等级 玩家等级发生变更后,如登录游戏服成功后、玩家完成升级后
5 ghw_user_import 玩家登录游戏服 记录玩家登录游戏服的动作,后台根据该事件统计导入数、登录数、导入留存等数据 玩家登录游戏服成功后 需要先调用setServerId、setGameUserId、setNickname、setLevel接口
6 ghw_user_create 玩家创建角色 记录玩家创建角色的动作,后台根据该事件统计创角数 玩家创建角色成功后 需要先调用setServerId、setGameUserId、setNickname、setLevel接口
7 ghw_self_tutorial_completed 完成新手任务 完成新手任务 玩家完成新手任务后
8 ghw_level_achieved 更新玩家等级 更新玩家等级,后台根据此字段更新玩家等级 玩家达到新的等级时 需要先调用setLevel接口更新玩家等级
9 ghw_self_lv_x 更新玩家等级 更新玩家等级,后台根据此字段更新玩家等级 需要先调用setLevel接口更新玩家等级
10 ghw_user_info_update 更新用户信息 更新用户信 玩家信息更新时 需要先调用setServerId、setGameUserId、setNickname接口

2.6.1 配置 (wa_sdk_track_config.plist)

对各个平台进行相应的配置(修改wa_sdk_track_config.plist)。注:文件名以及key值不可修改。
iOS-数据收集功能模块
其中,AppleAppID可以在iTunes Connect(https://itunesconnect.apple.com)中新建应用之后获取,具体可以参考iOS-第三方后台配置文档“Apple基础配置”章节
iOS-配置-wa_sdk_track_config.plist
每个数据收集平台都有相应的开关,可以进行配置。下图的Enable就是开关,Enable: YES-开,NO-关。
iOS-数据收集功能模块
WINGSDK URL正式环境的地址: https://api.wingsdk.com/data/

2.6.2 调用

2.6.2.1 导入头文件

#import <WASdkIntf/WASdkIntf.h>

2.6.2.2 工程启动时初始化

您需要在第一次启动在应用程序上进行SDK初始化。请保证在发送下面的跟踪事件之前进行SDK初始化。请在AppDelegate中的didFinishLaunchingWithOptions方法中添加以下代码:
[WACoreProxy initAppEventTracker];

2.6.2.3 调用事件进行追踪

安装和打开游戏事件是内部触发的,另外关于充值事件(WAEventPayment)和点击充值(WAEventInitiatedPayment)的跟踪已经在WINGSDK中自动调用,用户不用自己调用。若不想启用这两个事件的自动跟踪,可在didFinishLaunchingWithOptions进行如下操作:
[WATrackProxy autoTriggerAfterPayment:NO];
调用方法有两种。方法一调用方法简单,但是发送到各个渠道的事件名称(eventName)、参数(params)、累加值(value)是一样的。如果需要自己设置事件名称、参数、累加值,请使用方法二。

2.6.2.3.1 方法一

注:当使用带有小数点的数值时,使用NSDecimalNumber类型,如[NSDecimalNumber decimalNumberWithString:@"8.88"];
调用事件的用法如下:
+(void)trackWithEventName:(NSString *)eventName valueToSum: (double)value params:(NSDictionary *)params;
-eventName:事件名称可在附表中查询
-valueToSum:传入一个double值作为累加值,没有累加值可以传0。
-params:参数字典参数可在附表中查询
例如:

调用购买事件WAEventPayment,
参数:WAEventParameterNameContentType道具类型,
WAEventParameterNameContentID内容ID,
WAEventParameterNameItemAmount购买数量,
WAEventParameterNameCurrencyType货币类型,
WAEventParameterNameCurrencyAmount现金额

2.6.2.3.2 方法二

注:当使用带有小数点的数值时,使用NSDecimalNumber类型,如[NSDecimalNumber decimalNumberWithString:@"8.88"];

2.6.2.3.2.1 调用示例

步骤一 构建WAEvent实例

步骤二 发送数据:

2.6.2.3.2.2 关于WAEvent 实例的构建

(1)设置默认的事件名称

设置该事件的事件名称,请参考5.2.1 SDK 预定义事件名
event.defaultEventName = WAEventLevelAchieved;

(2)设置渠道自定义事件名称

注:
1)eventNameDict的key参考附表 2.6.2 渠道名称表
2)AppsFlyer和facebook的应用内事件和WINGSDK的应用内事件已经做了映射(例如: ghw_login <-> af_login,ghw_login<->fb_login,参考下图),用户无需再手动自定义。
3)如果不进行设置,所有的渠道将采用设置的默认值(defaultEventName)。

iOS-各渠道事件映射对应表

各渠道事件映射对应表

(3)设置默认累加值

设置累加值用于统计数字,比如购买的金额等
event.defaultValue = 1;

(4)设置渠道自定义累加值

1)valueDict的key值参考 附表2.6.2 渠道名称表
2)如果不进行设置,所有的渠道将采用设置的默认值(defaultValue)。

(5)设置事件默认的参数/值

注:
1)参数名称参考5.2.2 SDK 预定义参数名

(6)设置事件渠道自定义的参数/值

注:
1)渠道名称参考:附表 2.6.2 渠道名称表
2)参数名称参考:5.2.2 SDK 预定义参数名
3)如果不进行设置,所有的渠道将采用设置的默认值(defaultParamValues)

(7)渠道开关设置

注:以上代码会关闭Appsflyer对该事件的收集,而Facebook、WINGSDK、Chartboost、firebase是打开的。默认情况下,WINGSDK和Appsflyer、firebase是打开的,而Facebook和Chartboost是关闭的。

2.6.3 预定义事件

建议参数属性:(参数对应的静态变量名请看5.2.2 SDK 预定义参数名

2.6.3.1 ghw_user_import

说明:导入用户事件,用户每次进服事件–通过用户id在后台查找

参数名 类型 说明 必填 备注
isFirstEnter int 是否为第一次导入 Y 否为0,
是为:1。
默认为0。

注意:发送ghw_user_import事件前需要调用 设置服务器ID设置角色ID设置昵称设置级别
代码示例:

2.6.3.2 ghw_initiated_purchase 点击购买

说明:点击购买的时候调用(用于游戏内部虚拟交易统计)
无参数
代码示例:

2.6.3.3 ghw_purchase 购买完成

说明:点击购买的时候调用(用于游戏内部虚拟交易统计)。
注:valueToSum(或者defaultValue)的值要传,而且值要和price一样。

参数名 类型 说明 必填 备注
itemName String 游戏内虚拟物品的名称/ID Y
itemAmount int 交易的数量 Y
price float 交易的总价 Y

代码示例:

2.6.3.4 ghw_level_achieved

说明:统计玩家等级增长事件,达到等级时调用。

参数名 类型 说明 必填 备注
score int 账户分数 N
fighting int 战斗力 N

注意:发送事件前WAEventLevelAchieved需调用3.1.3 设置用户等级level 接口更新用户等级信息。

代码示例:

2.6.3.5 WAEventUserCreate

说明:创建游戏角色

参数名 类型 说明 必填 备注
roleType string 角色类型 N
nickname String 角色名(昵称) Y
gender int 角色性别 N 性别: 0表示女,
1表示男,
2表示未知
registerTime long 创建时间 Y 注册时间戳,单位为毫秒(1970以后)
vip int 等级 N
status int 状态 N 状态标识:
-1: 锁定,
1:未锁定
bindGameGold int 绑定钻石 N
gameGold int 用户钻石数 N
fighting int 战斗力 N

代码示例:

2.6.3.6 ghw_self_tutorial_completed 完成新手任务

说明:新手完成新手任务时调用
无参数
代码示例:

2.6.3.7 ghw_self_lv_x 关键等级

说明:完成关键等级时调用,如ghw_self_lv_1、ghw_self_lv_3

无参数

代码示例:

2.6.3.8. ghw_user_info_update 更新用户信息

参数名 类型 说明 必填 备注
roleType String 角色类型 N
nickname String 昵称 Y 无昵称时,可填写空字符串
vip int 等级 N
status int 状态 N 状态标识,-1:锁定,1:未锁定

代码示例:

2.6.4 自定义事件

事件描述:自定义事件
事件名称:自定义
参数:自定义
有无累计值:自定义

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

自定义事件目前只支持事件名和累加值,见示例。
例如:

附表 2.6.1 货币标识

名称 标识
人民币 CNY
美元 USD
港币 HKD
欧元 EUR
英镑 GBP
日元 JPY
加元 CAD

详见:https://en.wikipedia.org/wiki/ISO_4217

附表 2.6.2 渠道名称表

常量 代表渠道
WA_PLATFORM_APPSFLYER Appsflyer
WA_PLATFORM_FACEBOOK Facebook
WA_PLATFORM_WINGA WINGSDK
WA_PLATFORM_CHARTBOOST ChartBoost
WA_PLATFORM_FIREBASE Firebase

2.6.5 获取 IDFA 弹出“询问用户是否授权”适配

应苹果要求,iOS14后,获取IDFA需要授权弹框。目前sdk默认为不弹框获取用户授权。如需弹框授权,需要以下步骤
1、xcode升级到12或者以后版本
2、接入sdk3.9.1或以后版本
3、Info.plist 中新增 key Privacy – Tracking Usage Description ,value 填写使用 IDFA 原因。其中原因将展示给用户。参考文案:Your info will be used for personalized ads.

效果如图:

WechatIMG859

2.7. 隐私政策

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

2.7.1 获取隐私政策url

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

示例:

2.7.2 获取隐私政策更新时间

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

示例:

2.7.3 显示隐私政策详情UI

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

示例:

三、高级功能

3.1 公共参数设置

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

3.1.1 设置服务器ID

当用户的服务器ID发生改变时,需要调用设置服务器ID接口设置新的服务器ID,例如每次进入服务器:
[WACoreProxy setServerId: @"127.0.0.1"];
注意:设置服务器ID的操作在每次选服后都需要进行,必须在调用其他接口前设置。

3.1.2 设置用户gameUserId

用户在选择服务器并且登录之后将用户gameUserId设置到SDK中以便于跟踪。
[WACoreProxy setGameUserId:@"12345"];

3.1.3 设置用户等级level

设置游戏玩家的角色等级,调用接口:
[WACoreProxy setLevel:10];
注意:第一次进服获取玩家等级或玩家等级变更后,需要及时调用这个接口设置玩家等级,必须在调用其他接口前设置。

3.1.4 设置玩家昵称

设置游戏玩家的昵称,调用接口:
[WACoreProxy setNickName:@"测试角色名称"];
注意:
1.当玩家登录、登出游戏,或修改昵称时,需要及时调用这个接口设置玩家昵称。
2.调用该接口设置昵称后,玩家进行购买时会自动记录昵称到订单信息中。

3.2 调试模式

3.2.1 开启、关闭调试模式

WINGSDK具备调试模式并提供了Log悬浮按钮调试工具,打开调试模式就会显示Log悬浮按钮,使用这个工具测试人员不需要IDE环境就可以在工具窗口中查看调试信息。开启/关闭调试模式调用以下接口(WINGSDK默认是关闭调试模式的)。
[WACoreProxy setDebugMode:YES];
关闭调试模式:
[WACoreProxy setDebugMode:NO];

3.2.2 如何获取 client_id

打开调试模式后,显示Logcat工具,点击-设备信息-clientid,点击获取

F757A84C441ED6EC3E50CE12F7A8F87F

3.3 登录高级设置

3.3.1 设置登录流程接口

使用该接口需注意以下两点:
1)一般来说,如果应用登录的时候有登录方式选择界面,就不需要使用此接口,此接口默认是这种方式(取值为1)。

2)这个接口主要是用来满足以下需求:用户第一次登录是以游客方式进行登录,进到应用里面可以切换其它登录方式,下次登录会直接以切换后的账户进行登录(取值为2)。

+(void)setLoginFlowType:(int)flowType;
代码示例:
[WAUserProxy setLoginFlowType:WA_LOGIN_FLOW_TYPE_DEFAULT];
登录流程有两种模式,在WAConstants类中定义,取值如下表:

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

3.3.2 应用内登录

SDK平台应用内登录,是指CP本身有自己登录系统,先登录CP后台拿到用户信息后登录SDK后台,应用内登录调用接口2.4.2 用户登录接口 ,登录平台取值APPSELF(WA_PLATFORM_APPSELFLOGIN),将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.4 账户管理

3.4.1 使用账户管理页面

SDK内置了账户管理页面,打开这个内置的页面之前必须先登录,通过这个页面可以对账户进行管理操作,包括账号绑定、解绑、切换账户、新建账户。

3.4.1.1 实现协议 WAAcctManagerDelegate

3.4.1.2 调用方法

+(void)openAccountManager:(id<WAAcctManagerDelegate>)delegate;

代码示例:

3.4.1.3 关于绑定解绑的通知

账户管理界面没有返回绑定和解绑结果,但是会以通知的方式将结果回调给CP。当绑定有结果之后(无论成功失败),将回传一个WABindingResult实例。当解绑有结果(无论成功失败),将回传一个WAAccount实例。有四个通知,分别是绑定成功、绑定失败、解绑成功、解绑失败,通知的名称分别是以下常量:
WABindDidSucceedNotification;//绑定成功
WABindDidFailNotification;//绑定失败
WAUnbindDidSucceedNotification;//解绑成功
WAUnbindDidFailNotification;//解绑失败

注:关于绑定facebook成功之后,请注意触发邀请奖励。代码如下:

3.4.2 绑定第三方平台账户

3.4.2.1 实现协议WAAccountBindingDelegate

说明:关于APPLE账号的绑定,请参考2.4.2.2 实现协议WALoginDelegate中定义的方法的说明。

3.4.2.2 调用方法

+(void)bindingAccountWithPlatform:(NSString *const)platform extInfo:(NSString*)extInfo delegate:(id<WAAccountBindingDelegate>)delegate;
绑定平台取值:

名称 取值 备注
WA_PLATFORM_FACEBOOK FACEBOOK FACEBOOK平台
WA_PLATFORM_APPLE APPLE APPLE平台
WA_PLATFORM_VK VK VK平台

示例代码:

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

通过以下接口,可以查询当前的账户已经绑定的第三方平台账户:
+(void)queryBoundAccountWithCompleteBlock:(void(^)(NSError* error,NSArray<WAAccount *>* accounts))block;

示例代码:

3.4.4 解绑第三方平台账户

通过以下接口,可以解绑已经绑定的第三方平台账户:
+(void)unBindAccountWithPlatform:(NSString *const)platform platformUserId:(NSString*)pUserId completeBlock:(void(^)(NSError* error))completeBlock;
有以下情况之一者,不可解绑:
1.解绑的账户为WINGSDK平台的;
2.用户没有绑定第三方平台账户的;
3.用户只绑定一个第三方平台账户,且用户没有与当前设备绑定的。
示例代码:

3.4.5 切换账户

使用以下接口可以快速切换登录的账户
+(void)switchAccountWithPlatform:(NSString *const)platform completeBlock:(void(^)(NSError* error,WALoginResult* result))completeBlock;

3.4.6 新建账户

+(void)createNewAccountWithCompleteBlock:(void(^)(NSError* error,WALoginResult* result))completeBlock;

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

3.4.7获取账户信息

SDK提供了获取指定平台的账户信息,可以通过以下接口获取:

+(WAAppUser*)getAccountInfoWithPlatform:(NSString *const)platform;

示例代码:

3.5 应用墙模块功能

注意:此模块会对苹果应用商店上架造成一定的风险,请酌情使用。

3.5.1 应用墙使用

WINGSDK应用墙包含了应用推荐等功能。

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

[WAApwProxy showEntryFlowIcon];

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

[WAApwProxy hideEntryFlowIcon];

3.6 社交

3.6.1 分享

3.6.1.1 实现协议 WASharingDelegate

3.6.1.2 调用方法

分享调用以下接口,支持分享链接、图片、视频、Facebook OpenGraph:
+(void)shareWithPlatform:( NSString *const)platform shareContent:(NSObject<WASharingContent>*)shareContent shareWithUI:(BOOL)shareWithUI delegate:(NSObject<WASharingDelegate>*)delegate;
示例代码:

参数说明:

参数名 类型 必填 说明 备注
shareContent NSObject* Y 分享内容
shareWithUI BOOL Y 是否通过UI分享 设置为YES时直接通过UI分享,有界面。设置为NO时通过API分享,没有界面。注意:目前不支持这种方式,相关权限已被facebook收回,此值只能为false
delegate NSObject* N 委托

3.6.1.3 实体说明

3.6.1.3.1 分享链接内容实体WAShareLinkContent

WAShareLinkContent字段说明

字段名 类型 必填 说明 备注
contentURL NSURL Y 链接
peopleIDs NSArray N 分享好友ID
placeID NSString N 地址id
ref NSString N 添加到引用链接中的参数值
contentTitle NSString N 连接标题 Facebook无效
contentDescription NSString N 链接描述
imageURL NSURL N 配图 Facebook无效

3.6.1.3.2 分享图片内容实体WASharePhotoContent

WASharePhotoContent字段说明

字段名 类型 必填 说明 备注
contentURL NSURL N 内容URL
peopleIDs NSArray N 分享好友ID
placeID NSString N 地址id
ref NSString N 添加到引用链接中的参数值
photos NSArray Y 图片列表 不能超过12MB,而且列表不能为空,至少一张图片

WASharePhoto字段说明

字段名 类型 必填 说明 备注
image UIImage Y 图片对象 和imageURL两个必选一个
imageURL NSURL Y 图片Uri 和image两个必选一个
userGenerated BOOL N 未使用
caption NSString N 图片描述

3.6.1.3.3 分享视频内容实体WAShareVideoContent

WAShareVideoContent字段说明

字段名 类型 必填 说明 备注
contentURL NSURL N 内容URL
peopleIDs NSArray N 分享好友ID
placeID NSString N 地址id
ref NSString N 添加到引用链接中的参数值
previewPhoto WASharePhoto N 视频缩略图
video WAShareVideo Y 视频 不能超过12MB

WAShareVideo字段说明

字段名 类型 必填 说明 备注
videoURL NSURL Y 视频URL

3.6.2 发送请求接口

发送请求接口向平台好友发送请求,请求包括普通请求、游戏邀请(详见3.6.3 游戏邀请)等,发送请求调用以下接口:

参数说明:

参数名 类型 必填 说明 备注
platform NSString Y 平台类型 平台类型在WAConstants类中定义,目前支持VK以及FACEBOOK
requestType NSString Y 请求类型 请求类型默认的在WAConstants下有定义,请参考5.1.3 请求类型说明
title NSString Y 标题 部分平台需要显示
message NSString Y 说明文字 部分平台需要显示
objectId NSString N 对象id 部分请求类型必填
receiptIds NSArray Y 接收者id 根据平台而定,有些平台支持一次发送请求给多个用户,有些平台一次只能发送给一个用户。VK平台一次只能发送一个用户,Facebook时传入为nil
delegate NSObject N 代理

示例代码:

3.6.3 游戏邀请

3.6.3.1 查询可邀请好友列表

游戏邀请只能邀请没有玩过当前游戏的好友,称为可邀请好友,查询可邀请的好友调用以下接口:
+(void)queryInvitableFriendsWithDuration:(float)duration platform:(NSString *const)platform completeBlock:(void(^)(NSArray* friends,NSError *error))block;

代码示例:

参数说明:

参数名 类型 必填 说明 备注
block String Y 回调
platform NSString Y 平台类型 平台类型在WAConstants类中定义,目前支持VK
duration long Y 过滤时间间隔 单位为分钟,当过滤时间间隔大于0时,在这个时间间隔内不会出现已经发出邀请的好友

3.6.3.2 游戏邀请(@since v3.5.2 使用发送请求接口代替)

3.6.3.2.1 实现协议 WAGameRequestDialogDelegate

3.6.3.2.2 调用方法

发送游戏邀请请求调用以下接口(注:VK平台一次只能发一次邀请给一个好友):
+(void)gameInviteWithPlatform:(NSString *const)platform Content:(WAGameRequestContent*)content delegate:(NSObject<WAGameRequestDialogDelegate>*)delegate;
代码示例:

注:如果是VK平台 actionType必须赋值(gameRequestContent.actionType = WAGameRequestActionRequest) VK平台有两个actionType: WAGameRequestActionInvite, WAGameRequestActionRequest。在游戏的测试阶段,请用WAGameRequestActionRequest进行测试。正式上线的时候修改为WAGameRequestActionInvite,参照下图。
vk上线流程图

3.6.3.3 邀请成功记录

成功邀请好友后,在协议方法-gameRequestDialog:platform:didCompleteWithResults:中调用以下接口向服务器记录邀请信息:
+(void)createInviteInfoWithPlatform:(NSString *const)platform results:(NSDictionary*)results handler:(void (^)(NSUInteger code,NSString* msg, NSError* error)) handler;
示例代码:

3.6.3.4 邀请安装奖励

通过邀请安装使用的用户,安装后需要通知服务器对邀请人进行奖励,必须在玩家进行登录成功或者绑定成功之后时候调用
+(void)inviteInstallRewardPlatform:(NSString *const)platform TokenString:(NSString*)tokenString handler:(void (^)(NSUInteger code,NSString* msg, NSError* error)) handler;
示例代码:

3.6.3.5 邀请事件奖励

通过邀请安装使用的用户,在触发定义的特定事件,需要通知服务器奖励邀请人,比如等级达成、充值等,调用以下接口:
+(void)inviteEventRewardWithPlatform:(NSString *const)platform eventName:(NSString*)eventName handler:(void (^)(NSUInteger code,NSString* msg, NSError* error)) handler;

代码示例:

3.6.4 社区

3.6.4.1 通过Group id查询Group详情

通过Group id查询Group详情,调用以下接口:
+(void)getGroupWithPlatform:(NSString *const)platform groupIds:(NSArray*)groupIds extInfo:(NSString*)extInfo completeBlock:(void(^)(NSArray* groups,NSError* error))block;

示例代码:

WAGroup实体说明

参数名 类型 说明 备注
gid NSString group id
name NSString group名称
screen_name NSString group screen_name
is_closed int 是否封闭 0 – 开放
1 – 封闭
2 – 私有
is_member BOOL 当前用户是否该group成员 0 – 不是group的成员
1 – 是group的成员
type NSString 类型 group — group,
page — public page,
event — event
photo NSString group图片
photo_medium NSString group图片,中尺寸
photo_big NSString group图片,大尺寸
desc NSString group描述
members_count int 成员数
status NSString 状态
schemeUrl NSString 跳转到应用对应的页面
pageUrl NSString 跳转到浏览器对应的页面

3.6.4.2 查询当前应用关联的Group

一个应用只能关联一个Group,通过以下接口可以查询当前应用关联的Group详细信息:
+(void)getCurrentAppLinkedGroupWithPlatfrom:(NSString *const)platform extInfo:(NSString*)extInfo completeBlock:(void(^)(NSArray* groups,NSError* error))block;

示例代码:

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

查询当前用户加入的Group详细信息调用以下接口:
+(void)getCurrentUserGroupWithPlatfrom:(NSString *const)platform extInfo:(NSString*)extInfo completeBlock:(void(^)(NSArray* groups,NSError* error))block;

示例代码:

3.6.4.4 查询当前应用推荐的所有Group

这是3.6.5.2 查询当前应用关联的Group3.6.5.3 查询当前用户已加入的Group查询到的Group的汇总,调用以下接口:

+(void)getGroupsWithPlatform:(NSString *const)platform extInfo:(NSString*)extInfo completeBlock:(void(^)(NSArray* groups,NSError* error))block;

示例代码:

3.6.4.5 加入Group

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

+(void)joinGroupWithPlatform:(NSString *const)platform groupId:(NSString*)groupId extInfo:(NSString *const)extInfo completeBlock:(void(^)(NSError* error))block;

示例代码:

3.6.4.6 进入Group详情页

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

+(void)openGroupPageWithPlatform:(NSString *const)platform groupUri:(NSString *const)groupUri extInfo:(NSString*)extInfo

如果客户端已经安装platform指定平台的app客户端,将会进入到app客户端详情页面,如果没有安装,则打开网页详情页。
参数说明:

参数名 类型 必填 说明 备注
platform String Y 平台类型
groupUri String Y 打开Group的uri VK平台为screen_name字段值
extInfo String N 额外数据信息 扩展字段,根据各个平台需要定义

示例代码:

3.7消息推送



WINGSDK推送功能是基于苹果APNS,可以给客户端发送推送通知,通过简单几步配置即可使用。

3.7.1苹果相关配置

导出App推送证书为p12,并上传到WINGSDK后台。
注意:
1、苹果消息推送证书配置请参考Apple官方文档
http://help.apple.com/xcode/mac/current/#/dev11b059073

3.7.2推送集成配置

添加推送模块依赖方法参考2.2 集成SDK到项目
注:Appsflyer卸载检测某些配置与消息推送一样,但如果是用于Appsflyer,此步骤可忽略

3.7.3 Xcode配置

1)开启推送功能

在 Xcode 8.x 以上,必须开启Push Notification能力。找到应用Target设置中的Capabilities -> Push Notifications,确认开关已经设为ON状态。如果没有开启该开关,在 Xcode 8.x 上编译后的应用将获取不到DeviceToken。
iOS——推送配置

2)APNs静默推送权限设置

为了更好支持消息推送,提高消息到达率,需要配置APNs静默推送权限
iOS——推送配置

3.7.4 编写集成代码

1、导入文件头,在AppDelegate中导入:
#import <UserNotifications/UserNotifications.h>

2、初始化消息推送,在AppDelegate的application:initPushWithDelegate:调用下面代码:

注:Appsflyer卸载检测某些配置与消息推送一样,但如果是用于Appsflyer,此步骤可忽略

3、监控用户对推送消息的设置
在AppDelegate的application:didRegisterUserNotificationSettings:调用下面代码:

4、注册DeviceToken
在AppDelegate的application:didRegisterForRemoteNotificationsWithDeviceToken:调用下面代码:

5、监控APNs推送错误
在AppDelegate的application:didFailToRegisterForRemoteNotificationsWithError:调用下面代码:

6、为更好统计用户在不同场景下和不同iOS系统中收到的消息,需在AppDelegate的application:didReceiveLocalNotification:调用下面代码:

7、在iOS 10 以前,为统计 APNs 消息接收事件,需在AppDelegate里的application:didReceiveRemoteNotification:fetchCompletionHandler:回调方法中调用以下接口

对于iOS 10 及以后版本,为统计 APNs 消息接收事件,需要AppDelegate实现协议 UNUserNotificationCenterDelegate,然后在AppDelegate的 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:回调方法中调用以下接口:

8、iOS10中,App可以在前台获取通知,为统计这种消息的接收情况,需在AppDelegate的userNotificationCenter:willPresentNotification:withCompletionHandler:调用下面代码:

3.8 越狱检测

WINGSDK具备调试模式并提供了检测设备是否越狱接口

3.9 广告

3.9.1 检测可播放广告数量

+ (NSInteger) checkRewardedVideo;
大于0为可用

示例代码:

3.9.2 显示广告

+ (void) displayRewardedVideoWithExtInfo:(NSString *)extInfo delegate:(id<WAAdRewardedVideoDelegate>)delegate;

示例代码:

参数名 类型 必填 说明 备注
extInfo NSString N 额外数据(CP调用展示广告接口传递的自定义数据)
delegate WAAdRewardedVideoDelegate Y WAAdRewardedVideoDelegate代理

3.9.3 广告视频代理

在调用3.9.2显示广告代码,需要实现WAAdRewardedVideoDelegate代理

3.9.3.1 显示视频前页面成功时回调

- (void) adPreDisplayRewardedVideoWithCampaignId:(NSString *)campaignId adSetId:(NSString *)adSetId rewarded:(NSString *)rewarded rewardedCount:(NSInteger)rewardedCount extInfo:(NSString *)extInfo;

参数名 类型 说明 备注
campaignId NSString 活动Id
adSetId NSString 广告Id
rewarded NSString 奖励物品
rewardedCount NSInteger 奖励物品数量
extInfo NSString 额外数据(CP调用展示广告接口传入的自定义数据)

3.9.3.2 点击叉按钮后回调

- (void) adDidCancelRewardedVideoWithCampaignId:(NSString *)campaignId adSetId:(NSString *)adSetId process:(WAAdCancelType)process extInfo:(NSString *)extInfo;

参数名 类型 说明 备注
campaignId NSString 活动Id
adSetId NSString 广告Id
process WAAdCancelType WAAdCancelTypePlayBefore 播放前取消
WAAdCancelTypePlaying 播放过程中取消
WAAdCancelTypeAfter 播放后取消
extInfo NSString 额外数据(CP调用展示广告接口传入的自定义数据)

3.9.3.3 加载视频失败回调

- (void) adDidFailToLoadRewardedVideoWithCampaignId:(NSString *)campaignId adSetId:(NSString *)adSetId extInfo:(NSString *)extInfo;

参数名 类型 说明 备注
campaignId NSString 活动Id
adSetId NSString 广告Id
extInfo NSString 额外数据(CP调用展示广告接口传入的自定义数据)

3.9.3.4 播放视频结束回调

- (void) adDidDisplayRewardedVideoWithCampaignId:(NSString *)campaignId adSetId:(NSString *)adSetId rewarded:(NSString *)rewarded rewardedCount:(NSInteger)rewardedCount extInfo:(NSString *)extInfo;

参数名 类型 说明 备注
campaignId NSString 活动Id
adSetId NSString 广告Id
rewarded NSString 奖励物品
rewardedCount NSInteger 奖励物品数量
extInfo NSString 额外数据(CP调用展示广告接口传入的自定义数据)

3.9.3.5 播放完视频点击回调

- (void) adDidClickRewardedVideoWithCampaignId:(NSString *)campaignId adSetId:(NSString *)adSetId rewarded:(NSString *)rewarded rewardedCount:(NSInteger)rewardedCount extInfo:(NSString *)extInfo;

参数名 类型 说明 备注
campaignId NSString 活动Id
adSetId NSString 广告Id
rewarded NSString 奖励物品
rewardedCount NSInteger 奖励物品数量
extInfo NSString 额外数据(CP调用展示广告接口传入的自定义数据)

3.9.4 设置视频广告缓存完代理

+ (void)setWAAdRewardedVideoCachedDelegate:(id<WAAdRewardedVideoCachedDelegate>)delegate;

示例代码:

参数名 类型 必填 说明 备注
delegate WAAdRewardedVideoCachedDelegate Y WAAdRewardedVideoCachedDelegate代理

3.9.5 视频广告缓存完代理

在调用3.9.4设置视频广告缓存回调代码,需要实现WAAdRewardedVideoCachedDelegate代理

视频广告缓存完成回调
- (void)adDidRewardedVideoCachedWithCacheCount:(NSInteger)cacheCount;

参数名 类型 说明 备注
cacheCount NSInteger 可用广告数量,大于0为可用

3.10 智能客服 AIHelp

3.10.1. 判断是否开启AiHelp

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

3.10.2.展示WING后台配置界面

说明:该接口受WING后台中”SDK客服开关V2”控制。如果后台未开启开关,此接口不生效。

3.10.3.判断是否开启游戏评分AiHelp

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

3.10.4. 打开游戏评分AiHelp界面

说明:该接口受WING后台中参数设置-客户端-游戏评价开关
控制。如果后台未开启开关,此接口不生效。

调用示例:
        

3.10.5.设置客服系统语言

示例代码:

参数说明:

参数名 类型 必填 说明 备注
language NSString Y 语言名称 语言支持如下图

语言支持列表图:
图片1

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

3.11.1 获取用户中心数据接口

3.11.1.1实现协议WAUserCenterNoticeDelegate

WAUserCenterResult说明

字段名 类型 说明 备注
code int 状态码 参照5.1.1 状态码说明
msg string 错误信息
userCenterInfo string 用户中心文字内容
uid string 用户ID
characterId string 充值中心Character ID

3.11.1.2 调用方法

3.11.2 显示用户中心弹窗

3.11.2.1实现协议WAUserCenterNoticeUIDelegate

1)用户中心界面关闭回调接口

2)用户中心界面错误回调接口

3.11.2.2调用方法

3.12 调用评分模块

3.12.1 调用评分界面

cp可根据需求,调用appStore评分界面,调用方法

系统要求:iOS10.3及以上系统才可以调起评分界面。

3.12.2 调用游戏评价窗口

游戏评价窗口用于向用户展示评分提示窗口,弹出后用户可以选择提交好评(即拉起Apple评分),或我要提意见(即打开AiHelp),或不谢谢(即关闭窗口,手势返回关闭同这个操作一样),具体UI可以查看后面的效果图。

 [WAUserProxy openGameReview:block]

注意:
1.如果需要评价完成给用户发放奖励,可以在OpenGameReviewStateOpentReview回调中进行处理
2.该功能受WingSDK后台开关控制,需要打开游戏评价开关
3.评分功能是无法获得用户是否进行评分以及具体评分内容和分值的
4.由于apple评分没有任何回调,无法感知用户操作,目前的OpenGameReviewStateOpentReview回调为点击提交好评按钮后5秒进行回调返回。

示例代码:

Simulator Screenshot - iPhone 14 - 2023-06-03 at 14.50.43


3.13 账号删除

3.13.1 UI 版本

sdk内部已经完成了UI展示,以及请求接口操作,CP只需要调用即可。

类名:WAUserProxy
方法名:requestDeleteAccoutUI
返回值:callback
调用方法:WAUserProxy.requestDeleteAccoutUI

调用示例:

3.13.2 接口 版本

接口版本为,cp需要自己做UI,然后调用sdk接口进行删除操作。

3.13.2.1 第三方账号删除授权接口

描述:如果是SIGGINWITHAPPLE登录(可通过接口[WAUserProxy getCurrentLoginPlatform]获取登录方式),需要单独授权一次拿到授权信息,然后再调用请求删除账号接口,目前只支持SIGGINWITHAPPLE
类名:WAUserProxy
方法名:deleteAccounAuthorizationWithPlatform
请求参数:paltform,登录平台
调用方法:WAUserProxy.deleteAccounAuthorizationWithPlatform
调用示例:

WADeleteRequestModel说明

字段名 类型 说明 备注
deletePlatform string 删除平台(Facebook,Apple)
deleteToken string 删除平台accessToken

3.13.2.2 请求删除账号接口

类名:WAUserProxy
方法名:requestDeleteAccout
请求参数:(WADeleteRequestModel*)deleteResult,如无则传递nil。此参数通过调用第三方账号删除授权接口回掉获取。如signinwithappie需要传递此参数
返回值:callback
调用方法:WAUserProxy.requestDeleteAccout
调用示例:

3.13.2.2 取消删除账号接口

类名:WAUserProxy
方法名:cancelRequestDeleteAccoutWithUserid
返回值:callback
调用方法:WAUserProxy.cancelRequestDeleteAccoutWithUserid
调用示例:


3.14 Consent同意相关

3.14.1 同意通知ID配置

Info.plist的配置如下:
GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE NO
GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS NO
GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE NO
GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA NO
FacebookAutoLogAppEventsEnabled NO
ConsentNoticeId (运营提供)

WechatIMG1573

ConsentNoticeId 为Consent后台创建的应用id,具体内容咨询运营人员。

3.14.2 同意界面显示

用户同意界面弹出是内置在SDK初始化逻辑中,当SDK正常初始化完成后,如果需要符合弹出条件,就会展示用户同意界面。

以下情况不会弹出:
1.不在Consent生效地区(一般指欧盟)
2.苹果TTA弹框,用户选择了拒绝
3.用户已经在同意界面操作过同意或拒绝
弹出效果图如下

IMG_3639

3.14.3 打开同意设置

为了允许用户修改同意状态,需要游戏在添加一个按钮入口,并在用户点击按钮入口时调用下面接口打开同意设置界面。

注意:如果不在生效地区(一般指欧盟),调用该接口不会有任何反应。

弹出效果图如下:

IMG_3640


3.15 AdMob功能

3.15.1 配置

iShot_2024-06-25_14.10.41

a、在Info.plist文件中,添加key为GADApplicationIdentifier,value为对应AdMob的应用ID,具体值从运营处获取
b、在Info.plist文件中添加key为SKAdNetworkItems ,Array类型,具体值为

3.15.2 设置测试状态

注意:只有在appstore上下载的应用才允许播放生产环境广告,否则可能会因违反AdMob协议而封停账号。

为了确保在本地测试时播放的是测试广告,需要在SDK初始化之前调用该接口传入YES,在打线上包时才改为传入NO。

参数说明:

参数名 类型 必填 说明 备注
isDebugModel BOOL Y YES,表示强制开启使用测试广告;NO,表示否

示例代码:

3.15.3 横幅广告

参数说明:

参数名 类型 必填 说明 备注
viewController UIViewController Y 显示广告的UIViewController
containerView UIView Y 放置横幅广告的view

3.15.4 插页广告

3.15.4.1检查和预加载插页广告

检查插页广告是否已准备好,若未准备好,则内部会立即开始缓存广告。

返回值说明:

类型 必填 说明 备注
BOOL Y YES为广告已经准备好,调用showInterstitialAdWithViewController可以展示广告;NO为未准备好,此时内部会立即开始缓存广告。

备注:SDK初始化后会立即开始缓存广告,无需在此时调用该接口。为了避免调用展示的时候因缓存失败而无法显示,建议在展示前适当的时机调用该接口确保广告预加载成功(该接口判断如果接口未准备好会立即开始缓存)。比如:可以在进入关卡时调用一次该接口,确保关卡完成后调用showInterstitialAd可以正常展示广告。

3.15.4.2 展示插页广告

参数名 类型 必填 说明 备注
viewContoller UIViewController Y 显示广告的UIViewController
delegate GADFullScreenContentDelegate N 广告结果回调
1.显示广告失败:didFailToPresentFullScreenContentWithError
2.显示广告成功:adWillPresentFullScreenContent
3.广告关闭:adDidDismissFullScreenContent

示例代码:

失败处理建议:尽可能确保广告加载失败时,不影响用户后续体验。建议在
[WAAdMobProxy checkInterstitialAdReady])为 NO 时,直接忽略显示广告继续游戏。

3.15.5 开屏广告

3.15.5.1检查和预加载开屏广告

检查开屏广告是否已准备好,若未准备好,则内部会立即开始缓存广告。

返回值说明:

类型 必填 说明 备注
BOOL Y YES为广告已经准备好,调用showAppOpenAdWithViewController可以展示广告;NO为未准备好,此时内部会立即开始缓存广告。

3.15.5.2检查和预加载开屏广告

参数名 类型 必填 说明 备注
viewContoller UIViewController Y 显示广告的UIViewController
delegate GADFullScreenContentDelegate N 广告结果回调
1.显示广告失败:didFailToPresentFullScreenContentWithError
2.显示广告成功:adWillPresentFullScreenContent
3.广告关闭:adDidDismissFullScreenContent

示例代码:

失败处理建议:尽可能确保广告加载失败时,不影响用户后续体验。建议在
[WAAdMobProxy checkAppOpenAdReady]为 NO 时,直接忽略显示广告继续游戏。

3.15.6 激励广告

在页面中展示激励广告,用户看完广告后会通过后台进行奖励发放。
如果广告还未准备好,会立即开始请求广告并显示loading转圈,等广告加载完成后会立即展示,或者加载失败直接返回回调。

参数说明:

参数名 类型 必填 说明 备注
viewContoller UIViewController Y 显示广告的UIViewController
adName NSString N 广告名称,从运营处获取,SDK会根据ad名称展示对应的广告
extInfo NSString N 透传参数,该参数内容会在通知游戏发货时一起给到游戏服务器,长度限制为100个字符
delegate GADFullScreenContentDelegate N 广告结果回调
1.显示广告失败:didFailToPresentFullScreenContentWithError
2.显示广告成功:adWillPresentFullScreenContent
3.广告关闭:adDidDismissFullScreenContent

示例代码:

失败处理建议:可以在广告显示的didFailToPresentFullScreenContentWithError回调失败中提示用户,广告暂不可用,稍后再试

3.15.7 UMP同意弹窗相关

3.15.7.1同意弹窗说明

SDK在初始化的时候会在页面进行UMP同意弹窗初始化,并展示给需要的用户(欧盟地区)进行同意授权,授权完成后AdMob功能才会进行初始化及加载广告。如果是非欧盟地区用户,则会直接返回授权成功,并进行后续逻辑。
以上为SDK内部逻辑,研发无需处理。除此之外,研发需要在游戏内部放置一个按钮,可供用户打开UMP同意设置并修改同意状态,需要用到下面“检查设置”和”展示设置“两个方法。

UMP同意弹窗效果如下:

9A202A5454A1F53E70C7E37556AAF4C7

3.15.7.2 开关配置

UMP功能默认关闭,如果需要开启UMP功能,在Info.plist中加入下面配置:
AdmobUseUMP 为YES

ump

3.15.7.3 检查配置

检查是否需要展示UMP同意设置。

返回值说明:

类型 必填 说明 备注
BOOL Y YES为需要展示,此时可以显示UMP配置按钮入口;NO为不需要,可以隐藏UMP配置按钮入口。 如果设备在非欧盟地区一般返回NO

3.15.7.4 展示配置

展示UMP同意设置

参数说明:

参数名 类型 必填 说明 备注
viewController UIViewController Y 当前页面控制器 显示成功后,用户操作同意或不同意才会回调,;如果显示失败,则error不为空

示例代码:

3.15.7.5添加UMP同意监听

SDK初始化时的UMP同意弹窗授权状态监听.

notification.userInfo回掉参数说明:

参数名 类型 必填 说明 备注
status NSString Y 1为同意 0为失败
error NSError N status为0时,才有值

示例代码:

四、第三方配置

4.1 Facebook相关配置

4.1.1 Facebook基本配置

游戏如需使用Facebook相关登录、社交、数据收集功能,需要进行以下配置。如果不需要相关功能,请忽略此章节
具体配置请参考第三方后台配置—iOS版 二、Facebook第三方登录后台配置
1、在facebook开发者平台创建一个Facebook应用,创建完之后会生成App ID和App Secret
这里的App ID要配置在项目当中,作为客户端与后台服务器连接的标识
iOS-Facebook基本配置
iOS-Facebook基本配置

注:从3.9.7版本开始,需要配置FacebookClientToken,获取方式:设置-高级-客户端口令

2、在Xcode中配置相应的信息,主要是在info.plist文件中配置URL Schemes、FacebookAppID、FacebookDisplayName、FacebookClientToken。注意一定要对应到facebook后台该App的App ID和Display Name、FacebookClientToken。参考步骤1的截图。

3、针对iOS9做的一些配置
(1)Whitelist Facebook Servers for Network Requests
在info.plist增加下面配置

(2)Whitelist Facebook Apps

4.1.2 Facebook登录权限对照表

权限 类型 权限取值 说明
读取用户配置 string public_profile
读取好友列表 string user_friends

4.2 APPLE相关配置

游戏如需使用APPLE账号进行登录、APPLE商店进行支付,需要进行以下配置。 如果不需要使用APPLE相关功能,请忽略此章节
具体配置请参考第三方后台配置—iOS版 一、Apple后台应用配置

4.3 Appsflyers 相关配置

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

4.3.1 数据收集配置

详见2.6.1 配置 (wa_sdk_track_config.plist)
appsflyer 的DevKey获取方式参考:获取AppsFlyer的DevKey

4.3.2卸载检测

a)官方说明:https://support.appsflyer.com/hc/en-us/articles/211211963-iOS-Uninstall-Tracking



b)对接WINGSDK代码同3.7消息推送

c) 导出App推送证书p12文件,进入appsflyer后台–配置-应用配置-卸载模块
上传p12证书与密码,点击验证。开启卸载衡量开关
图片1

4.4 Chartboost 相关配置

游戏如需使用Chartboost相关数据收集功能,需要进行以下配置。如果不需要相关功能,请忽略此章节
1.数据收集配置:详见2.6.1 配置 (wa_sdk_track_config.plist)

4.5 VK相关配置

游戏如需使用VK相关登录、社交功能,需要进行以下配置。如果不需要相关功能,请忽略此章节
在xcode配置URL Schemes:
在VKapp管理后台https://vk.com/apps?act=manage找到对应App的配置信息。将下图中Application ID(标注1)填到Xcode中的URL Schemes(标注2)。注意加上前缀vk。
iOS-VK配置1
iOS-VK配置2

4.6 Twitter相关配置

游戏如需使用Twitter账号登录游戏,需要进行以下配置。如果不需要相关功能,请忽略此章节
Twitter需要iOS 9.0以上编译,如果使用9.0以下版本编译,会导致应用闪退。具体配置请参考第三方后台配置—iOS 四、Twitter后台应用配置
1、在twitter开发者平台创建一个twitter应用,创建完之后会生成Consumer Key和Consumer Secret
iOS-Twitter配置
这里的Consumer Key和Consumer Secret要配置在项目info.plist中,作为客户端与后台服务器连接的标识。
iOS-Twitter配置
可复制下面代码到info.plist中在修改为对应Consumer Key和Consumer Secret。

2、配置URL Scheme
iOS-Twitter配置
URL Scheme格式:twitterkit-
例如: twitterkit-SPRwO9pH5p9bJCAbUHaiV8oQY

4.7 Instagram相关配置

游戏如需使用Instagram账号登录游戏,需要进行以下配置。如果不需要相关功能,请忽略此章节
具体配置请参考第三方后台配置—iOS 五、Instagram后台应用配置
在instagram开发者平台创建一个instagram应用,创建完之后会生成Client ID、Client Secret和Website URL
这里的Client ID、Client Secret和Website URL要配置在项目info.plist中clientId、clientSecret和redirectUri,作为客户端与后台服务器连接的标识。
iOS-Instagram配置
可复制下面代码到info.plist中在修改为对应clientId、clientSecret和redirectUri

4.8 智能客服 AIHelp 相关配置

如果不需要AiHelp 功能,请忽略此章节
具体配置请参考WINGSDK第三方后台配置-智能客服 AIHelp 相关章节

4.8.1 在AiHelp开发者平台创建一个AiHelp应用,创建完之后会生成appId、domain和appSecret(appKey)

图片27
可复制下面代码到info.plist中在修改为对应appId、domain和appSecret(appKey)

注:从3.9.7版本开始,项目中的domain如果为gamehollywoodhk@aihelp.net,接入新版本后,可能后闪退,需要把domain的@改成.
如 gamehollywoodhk.aihelp.net

4.8.2 配置权限

Privacy – Photo Library Additions Usage Description

4.9 Firebase相关配置

如果不需要Firebase 功能,请忽略此章节
具体配置请参考WINGSDK第三方后台配置-Firebase相关章节

4.9.1 接入

1、引入WAFirebaseImpl库到项目
2、引用GoogleService-Info.plist配置文件到项目中
图片27

Firebase SDK会自动收集事件,详情请参考:Firebase自动收集事件
完成以上两个步骤,即完成Firebase 模块的接入工作

4.9.2 调试

firebase analytics调试方法
1、在xcode中,选择Product > Scheme > Edit scheme…
2、在左侧菜单选择Run
3、选择Arguments 项
4、在Arguments Passed On Launch区域,添加-FIRAnalyticsDebugEnabled
图片27
5、运行项目后,登录firebase 管理后台,项目—分析—DebugView模块,可查看到调试设备上传事件
图片27

5.0 weblogin模块相关配置

在Info.plist文件中,URL types下配置URL Schemes

WechatIMG698

注意
1.格式为wa+YOUR_SDK_APPID。比如SDK的appid为f7f9a9d18da611e5a0be000d3a906774,则对应内容为waf7f9a9d18da611e5a0be000d3a906774
2.这里SDK的appid为wingsdk的appid

五、附录

5.1 代码说明

5.1.1 状态码说明

SDK所有的状态码都定义在枚举WACode中,详见下表:

枚举名称 取值 说明
WACodeSuccess 200 成功
WACodeError 400 错误
WACodeUnautherized 401 请求未认证:访问受限资源是缺少认证信息,或者认证未通过
WACodeForbiden 403 禁止访问:由于应用上下文原因或请求端上下文的原因被禁止访问资源,例如IP限制等
WACodeNotFound 404 找不到被访问资源:接口不存在、页面不存在或对应的业务实体找不到
WACodeServerError 500 服务器内部故障
WACodeApiInvalid 501 所请求接口或页面未实现
WACodeSdkAppIdInvalid 4010 无效appId: appId不存在或未开启
WACodeSignError 4011 无效osign:osign校验失败
WACodeRequestTimeOut 4012 请求已过期:ots校验失败
WACodeAccountVerifyError 4013 第三方平台验证失败
WACodeAccountVerifyError 4014 访客登录验证失败,登录验证失败
WACodePlatformBoundAlready 4015 用户已经绑定了这个平台的其他账户
WACodePrePlatformVerifyError 4016 prePlatform验证失败
WACodeUserNotFound 4017 用户不存在(没有找到)
WACodeAccountBoundByOthers 4018 账户已经被其他用户绑定
WACodeOrderIdInvalid 4019 无效orderId
WACodeOrderVerifyError 4020 订单验证失败
WACodeRewardNotFound 4021 FB邀请奖励事件未找到奖励政策
WACodeRepeatCrashReport 4022 闪退发送报告重复
WACodeChannelNotFound 4023 未找到渠道信息
WACodeCanNotUnbind 4024 不可以执行解绑操作
WACodeExchangeRateConversionFailure 4025 汇率转换失败
WACodePayPlatformClosed 4026 支付渠道已关闭
WACodeLoginPlatformClosed 4029 登录渠道已关闭
WACodeBindAccountClosed 4048 账号绑定关闭
WACodeUnBindAccountClosed 4049 账号解绑关闭
WACodeUserCenterClosed 4059 用户中心未开启
WACodeCanNotSwitchToAnonymous 5001 切换到匿名
WACodeFbObjectType 5002 facebook的objectType不能为空
WACodeFbGiftListRequestPrameterLack 5003 请求gift列表缺少appid,appSecret,objectType参数
WACodeFbTokenNull 5004 facebook token为空
WACodeCanNotMakePayment 5005 该设备不能支付或者不允许支付
WACodePaymentError 5006 支付过程中出错
WACodeCancelled -100 取消操作
WACodeSdkUninitialized -200 SDK没有初始化
WACodeContentCanNotBeShared -201 内容不可分享,一般是传入的内容为空,或者其他
WACodeNotLogin -202 没有登录
WACodeLoginFailure -203 登录失败
WACodeNoPermission -204 登录没有获取到相应的权限
WACodeFileSizeLimit -206 文件大小超出限制
WACodeCurrentIDNotMatch -211 登录的平台账户和当前用户不匹配
WACodeDeviceNotSupported -401 设备不支持
WACodeNetworkUnavailable -402 网络不可用
WACodePayReOrderTimeLimit -509 支付:订单时间间隔限制(在特定的时间内重复下订单)

5.1.2 平台取值

常量 取值 备注
WA_PLATFORM_WINGA WINGA WA平台,手机和邮箱登录
WA_CONSTANT_GUEST GUEST 游客登录
WA_PLATFORM_APPLE APPLE APPLE平台
WA_PLATFORM_FACEBOOK FACEBOOK Facebook平台
WA_PLATFORM_VK VK VK平台
WA_PLATFORM_GHG GHG_INTEGRATION Game Hollywood Games平台
WA_PLATFORM_R2 R2_INTEGRATION R2Games平台
WA_PLATFORM_APPSELFLOGIN APPSELF 应用内登录

5.1.3 请求类型说明

取值值 说明 备注
INVITE 邀请
REQUEST 普通请求

注:vk平台测试游戏邀请功能需要申请权限,可以把请求类型设置成WA_REQUEST_TYPE_REQUEST来测试普通邀请,带申请权限通过后改成WA_REQUEST_TYPE_INVITE来测试。关于vk邀请功能的业务流程图如下:
vk上线流程图

5.2 事件说明

5.2.1 SDK 预定义事件名

静态变量名称 事件名称 说明
WAEventInitiatedPurchase ghw_initiated_purchase 点击购买
WAEventPurchase ghw_purchase 购买完成
WAEventUserCreate ghw_user_create 创建角色
WAEventUserInfoUpdate ghw_user_info_update 更新用户信息
WAEventUserImport ghw_user_import 导入用户
WAEventTaskUpdate ghw_task_update 玩家任务统计
WAEventLevelAchieved ghw_level_achieved 等级或分数

5.2.2 SDK 预定义参数名

参数意义 类型 备注
货币类型 currencyType Stirng 货币类型:如美元USD,人民币CNY详见货币表
现金额 currencyAmount Int
价钱 price Double
道具类型 ContentType String
道具ID contentId Stirng
搜索内容 searchString Stirng
成功失败 success Bool 0表示失败
1表示成功
是否可获得 ghw_payment_info_available Bool 1表示可获得,
0表示不可获得
物品数量 itemAmount Int
物品id itemId Stirng 道具id
物品名称 itemName Stirng 道具名称
是否为第一次导入 isFirstEnter Int
得分 score Int
描述 description Stirng
性别 gender int 性别(int):
0表示女,
1表示男,
2表示未知
年龄 age Int
账户类型 accountType Stirng
设备id deviceId Stirng
渠道id channelId Stirng
广告标识 idfa Stirng
交易流水号 transactionId Stirng
支付类型 paymentType Int 0表示google支付,
1表示apple支付,
2表示赠送
虚拟游戏币 virtualCoinAmount Int
道具名称 iapName Stirng
道具数量 iapAmount Stirng
道具id iapId Stirng
注册时间 registerTime String 时间戳(从1970年开始)
任务id taskId String
任务名称 taskName String
任务类型 taskType String
任务状态 taskStatus String 状态标识:
1->领取任务,
2->开始任务,
3->待领奖(任务完成),
4->已领奖
角色名称 nickName String
vip等级 vip Int
状态 status Int 状态标识,-1: 锁定,1:未锁定
游戏角色Id gameUserId String
角色类型 roleType String
绑定钻石 bindGameGold Int
用户钻石数 gameGold Int
战斗力 fighting Int
货币类型 goldType String 货币类型(string) 钻石,绑定钻石,金币,军魂等。预定义有1和2:
1:游戏货币;
2:游戏绑定货币
变更途径 approach String
当前货币数量 currentAmount Int 用户变更以后该种货币的数量
变更货币数 amount Int

服务端接口文档(bak20240708)

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’

2.2 WINGSDK后台验证CP用户登录信息接口(应用内登录)

登录验证流程图:
后台-CP验证用户登录接口

接口说明:

接口相关 说明
接口提供方 CP
接口调用方 WINGSDK平台
接口实现方式 HTTP/POST
接口描述 应用内登录,登录流程第4步,WINGSDK验证CP用户信息时调用。WINGSDK通过accessToken和extInfo 验证用户信息。accessToken由客户端完成CP帐号系统登录后获取,WINGSDK通过accessToken和extInfo去CP后台验证用户信息
生产环境 地址由CP提供给运营人员,运营人员将地址配置在SDK管理后台
支持Http Method POST
返回信息格式 JSON

输入参数说明:

参数名 类型 是否必须 参数说明
accessToken String N CP帐号登录验证token,从客户端获取
appId String Y WINGSDK应用ID
extInfo String N CP自定义的内容,原样返回
osign Stirng Y MD5(
appId+
accessToken+
secureKey+
extInfo
),如果有参数为空,用空字符串””替代,secureKey (登录验证key,即SDK后台对应的登录秘钥)由运营人员在SDK后台获取

返回格式

参数名 类型 是否必须 参数说明
code Int Y 状态码,请参照状态码说明表
msg String(32) Y 结果描述
error String(32) N 验证错误描述信息
cpUserId String Y CP的用户ID。code=200时返回此字段

三、支付流程

3.1 概述

要使用Wingsdk的支付功能,首先要在SDK后台添加商品列表以及要使用的第三方支付平台信息。每个支付平台的商品列表都是可以单独配置的。
Wingsdk支付过程中,对第三方支付平台的信息都做了屏蔽,也就是说,所有第三方支付平台以及对应的配置信息对CP来说都是透明的。CP在客户端使用的商品列表是wingsdk平台独有的商品Id,和第三方支付后台的商品Id的不一样,但是有映射关系(运营人员在SDK管理后台维护),即wingsdk商品Id+支付渠道标识可以确认一个第三方商品Id,用户选择某一个商品进行购买后,需要选择第三方支付渠道(google、apple等),wingsdk首先会使用wingsdk平台的商品id下订单,之后会使用对应的第三方商品id到第三方(google,apple等)进行支付。支付成功,Wingsdk通知CP发货也是使用Wingsdk的商品Id。
后台-支付流程

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 第三方支付后台配置的商品价格使用的基准货币
payAmount Double N 即将废弃,请勿使用
用户支付的本地货币金额,单位(元);实际支付金额,如果商品有打折,这个金额是折后的价格,请勿根据此参数设定发货数量
currencyCode String(32) N 即将废弃,请勿使用
用户支付时候使用的本地货币币种;
如果非商品购买(如点卡支付,充值金额由玩家定义),此字段为WINGSDK后台设置的支付渠道对应的基准货币
gameAmount Int Y 游戏币数量,如钻石数,金币数
gameCurrency String(32) Y 游戏币种,如钻石,金币,元宝
dollarAmount Double N 即将废弃,请勿使用
将本地货币金额转换成美元($)的商品金额(精确至小数点后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:失败
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,没有区服时可以传空字符串
currentRoleId String Y 当前角色Id,没有则是最近使用的角色Id,没有角色时可以传空字符串
serverList object N 数组对象(当没有服务器信息时,返回空数组:[])
serverList为数组对象,包含数据如下,见示例
serverId String N 服务器Id
serverName String N 服务器名称
roleList object N 数组对象 (当没有角色信息时,返回空数组:[])
roleList为数组对象,包含数据如下,见示例
roleId String N 角色Id
roleName String N 角色名称

示例:

六、消息推送

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未配置

第三方后台配置—iOS版(bak20240708)

wapublisher No Comments

一、Apple后台应用配置

1.1 Apple基础配置

确保游戏的GameCenter启用
iOS-Apple基础配置
获取应用Apple ID,如果使用到appsflyer渠道,应用未发布情况下在appsflyer渠道新建应用要用到此id。如果应用已经发布,则要使用到该应用在app store上的地址。
apple-基础配置
apple-基础配置

1.2 添加Apple商品信息

可以参考官方文档
https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnectInAppPurchase_Guide/Chapters/Introduction.html#//apple_ref/doc/uid/TP40013727-CH1-SW1

1.3 添加Apple测试用户

向测试人员索取测试账号,添加到iTunes Connect中,具体可参考:
https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/SettingUpUserAccounts.html#//apple_ref/doc/uid/TP40011225-CH25-SW10 的 To create a new sandbox tester account部分
iOS-Apple基础配置
截图如下:
1、登录iTunes connect 选择用户和职能
iOS-Apple基础配置

2、进入用户和职能页面,选择沙箱技术测试员Tab标签,新建一个测试账号
iOS-Apple基础配置

添加沙箱技术测试者

iOS-Apple基础配置

截图可能会过时,以官方说明为准

1.4 消息推送

消息推送证书配置请参考Apple官方文档
https://developer.apple.com/cn/help/account

1.5 Sign in with Apple配置

参考苹果官网地址:

https://help.apple.com/developer-account/?lang=en#/devde676e696

1、 登录苹果开发者后台https://developer.apple.com/account
2、 选择Identifiers,找到对应app的identifer,如com.wing.sdkcn.lpw

Sign in with Apple配置

3、 点击对应identifer,进入App Id 配置界面,找到并勾选 Sign In with Apple,点击保存
Sign in with Apple配置

4、 然后点击 右上角 save 保存会出现 Modify App Capabilities 弹窗 点击 Confirm

Sign in with Apple配置

注:开启后 profile 将失效需要重新编辑 profile 文件给开发(即开发使用的开发证书、发布证书需要重新获取,并给到开发)

5、开发打开xcode工程,选择TARGETS–Signing&Capabilites-+Capability,弹出列表中,选择Sign in with Apple即可

Sign in with Apple配置

Sign in with Apple配置

6、开发使用步骤4新生成的签名文件,打包即可测试Sign in with Apple 登录

1.6 Sign in with Apple账号删除参数获取

1、苹果应用私钥&&私钥标识

登录苹果管理后台,找到Keys栏目,点击添加按钮

图片20

然后输入Key name,选择Sign in with Apple,点击右侧配置

图片20

选择对应应用的ID,然后点击Save
图片20

图片20

点击Register

图片20

点击Download,下载格式为.p8文件,保存。
图片20

WechatIMG775

其中Key ID 为私钥标识,copy保存。

打开下载的私钥文件,格式如下:
图片20

需要去除图中标记红色内容(—–BEGIN PRIVATE KEY—–、—–END PRIVATE KEY—–、换行)

如得到苹果应用私钥如下:
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgqrI54XKpKJW+JExnKZGdsa1LJ4pFPnyngbQjF+iHvZigCgYIKoZIzj0DAQehRANCAAT8kn1iPsR5COAruk/IiklsS9xzeRf7nfpcE7bn/Susrckpi+EDKdGmD6BOyKT+0OkpEDubkUaHlsyVM140A7fX

2、苹果账号TeamId

登录苹果管理后台,打开Account下的Membership模块,找到Team ID

图片20

1.7 Apple开发账号后台创建新应用



登录苹果管理后台,打开Certificates, Identifiers & Profiles模块
选择Identifiers,点击+号

图片20

选择App IDs,点击继续

图片20

选择App 类型,点击继续

图片20

填写描述以及Bundle ID,点击继续

图片20

点击Register按钮

图片20

此时,bundleid已经创建完成,接下来,需要创建打包需要的iOS App Development、Ad Hoc、App Store对应的证书文件。

Development:开发证书
Ad Hoc :打包证书,打包后只能安装到注册设备上
App Store :appstore证书,上线appstore打包证书

图片20

选择Profiles,点击+

图片20

选择iOS App Development,点击继续

图片20

选择刚才创建的buildid,点击继续

图片20

选择Select All,点击继续

图片20

选择Select All,点击继续

图片20

创建开发证书名字,点击Generate

图片20

点击Download
图片20

到此,则开发证书创建完成。创建Ad Hoc 、App store证书,步骤一致。完成后,需要把3个文件给到研发。

1.8 配置App Store 服务器通知


登录appstoreconnect后台,打开app选项,找到对应项目,然后在App信息-App Store 服务器通知,选择生产环境服务器URL,点击设置URL,其他URL规则如下

国外应用:https://api.wingsdk.com/sdkapi/v1/pay/apple_refund/{sdkAppId}.do
国内应用: https://api.wingsdk.cn/sdkapi/v1/pay/apple_refund/{sdkAppId}.do

然后选择版本1,然后保存

WechatIMG682

WechatIMG685

1.9 gamecenter权限设置

背景:从2023年8月16日开始,提供Game Center功能的新应用和应用更新需要包含Game Center授权,并在app Store Connect中配置Game Center功能,然后才能将其提交到app Store。App Store上现有的应用不受这一新要求的影响。

1.9.1 appstoreconnect 配置

登录appstoreconnect后台,选择对应用-要提交审核的版本,确保CameCenter 已开启。如已开启,则可忽略。如没有开启,点击开启,如下图
WechatIMG813

1.9.2 开发者后台配置

登录开发者后台 在Identifiers中,选择对应的应用的标识并点击开始编辑,选中 Game Center ,然后保存。如已开启,则可忽略

WechatIMG808

WechatIMG809

然后重新生成开发、生产证书给到研发。

1.9.3 Xcode配置

在TARGETS中,选中对应target,然后点击+Capability,选择Game Center,然后添加。查看项目名.emtitlements文件,确保内部已经添加了Game Center。如已添加,则可忽略

WechatIMG812

WechatIMG810

WechatIMG811

二、Facebook第三方后台配置

2.1 Facebook基础配置

  1. 请参考android的facebook登录配置
    与Android设置不同在“2. 添加Bundle ID”

向开发人员索取Bundle ID,设置到
图片20

2.facebook 应用面板->设置->基本->iOS->网址格式后缀(非必填)
url

2.5 Facebook添加开发者

请参考android的配置Facebook添加开发者

三、VK后台应用配置

请参考android部分的VK后台应用设置

四、Twitter后台应用配置

请参考android部分的Twitter后台应用设置

五、Instagram后台应用配置

请参考android部分的Instagram后台应用设置

六、智能客服 AIHelp后台应用配置

请参考android部分的智能客服 AIHelp后台应用设置

七、Firebase后台应用配置

7.1 现有Firebase添加应用

在浏览器中打开Firebase控制台点击添加已经在Google API存在的项目

1、点击项目进入详情,点击添加应用按钮

图片36

2、输入软件信息,bundle id,程序名字、appstoreID
图片36

3、然后点击注册应用,下载google配置文件放置项目根目录。

图片36

4、接下的步骤可以一直点击到下一步,直到项目创建完成。

图片36

7.2 现有项目获取配置文件(iOS)

登录firbase 管理后台,选择现有项目—设置—常规—您的应用,找到对应应用,下载最新的配置文件。

图片36

八、AppsFlyer后台应用配置

8.1 获取AppsFlyer的DevKey

在浏览器中打开appsflyer管理后台找到配置-应用配置-SDK验证下的Dev key(同一个账号下,所有应用的Dev key是相同的)

WechatIMG774

九、AbMob后台应用配置

参考 AdMob后台配置