一、简介
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(8.0及以上)
3、Deployment Target:iOS7.0及以上版本
4、BaseSDK iOS 10.1及以上
2.2 集成SDK到项目
集成SDK需要引用抽象层和实现层。抽象层对接口进行抽象,使用反射机制调用到实现层中具体的代码逻辑。
demo代码下载地址: https://codeload.github.com/ghw-wingsdk/demo-iOS/zip/3.9.0
抽象层主要包括WASdkIntf.framework
,以及配置文件wa_sdk_track_config.plist
,wa_sdk.plist
,如下图。
关于wa_sdk_track_config.plist
详见2.6.1 配置 (wa_sdk_track_config.plist),关于wa_sdk.plist
详见2.2.2 WINGSDK基本配置(wa_sdk.plist)。
当调用抽象层接口时候,请导入头文件:
#import <WASdkIntf/WASdkIntf.h>
SDK集成的第三方SDK如下表:
第三方SDK | 版本 | 说明 |
---|---|---|
7.0.0 | ||
APPSFLYER | 5.3.0 | |
CHARTBOOST | 8.1.0 | |
VK | 1.5.1 | |
3.4.2 | ||
AIHELP | 1.7.2.2 | |
Firebase | 6.31.0 |
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)——可选
提示:使用CocoaPod引用的项目打开项目时需要点击’xcworkspace’而不是’ xcodeproj’
方式二:手动引用
如果手动引用,可以使用WINGSDK打包配置页面https://admin.wingsdk.com/developers/pack_config.do进行各个包的下载,并添加到xcode项目中。
下载完成后解压,把解压后的文件拖入xcode工程,其中WASdkIntf和WASdkImpl是必接库,其它可选。
注意:需要加入系统库libsqlite3.tbd(libsqlite3.dylib)、libz.tbd(libz.dylib)
2.2.2 WINGSDK基本配置(wa_sdk.plist)
参数说明:
WaSdkServerUrl:WINGSDK后台url(生产环境:https://api.wingsdk.com/sdkapi/)
appKey:WINGSDK后台appKey
appId:WINGSDK后台appId
os:手机操作系统
channel:发布渠道
2.2.3 工程构建配置
在项目Build Settings中搜索Other Linker Flags 修改值为-ObjC
如下图
2.3 SDK初始化
1、请在AppDelegate的didFinishLaunchingWithOptions 调用下面代码:
1 2 3 |
[WACoreProxy init];//注:此方法要在主线程中调用,不要放入子线程中。 [WACoreProxy application:application didFinishLaunchingWithOptions:launchOptions]; |
2、在AppDelegate的applicationDidEnterBackground调用下面代码:
1 2 |
[WACoreProxy applicationDidEnterBackground:application]; |
3、在AppDelegate的applicationWillEnterForeground调用下面代码:
1 2 |
[WACoreProxy applicationWillEnterForeground:application]; |
4、在AppDelegate的applicationDidBecomeActive调用下面代码:
1 2 |
[WACoreProxy applicationDidBecomeActive:application]; |
2.4 登录
登录过程中如果涉及到应用间跳转,需要在AppDelegate中实现以下方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [WACoreProxy application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { return [WACoreProxy application:app openURL:url options:options]; } - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { return [WACoreProxy application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; } |
2.4.1 登录对话框
SDK内置了一个包含所有支持的登录方式的一个对话框,通过调用以下接口打开对话框:
2.4.1.1 实现协议 WALoginViewDelegate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
(1)登录成功 /*! @abstract 登录成功 @param result 登录的用户信息 */ -(void)loginViewDidCompleteWithResult:(WALoginResult*)result; (2)登录失败 /*! @abstract 登录失败 @param result 登录的用户信息 注:这不是登录结果,由于登录失败所以userId是空的.但如果第三方平台(Facebook,Apple)授权成功,pUserId,pToken,extends不为空,可用于提示用户. @param error 错误 */ -(void)loginViewDidFailWithError:(NSError*)error andResult:(WALoginResult*)result; (3)登录取消 /*! @abstract 用户取消登录 @param result 登录的用户信息(只有platform非空). */ -(void)loginViewDidCancel:(WALoginResult*)result; |
3.4.1.2 调用方法
+(void)login:(id<WALoginViewDelegate>)delegate cacheEnabled:(BOOL)cacheEnabled;
cacheEnabled是否缓存登录方式。如果缓存登录方式,第二次调用的时候直接按照上次的登录方式进行登录,不会弹出登录选择框。如果想弹出登录选择框,请调用clearLoginCache方法,清除缓存
代码示例:
1 2 |
[WAUserProxy login:<#your delegate#> cacheEnabled:<#(BOOL)#>]; |
2.4.1.3 清除登录方式的缓存(重新弹出登录选择框)
+(void)clearLoginCache;
代码示例:
1 2 |
[WAUserProxy clearLoginCache]; |
2.4.1.4 隐藏登录选择框
+(void)hide;
代码示例:
1 2 |
[WAUserProxy 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登录
1 2 |
[WAUserProxy loginWithPlatform: WA_PLATFORM_FACEBOOK extInfo:nil delegate:self]; |
登录平台请参考5.1.2 平台取值
2.4.2.2 实现协议WALoginDelegate中定义的方法
说明:关于APPLE登录,用户每次进入APP进行登录操作,Game Center只进行一次授权。假如用户在第一次登录的时候取消了,以后每次进行登录,程序都会执行登录取消的协议方法,除非用户结束应用重新打开。同样的,第一次登录的时候,出现Game Center授权错误,之后程序都会执行登录失败的协议方法,除非用户结束应用重新打开。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
(1)登录成功 /*! @abstract 登录成功 @param results 登录结果 */ -(void)loginDidCompleteWithResults:(WALoginResult*)result; (2)登录失败 /*! @abstract 登录失败 @param result 登录的用户信息 注:这不是登录结果,由于登录失败所以userId是空的.但如果第三方平台(Facebook,Apple)授权成功,pUserId,pToken,extends不为空,可用于提示用户. @param error 错误 */ -(void)loginDidFailWithError:(NSError*)error andResult:(WALoginResult*)result; (3)登录取消 /*! @abstract 用户取消登录 @param result 登录的账户信息 (注:返回的result只有platform有值) */ -(void)loginDidCancel:(WALoginResult*)result; |
2.4.3 用户登出
退出游戏的时候,必须登出操作。用户登出调用以下接口:
[WAUserProxy logout];
注意:调用logout接口后,serverId、gameUseId、level字段值会被重置,如果需要保持相应字段的值不重置,需要重新设置相应字段的值,参考3.1 公共参数设置
2.5 支付
WINGSDK支付流程如下:
2.5.1 初始化
使用对应平台的支付服务前必须对其进行初始化,请在AppDelegate的didFinishLaunchingWithOptions方法调用以下方法。
+(void)init4Iap;
代码示例:
1 2 |
[WAPayProxy init4Iap]; |
2.5.2 查询商品
2.5.2.1 实现协议 WAInventoryDelegate
1 2 3 4 5 6 7 8 9 10 11 12 |
/*! @abstract 查询成功 @param Inventory 是一个数组,保存着WAIapProduct类型的实例(仅productIdentifier可用) */ -(void)queryInventoryDidCompleteWithResult:(NSArray<WAIapProduct *>*)Inventory; /*! @abstract 查询失败 @param error 错误 */ -(void)queryInventoryDidFailWithError:(NSError*)error; |
2.5.2.2 调用方法
查寻库存商品,调用以下接口:
+(void)queryInventoryWithDelegate:(id<WAInventoryDelegate>)delegate;
代码示例:
1 2 |
[WAPayProxy queryInventoryWithDelegate:self]; |
2.5.3 购买商品
2.5.3.1 实现协议 WAPaymentDelegate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/*! @abstract 支付成功 @param iapResult 支付结果 @param platform 支付平台 */ -(void)paymentDidCompleteWithResult:(WAIapResult*)iapResult andPlatform:(NSString*)platform; /*! @abstract 支付失败 @param error 错误 @param platform 支付平台 */ -(void)paymentDidFailWithError:(NSError*)error andPlatform:(NSString*)platform; |
支付结果说明 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;
代码示例:
1 2 |
[WAPayProxy payWithProductId:product.productIdentifier extInfo:nil delegate:self]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
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
代码示例
1 2 3 4 |
[WAPayProxy queryChannelProduct:@"APPLE" callBackBlock:^(NSArray<WAChannelProduct *> *channelProductsArray, NSError *error) { if (!error) { }}]; |
注意:这个接口需要在查询库存商品( 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;
代码示例:
1 2 |
[WAPayProxy isPayServiceAvailableWithPlatform]; |
2.6 数据收集
使用WINGSDK数据收集接口配合大数据平台,可以轻松统计玩家习惯以及充值等行为,为游戏的市场营销提供数据依据。WINGSDK数据收集使用在游戏的过程中打点的方式,如图所示:
- 以上流程图中涉及到的几个接口是有时序要求的,请参考流程图中的逻辑步骤进行设置:setServerId、setGameUserId、setLevel、setNickname、ghw_user_import事件、ghw_user_create事件
- 其它的事件如ghw_level_achieved、ghw_user_info_update、ghw_gold_update等请根据对应业务逻辑,在对应业务发生时调用接口发送。
序号 | 事件(接口)名称 | 事件描述 | 事件作用 | 建议触发点 | 备注 |
---|---|---|---|---|---|
1 | setServerId | 设置服务器ID | 标记玩家当前所在的服务器,后台根据该字段统计每个服务器的数据 | 登录游戏服成功后 | |
2 | setGameUserId | 设置玩家角色ID | 标记玩家当前的游戏角色ID,后台根据该字段统计玩家的数据 | 登录游戏服成功后 | |
3 | setNickname | 设置玩家角色昵称 | 标记玩家当前的游戏角色昵称,后台订单记录中会记录该昵称 | 登录游戏服成功后 | |
4 | setLevel | 设置玩家当前等级 | 标记玩家当前的游戏角色等级 | 玩家等级发生变更后,如登录游戏服成功后、玩家完成升级后 | |
5 | ghw_user_import | 玩家登录游戏服 | 记录玩家登录游戏服的动作,后台根据该事件统计导入数、登录数、导入留存等数据 | 玩家登录游戏服成功后 | 需要先调用setServerId、setGameUserId接口 |
6 | ghw_user_create | 玩家创建角色 | 记录玩家创建角色的动作,后台根据该事件统计创角数 | 玩家创建角色成功后 | 需要先调用setServerId、setGameUserId、setLevel接口 |
7 | ghw_user_info_update | 更新玩家信息 | 更新玩家信息,后台根据此字段更新玩家昵称、VIP等级等信息 | 玩家信息发送变化时,如玩家改名成功后、玩家VIP等级发生变更 | |
8 | ghw_level_achieved | 更新玩家等级 | 更新玩家等级,后台根据此字段更新玩家等级 | 玩家达到新的等级时 | 需要先调用setLevel接口更新玩家等级 |
9 | ghw_gold_update | 更新玩家货币状况 | 更新玩家货币数量,后台根据此字段更新玩家当前的货币数量 | 玩家货币数量发生变化时,如充值到账、消耗游戏币等 |
2.6.1 配置 (wa_sdk_track_config.plist)
对各个平台进行相应的配置(修改wa_sdk_track_config.plist)。注:文件名以及key值不可修改。
其中,AppleAppID可以在iTunes Connect(https://itunesconnect.apple.com)中新建应用之后获取,具体可以参考iOS-第三方后台配置文档“Apple基础配置”章节。
每个数据收集平台都有相应的开关,可以进行配置。下图的Enable就是开关,Enable: YES-开,NO-关。
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:参数字典参数可在附表中查询
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
NSDictionary *params = @{ WAEventParameterNameSuccess:@YES, WAEventParameterNameTransactionId:@”transactionId”, WAEventParameterNamePaymentType:[NSNumber numberWithInt:WAEnumPaymentTypeApple], WAEventParameterNameCurrencyType:@”CNY”, WAEventParameterNameCurrencyAmount:@100, WAEventParameterNameVirtualCoinAmount:@122, WAEventParameterNameIAPId:@”iapId”, WAEventParameterNameIAPName:@”iapName”, WAEventParameterNameIAPAmount:@100, WAEventParameterNamePrice:@100, }; [WATrackProxy trackWithEventName:WAEventPayment valueToSum:100 params: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实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
WAEvent* event = [[WAEvent alloc]init]; event.defaultEventName = WAEventLevelAchieved; event.defaultValue = 1; event.defaultParamValues = @{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 }; event.eventNameDict = @{WA_PLATFORM_APPSFLYER:WAEventLevelAchieved,WA_PLATFORM_CHARTBOOST:WAEventLevelAchieved,WA_PLATFORM_FACEBOOK:@"FacebookLevelAchieved",WA_PLATFORM_WINGA:WAEventLevelAchieved}; event.valueDict = @{WA_PLATFORM_APPSFLYER:@1,WA_PLATFORM_CHARTBOOST:@1,WA_PLATFORM_FACEBOOK:@2,WA_PLATFORM_WINGA:@1}; event.channelSwitcherDict = @{WA_PLATFORM_APPSFLYER:@NO,WA_PLATFORM_FACEBOOK:@YES,WA_PLATFORM_WINGA:@YES,WA_PLATFORM_CHARTBOOST:@YES}; event.paramValuesDict = @{ WA_PLATFORM_APPSFLYER:@{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 }, WA_PLATFORM_CHARTBOOST:@{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 }, WA_PLATFORM_FACEBOOK:@{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 }, WA_PLATFORM_WINGA:@{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 } }; [event trackEvent]; |
步骤二 发送数据:
1 2 |
[event trackEvent]; |
2.6.2.3.2.2 关于WAEvent 实例的构建
(1)设置默认的事件名称
设置该事件的事件名称,请参考5.2.1 SDK 预定义事件名
event.defaultEventName = WAEventLevelAchieved;
(2)设置渠道自定义事件名称
1 2 |
event.eventNameDict = @{WA_PLATFORM_APPSFLYER:WAEventLevelAchieved,WA_PLATFORM_CHARTBOOST:WAEventLevelAchieved,WA_PLATFORM_FACEBOOK:@"FacebookLevelAchieved",WA_PLATFORM_WINGA:WAEventLevelAchieved}; |
注:
1)eventNameDict的key参考附表 2.6.2 渠道名称表
2)AppsFlyer和facebook的应用内事件和WINGSDK的应用内事件已经做了映射(例如: ghw_login <-> af_login,ghw_login<->fb_login,参考下图),用户无需再手动自定义。
3)如果不进行设置,所有的渠道将采用设置的默认值(defaultEventName)。
(3)设置默认累加值
设置累加值用于统计数字,比如购买的金额等
event.defaultValue = 1;
(4)设置渠道自定义累加值
1 2 |
event.valueDict = @{WA_PLATFORM_APPSFLYER:@1,WA_PLATFORM_CHARTBOOST:@1,WA_PLATFORM_FACEBOOK:@2,WA_PLATFORM_WINGA:@1}; |
1)valueDict的key值参考 附表2.6.2 渠道名称表
2)如果不进行设置,所有的渠道将采用设置的默认值(defaultValue)。
(5)设置事件默认的参数/值
1 2 3 4 5 |
event.defaultParamValues = @{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 }; |
注:
1)参数名称参考5.2.2 SDK 预定义参数名
(6)设置事件渠道自定义的参数/值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
event.paramValuesDict = @{ WA_PLATFORM_APPSFLYER:@{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 }, WA_PLATFORM_CHARTBOOST:@{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 }, WA_PLATFORM_FACEBOOK:@{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 }, WA_PLATFORM_WINGA:@{ WAEventParameterNameScore:@100, WAEventParameterNameFighting:@1000 } }; |
注:
1)渠道名称参考:附表 2.6.2 渠道名称表
2)参数名称参考:5.2.2 SDK 预定义参数名
3)如果不进行设置,所有的渠道将采用设置的默认值(defaultParamValues)
(7)渠道开关设置
1 2 |
event.channelSwitcherDict = @{WA_PLATFORM_APPSFLYER:@NO,WA_PLATFORM_FACEBOOK:@YES,WA_PLATFORM_WINGA:@YES,WA_PLATFORM_CHARTBOOST:@YES}; |
注:以上代码会关闭Appsflyer对该事件的收集,而Facebook、WINGSDK、Chartboost是打开的。默认情况下,WINGSDK和Appsflyer是打开的,而Facebook和Chartboost是关闭的。
2.6.3 预定义事件
建议参数属性:(参数对应的静态变量名请看5.2.2 SDK 预定义参数名)
2.6.3.1 WAEventUserImport
说明:导入用户事件,用户每次进服事件–通过用户id在后台查找
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
isFirstEnter | int | 是否为第一次导入 | Y | 否为0, 是为:1。 默认为0。 |
注意:发送WAEventUserImport事件前需要调用3.1.1 设置服务器ID 接口更新服务器id
2.6.3.2 WAEventInitiatedPurchase
说明:点击购买的时候调用(用于游戏内部虚拟交易统计)
无参数
2.6.3.3 WAEventPurchase
说明:点击购买的时候调用(用于游戏内部虚拟交易统计)。
注:valueToSum(或者defaultValue)的值要传,而且值要和price一样。
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
itemName | String | 游戏内虚拟物品的名称/ID | Y | |
itemAmount | int | 交易的数量 | Y | |
price | float | 交易的总价 | Y |
2.6.3.4 WAEventLevelAchieved
说明:统计玩家等级增长事件,达到等级时调用。
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
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 WAEventUserInfoUpdate
说明:更新用户资料
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
roleType | String | 角色类型 | N | |
nickname | String | 昵称 | N | |
vip | int | 等级 | N | |
status | int | 状态标识: -1:锁定, 1:未锁定 |
N |
2.6.3.7 WAEventGoldUpdate
说明:玩家货币状况变更统计
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
approach | String | 变更途径 | Y | 开通VIP、任务获得、公会贡献、解锁背包等 |
goldType | int | 货币类型 | Y | 钻石,绑定钻石,金币,军魂等。 定义有1和2: 1->游戏货币; 2->游戏绑定货币 |
amount | int | 变更货币数 | Y | 消耗用负数表示,获取用正数表示 |
currentAmount | int | 用户变更以后该种货币的数量 | Y |
2.6.3.8 WAEventTaskUpdate
说明:玩家任务信息统计
参数名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
taskId | String | 任务Id | Y | |
taskName | String | 任务名称 | Y | |
taskType | String | 任务类型 | Y | |
taskStatus | int | 任务状态 | Y | 状态标识: 1→领取任务, 2→开始任务, 3→待领奖(任务完成), 4→已领奖 |
2.6.4 自定义事件
事件描述:自定义事件
事件名称:自定义
参数:自定义
有无累计值:自定义
说明:支持自定义事件的统计
自定义
自定义事件目前只支持事件名和累加值,见示例。
例如:
1 2 3 4 5 |
WAEvent* event = [[WAEvent alloc]init]; event.defaultEventName =@”custom_event_name”; event.defaultValue = 1; [event trackEvent]; |
附表 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 | |
WA_PLATFORM_WINGA | WINGSDK |
WA_PLATFORM_CHARTBOOST | ChartBoost |
2.7. 隐私政策
如果CP对接的登录方式是接口登录方式,则可以使用以下几个接口来实现隐私政策流程,具体流程可参考下图。
2.7.1 获取隐私政策url
WINGSDK有自己的隐私政策,调用以下接口获取到隐私政策url(隐私政策内容为html页面)
1 2 |
+(NSString *)getPrivacyUrl |
示例:
1 2 |
[WACoreProxy getPrivacyUrl]; |
2.7.2 获取隐私政策更新时间
隐私政策更新需要重新显示时可以调用以下接口获取最新隐私政策更新时间,和上一次保存的时间戳作对比,从而确定是否需要展示
1 2 |
+(NSString *)getPrivacyUpdateTime |
示例:
1 2 |
[WACoreProxy getPrivacyUpdateTime]; |
2.7.3 显示隐私政策详情UI
当需要显示隐私政策详情时,可以调用以下接口显示出隐私政策详情界面
1 2 |
+(void)showPrivacyUI:(void(^)())privacyUIClosedHandler |
示例:
1 2 3 4 |
[WACoreProxy showPrivacyUI:^(){ // 已关闭隐私政策回调 }]; |
三、高级功能
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 调试模式
WINGSDK具备调试模式并提供了Log悬浮按钮调试工具,打开调试模式就会显示Log悬浮按钮,使用这个工具测试人员不需要IDE环境就可以在工具窗口中查看调试信息。开启/关闭调试模式调用以下接口(WINGSDK默认是关闭调试模式的)。
[WACoreProxy setDebugMode:YES];
关闭调试模式:
[WACoreProxy setDebugMode:NO];
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 用户登录接口 ,登录平台取值WINGA(CHANNEL_WA),将CP后台返回的用户信息按照规定格式(JSON字符串)通过extInfo字段传入。
应用内登录extInfo格式(标准JSON格式字符串)
1 2 3 4 5 6 7 |
{ "appSelfLogin": true, "puserId": "12345", "accessToken": "o1akkfjia81FMvFSO8kxC96TgQYlheEr", "extInfo": "extInfo String" } |
实例:
1 2 3 |
NSString* extra = @"{\"puserId\":\"12345\",\"extInfo\":\"extInfo String\",\"accessToken\":\"o1akkfjia81FMvFSO8kxC96TgQYlhEEr\",\"appSelfLogin\":true}"; [WAUserProxy loginWithPlatform:WA_PLATFORM_WINGA extInfo: extra delegate:self]; |
字段说明:
字段名 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
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
1 2 3 4 5 6 7 8 9 10 11 12 |
/*! @abstract 新建账户回调接口 @param result 新建账户的账户信息 */ -(void)newAcctDidCompleteWithResult:(WALoginResult*)result; /*! @abstract 切换账户回调接口 @param result 切换账户的账户信息 */ -(void)switchAcctDidCompleteWithResult:(WALoginResult*)result; |
3.4.1.2 调用方法
+(void)openAccountManager:(id<WAAcctManagerDelegate>)delegate;
代码示例:
1 2 |
[WAUserProxy openAccountManager:self]; |
3.4.1.3 关于绑定解绑的通知
账户管理界面没有返回绑定和解绑结果,但是会以通知的方式将结果回调给CP。当绑定有结果之后(无论成功失败),将回传一个WABindingResult实例。当解绑有结果(无论成功失败),将回传一个WAAccount实例。有四个通知,分别是绑定成功、绑定失败、解绑成功、解绑失败,通知的名称分别是以下常量:
WABindDidSucceedNotification;
//绑定成功
WABindDidFailNotification;
//绑定失败
WAUnbindDidSucceedNotification;
//解绑成功
WAUnbindDidFailNotification;
//解绑失败
注:关于绑定facebook成功之后,请注意触发邀请奖励。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//接收通知的方法 -(void)bindDidSucceed:(NSNotification*)noti{ if (noti.object) { WABindingResult* result = noti.object; if ([result.platform isEqualToString:WA_PLATFORM_FACEBOOK]) { [WASocialProxy inviteInstallRewardPlatform:WA_PLATFORM_FACEBOOK TokenString:result.accessToken handler:^(NSUInteger code, NSString *msg, NSError *error) { if (code == 200) { //触发被邀请人安装应用事件接口成功 }else{ //触发被邀请人安装应用事件接口失败 } }]; } } } |
3.4.2 绑定第三方平台账户
3.4.2.1 实现协议WAAccountBindingDelegate
说明:关于APPLE账号的绑定,请参考2.4.2.2 实现协议WALoginDelegate中定义的方法的说明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
(1)绑定成功 /*! @abstract 绑定成功 @param result 绑定的账户信息 */ -(void)bindingDidCompleteWithResult:(WABindingResult*)result; (2)绑定失败 /*! @abstract 绑定失败 @param result 绑定的账户信息 @param error 错误 */ -(void)bindingDidFailWithError:(NSError*)error andResult:(WABindingResult*)result; (3)绑定取消 /*! @abstract 绑定取消 @param result 绑定的账户信息(注:返回的result只有platform有值) */ -(void)bindingDidCancel:(WABindingResult*)result; |
3.4.2.2 调用方法
+(void)bindingAccountWithPlatform:(NSString *const)platform extInfo:(NSString*)extInfo delegate:(id<WAAccountBindingDelegate>)delegate;
绑定平台取值:
名称 | 取值 | 备注 |
---|---|---|
WA_PLATFORM_FACEBOOK | FACEBOOK平台 | |
WA_PLATFORM_APPLE | APPLE | APPLE平台 |
WA_PLATFORM_VK | VK | VK平台 |
示例代码:
1 2 |
[WAUserProxy bindingAccountWithPlatform:WA_PLATFORM_FACEBOOK extInfo:nil delegate:self]; |
3.4.3 查询已经绑定的第三方平台账户
通过以下接口,可以查询当前的账户已经绑定的第三方平台账户:
+(void)queryBoundAccountWithCompleteBlock:(void(^)(NSError* error,NSArray<WAAccount *>* accounts))block;
示例代码:
1 2 3 4 5 6 7 8 |
[WAUserProxy queryBoundAccountWithCompleteBlock:^(NSError *error, NSArray<WAAccount *> *accounts) { if (error) { //失败处理 }else{ //成功 } }]; |
3.4.4 解绑第三方平台账户
通过以下接口,可以解绑已经绑定的第三方平台账户:
+(void)unBindAccountWithPlatform:(NSString *const)platform platformUserId:(NSString*)pUserId completeBlock:(void(^)(NSError* error))completeBlock;
有以下情况之一者,不可解绑:
1.解绑的账户为WINGSDK平台的;
2.用户没有绑定第三方平台账户的;
3.用户只绑定一个第三方平台账户,且用户没有与当前设备绑定的。
示例代码:
1 2 3 4 5 6 7 8 |
[WAUserProxy unBindAccountWithPlatform:_accountSelected.platform platformUserId:_accountSelected.pUserId completeBlock:^(NSError *error) { if (error) { //失败处理 }else{ //成功处理 } }]; |
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;
新建账户后,新的账户会跟当前设备绑定,如果之前的账户没有绑定第三方平台账户,数据将会丢失。
代码示例:
1 2 3 4 5 6 7 8 |
[WAUserProxy createNewAccountWithCompleteBlock:^(NSError *error, WALoginResult *result) { if (!error) { //新建账号成功 }else{ //新建账号失败 } }]; |
3.4.7获取账户信息
SDK提供了获取指定平台的账户信息,可以通过以下接口获取:
+(WAAppUser*)getAccountInfoWithPlatform:(NSString *const)platform;
示例代码:
1 2 |
WAAppUser* appUserId = [WAUserProxy getAccountInfoWithPlatform:WA_PLATFORM_VK]; |
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
1 2 3 4 5 6 7 8 9 |
(1)分享成功 - (void)sharer:(NSObject<WASharing>*)sharer platform:(NSString *const)platform didCompleteWithResults:(NSDictionary *)results; (2)分享失败 - (void)sharer:(NSObject<WASharing>*)sharer platform:(NSString *const)platform didFailWithError:(NSError *)error; (3)分享取消 - (void)sharerDidCancel:(NSObject<WASharing>*)sharer platform:( NSString *const)platform; |
3.6.1.2 调用方法
分享调用以下接口,支持分享链接、图片、视频、Facebook OpenGraph:
+(void)shareWithPlatform:( NSString *const)platform shareContent:(NSObject<WASharingContent>*)shareContent shareWithUI:(BOOL)shareWithUI delegate:(NSObject<WASharingDelegate>*)delegate;
示例代码:
1 2 3 4 5 6 7 8 9 |
WASharePhoto *photo = [[WASharePhoto alloc]init]; photo.image = image; //phote.imageURL = [NSURL URLWithString:@"..."];//image 和 imageURL 可以二选一 photo.userGenerated = YES; photo.caption = @"caption..."; WASharePhotoContent *content = [[WASharePhotoContent alloc]init]; content.photos = @[photo]; [WASocialProxy shareWithPlatform:WA_PLATFORM_FACEBOOK shareContent:content shareWithUI:YES delegate:self]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
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 游戏邀请)等,发送请求调用以下接口:
1 2 |
+(void)sendRequestWithPlatform:(NSString *const)platform requestType:(NSString *const)requestType title:(NSString*)title message:(NSString*)message objectId:(NSString*)objectId receiptIds:(NSArray*)receiptIds delegate:(NSObject<WAGameRequestDialogDelegate>*)delegate; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
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 | 代理 |
示例代码:
1 2 |
[WASocialProxy sendRequestWithPlatform:WA_PLATFORM_FACEBOOK requestType:WA_REQUEST_TYPE_SEND title:@"A gift" message:@"send you a gift" objectId:@"objectId" receiptIds:@[@"receiptId1",@"receiptId2"] delegate:self]; |
3.6.3 游戏邀请
3.6.3.1 查询可邀请好友列表
游戏邀请只能邀请没有玩过当前游戏的好友,称为可邀请好友,查询可邀请的好友调用以下接口:
+(void)queryInvitableFriendsWithDuration:(float)duration platform:(NSString *const)platform completeBlock:(void(^)(NSArray* friends,NSError *error))block;
代码示例:
1 2 3 4 5 6 7 8 |
[WASocialProxy queryInvitableFriendsWithDuration:5 completeBlock:^(NSArray *friends, NSError *error) { if (!error) { //查询成功 }else{ //查询失败 } }]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
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
1 2 3 4 5 6 7 8 9 |
(1)游戏请求成功 - (void)gameRequestDialog:(WAGameRequestDialog *)gameRequestDialog platform:(NSString *const)platform didCompleteWithResults:(NSDictionary *)results; (2) 游戏请求失败 - (void)gameRequestDialog:(WAGameRequestDialog *)gameRequestDialog platform:(NSString *const)platform didFailWithError:(NSError *)error; (3) 游戏请求取消 - (void)gameRequestDialogDidCancel:(WAGameRequestDialog *)gameRequestDialog platform:(NSString *const)platform; |
3.6.3.2.2 调用方法
发送游戏邀请请求调用以下接口(注:VK平台一次只能发一次邀请给一个好友):
+(void)gameInviteWithPlatform:(NSString *const)platform Content:(WAGameRequestContent*)content delegate:(NSObject<WAGameRequestDialogDelegate>*)delegate;
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 |
WAGameRequestContent *gameRequestContent = [[WAGameRequestContent alloc] init]; gameRequestContent.message = @"Take this bomb to blast your way to victory!!!"; gameRequestContent.title = @"Game for you."; //recipients是个数组,可以同时发送给多个好友 NSMutableArray* recipients = [NSMutableArray array]; for (WAAppUser* appUser in _friendSelected) { [recipients addObject:appUser.ID]; } gameRequestContent.recipients = recipients; [WASocialProxy gameInviteWithPlatform:WA_PLATFORM_FACEBOOK Content:gameRequestContent delegate:self]; |
注:如果是VK平台 actionType必须赋值(gameRequestContent.actionType = WAGameRequestActionRequest) VK平台有两个actionType: WAGameRequestActionInvite, WAGameRequestActionRequest。在游戏的测试阶段,请用WAGameRequestActionRequest进行测试。正式上线的时候修改为WAGameRequestActionInvite,参照下图。
3.6.3.3 邀请成功记录
成功邀请好友后,在协议方法-gameRequestDialog:platform:didCompleteWithResults:
中调用以下接口向服务器记录邀请信息:
+(void)createInviteInfoWithPlatform:(NSString *const)platform results:(NSDictionary*)results handler:(void (^)(NSUInteger code,NSString* msg, NSError* error)) handler;
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//请求成功 - (void)gameRequestDialog:(WAGameRequestDialog *)gameRequestDialog platform:(NSString *const)platform didCompleteWithResults:(NSDictionary *)results{ //邀请好友成功 发送邀请信息到SDK后台 [WASocialProxy createInviteInfoWithPlatform:WA_PLATFORM_FACEBOOK results:results handler:^(NSUInteger code, NSString *msg, NSError *error) { //当code为200时,表示发送成功 进行相应的操作。 if (code == 200) { //发送成功 }else{ //发送失败 } }]; } |
3.6.3.4 邀请安装奖励
通过邀请安装使用的用户,安装后需要通知服务器对邀请人进行奖励,必须在玩家进行登录成功或者绑定成功之后时候调用。
+(void)inviteInstallRewardPlatform:(NSString *const)platform TokenString:(NSString*)tokenString handler:(void (^)(NSUInteger code,NSString* msg, NSError* error)) handler;
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
1.在登录成功的协议(-loginDidCompleteWithResults:)方法中调用 -(void)loginDidCompleteWithResults:(WALoginResult *)result{ if (result.platform == WA_PLATFORM_FACEBOOK||result.platform == WA_PLATFORM_VK) { [WASocialProxy inviteInstallRewardPlatform:result.platform TokenString:result.pToken handler:^(NSUInteger code, NSString *msg, NSError *error) { if (code == 200) { //触发被邀请人安装应用事件接口成功 }else{ //触发被邀请人安装应用事件接口失败 } }]; } } 2.在绑定成功的协议(-bindingDidCompleteWithResult:)方法中调用 -(void)bindingDidCompleteWithResult:(WABindingResult*)result{ if ([result.platform isEqualToString:WA_PLATFORM_FACEBOOK]||[result.platform isEqualToString:WA_PLATFORM_VK]) { [WASocialProxy inviteInstallRewardPlatform:result.platform TokenString:result.accessToken handler:^(NSUInteger code, NSString *msg, NSError *error) { if (code == 200) { //触发被邀请人安装应用事件接口成功 }else{ //触发被邀请人安装应用事件接口失败 } }]; } } |
3.6.3.5 邀请事件奖励
通过邀请安装使用的用户,在触发定义的特定事件,需要通知服务器奖励邀请人,比如等级达成、充值等,调用以下接口:
+(void)inviteEventRewardWithPlatform:(NSString *const)platform eventName:(NSString*)eventName handler:(void (^)(NSUInteger code,NSString* msg, NSError* error)) handler;
代码示例:
1 2 3 4 5 6 7 8 |
[WASocialProxy inviteEventRewardWithPlatform:WA_PLATFORM_FACEBOOK eventName:@"eventName" handler:^(NSUInteger code, NSString *msg, NSError *error) { if (code == 200) { //发送邀请奖励事件成功 }else{ //发送邀请奖励事件失败 } }]; |
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;
示例代码:
1 2 3 4 5 6 7 8 |
[WASocialProxy getGroupWithPlatform:WA_PLATFORM_VK groupIds:@[@"groupid1",@"groupid2"] extInfo:nil completeBlock:^(NSArray *groups, NSError *error) { if (!error) { //查询成功 }else{ //查询失败 } }]; |
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;
示例代码:
1 2 3 4 5 6 7 8 |
[WASocialProxy getCurrentAppLinkedGroupWithPlatfrom:WA_PLATFORM_VK extInfo:nil completeBlock:^(NSArray *groups, NSError *error) { if (!error) { //查询成功 }else{ //查询失败 } }]; |
3.6.4.3 查询当前用户已加入的Group
查询当前用户加入的Group详细信息调用以下接口:
+(void)getCurrentUserGroupWithPlatfrom:(NSString *const)platform extInfo:(NSString*)extInfo completeBlock:(void(^)(NSArray* groups,NSError* error))block;
示例代码:
1 2 3 4 5 6 7 8 |
[WASocialProxy getCurrentUserGroupWithPlatfrom:WA_PLATFORM_VK extInfo:nil completeBlock:^(NSArray *groups, NSError *error) { if (!error) { //查询成功 }else{ //查询失败 } }]; |
3.6.4.4 查询当前应用推荐的所有Group
这是3.6.5.2 查询当前应用关联的Group和 3.6.5.3 查询当前用户已加入的Group查询到的Group的汇总,调用以下接口:
+(void)getGroupsWithPlatform:(NSString *const)platform extInfo:(NSString*)extInfo completeBlock:(void(^)(NSArray* groups,NSError* error))block;
示例代码:
1 2 3 4 5 6 7 8 |
[WASocialProxy getGroupsWithPlatform:WA_PLATFORM_VK extInfo:nil completeBlock:^(NSArray *groups, NSError *error) { if (!error) { //查询成功 }else{ //查询失败 } }]; |
3.6.4.5 加入Group
加入指定的某个Group,调用以下接口:
+(void)joinGroupWithPlatform:(NSString *const)platform groupId:(NSString*)groupId extInfo:(NSString *const)extInfo completeBlock:(void(^)(NSError* error))block;
示例代码:
1 2 3 4 5 6 7 8 |
[WASocialProxy joinGroupWithPlatform:WA_PLATFORM_VK groupId:@"GroupId" extInfo:nil completeBlock:^(NSError *error) { if (!error) { //join Group 成功 }else{ //join Group 失败 } }]; |
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 | 额外数据信息 | 扩展字段,根据各个平台需要定义 |
示例代码:
1 2 |
[WASocialProxy openGroupPageWithPlatform:WA_PLATFORM_VK groupUri:_group.screen_name extInfo:nil]; |
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。
2)APNs静默推送权限设置
为了更好支持消息推送,提高消息到达率,需要配置APNs静默推送权限
3.7.4 编写集成代码
1、导入文件头,在AppDelegate中导入:
#import <UserNotifications/UserNotifications.h>
2、初始化消息推送,在AppDelegate的application:initPushWithDelegate:调用下面代码:
1 2 |
[WAPushProxy application:application initPushWithDelegate:self]; |
注:Appsflyer卸载检测某些配置与消息推送一样,但如果是用于Appsflyer,此步骤可忽略
3、监控用户对推送消息的设置
在AppDelegate的application:didRegisterUserNotificationSettings:调用下面代码:
1 2 |
[WACoreProxy application:application didRegisterUserNotificationSettings:notificationSettings]; |
4、注册DeviceToken
在AppDelegate的application:didRegisterForRemoteNotificationsWithDeviceToken:调用下面代码:
1 2 |
[WACoreProxy application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; |
5、监控APNs推送错误
在AppDelegate的application:didFailToRegisterForRemoteNotificationsWithError:调用下面代码:
1 2 |
[WACoreProxy application:application didFailToRegisterForRemoteNotificationsWithError:error]; |
6、为更好统计用户在不同场景下和不同iOS系统中收到的消息,需在AppDelegate的application:didReceiveLocalNotification:调用下面代码:
1 2 |
[WACoreProxy application:application didReceiveLocalNotification:notification]; |
7、在iOS 10 以前,为统计 APNs 消息接收事件,需在AppDelegate里的application:didReceiveRemoteNotification:fetchCompletionHandler:回调方法中调用以下接口
1 2 |
[WACoreProxy application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; |
对于iOS 10 及以后版本,为统计 APNs 消息接收事件,需要AppDelegate实现协议 UNUserNotificationCenterDelegate,然后在AppDelegate的 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:回调方法中调用以下接口:
1 2 |
[WACoreProxy userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler]; |
8、iOS10中,App可以在前台获取通知,为统计这种消息的接收情况,需在AppDelegate的userNotificationCenter:willPresentNotification:withCompletionHandler:调用下面代码:
1 2 |
[WACoreProxy userNotificationCenter:center willPresentNotification:notification withCompletionHandler:completionHandler]; |
3.8 越狱检测
WINGSDK具备调试模式并提供了检测设备是否越狱接口
1 2 |
[WACoreProxy isJailBreak]; |
3.9 广告
3.9.1 检测可播放广告数量
+ (NSInteger) checkRewardedVideo;
大于0为可用
示例代码:
1 2 |
[WAAdProxy checkRewardedVideo]; |
3.9.2 显示广告
+ (void) displayRewardedVideoWithExtInfo:(NSString *)extInfo delegate:(id<WAAdRewardedVideoDelegate>)delegate;
示例代码:
1 2 |
[WAAdProxy displayRewardedVideoWithExtInfo:nil delegate:self]; |
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
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;
示例代码:
1 2 |
[WAAdProxy setWAAdRewardedVideoCachedDelegate:self]; |
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
delegate | WAAdRewardedVideoCachedDelegate | Y | WAAdRewardedVideoCachedDelegate代理 |
3.9.5 视频广告缓存完代理
在调用3.9.4设置视频广告缓存回调代码,需要实现WAAdRewardedVideoCachedDelegate代理
视频广告缓存完成回调
- (void)adDidRewardedVideoCachedWithCacheCount:(NSInteger)cacheCount;
参数名 | 类型 | 说明 | 备注 |
---|---|---|---|
cacheCount | NSInteger | 可用广告数量,大于0为可用 |
3.10 智能客服 AIHelp
3.10.1机器人客服界面
1 2 |
+ (void)showElva:(nonnull NSString *)showConversationFlag config:(NSMutableDictionary *)config |
示例代码:
1 2 3 4 5 6 7 |
NSMutableDictionary *customData = [NSMutableDictionary dictionary]; [customData setObject:@"vip,pay1" forKey:@"WINGSDK-tags"]; [customData setObject:@"1.0.0" forKey:@"VersionCode"]; NSMutableDictionary *config = [NSMutableDictionary dictionary]; [config setObject:customData forKey:@"WINGSDK-custom-metadata"]; [WACscProxy showElva:@"1" config:config]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
showConversationFlag | NSString | Y | 是否开启人工入口 | 为”1″时,将在机器人客服聊天界面右上角,提供人工客服聊天的入口。 |
config | NSMutableDictionary | N | 自定义Dictionary信息。可以在此处设置特定的Tag信息。 |
3.10.2 运营界面
调用此接口需要到AIHelp后台配置运营支撑模块tag设置,具体配置请参考《WINGSDK第三方后台配置.docx》3.7相关章节。
1 2 |
+ (void)showElvaOP:(nonnull NSString *)showConversationFlag config:(NSMutableDictionary *)config |
示例代码:
1 2 3 4 5 6 7 8 9 |
NSMutableDictionary *customData = [NSMutableDictionary dictionary]; [customData setObject:@"vip,pay1" forKey:@"WINGSDK-tags"]; [customData setObject:@"1.0.0" forKey:@"VersionCode"]; NSMutableDictionary *config = [NSMutableDictionary dictionary]; [config setObject:customData forKey:@"WINGSDK-custom-metadata"]; [WACscProxy showElvaOP:@"1" config:config]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
showConversationFlag | NSString | Y | 是否开启人工入口 | 为”1″时,将在机器人客服聊天界面右上角,提供人工客服聊天的入口。 |
config | NSMutableDictionary | N | 自定义Dictionary信息。可以在此处设置特定的Tag信息。 |
3.10.3.展示全部FAQ菜单
调用此接口需要到AIHelp后台配置运营支撑模块tag设置,具体配置请参考WINGSDK第三方后台配置-相关章节。
1 2 |
+ (void)setName:(nonnull NSString *)name (void)showFAQs:(NSMutableDictionary *)config |
示例代码:
1 2 3 4 5 6 7 8 9 10 |
NSMutableDictionary *customData = [NSMutableDictionary dictionary]; [customData setObject:@"vip,pay1" forKey:@"WINGSDK-tags"]; [customData setObject:@"1.0.0" forKey:@"VersionCode"]; NSMutableDictionary *config = [NSMutableDictionary dictionary]; [config setObject:customData forKey:@"WINGSDK-custom-metadata"]; [config setObject:@"1" forKey:@"showContactButtonFlag"]; //展示联系客服按钮 [config setObject:@"1" forKey:@"showConversationFlag"]; //可以点击到人工客服页面 [WACscProxy showFAQs:config]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
config | NSMutableDictionary | N | 自定义Dictionary信息。可以在此处设置特定的Tag信息。 |
3.10.4.展示FAQ分类
调用此接口需要到AIHelp后台配置运营支撑模块tag设置,具体配置请参考WINGSDK第三方后台配置-相关章节。
1 2 |
+ (void)showFAQSection:(NSString *)sectionPublishId config:(NSMutableDictionary *)config |
示例代码:
1 2 3 4 5 6 7 8 9 |
NSMutableDictionary *customData = [NSMutableDictionary dictionary]; [customData setObject:@"vip,pay1" forKey:@"WINGSDK-tags"]; [customData setObject:@"1.0.0" forKey:@"VersionCode"]; NSMutableDictionary *config = [NSMutableDictionary dictionary]; [config setObject:customData forKey:@"WINGSDK-custom-metadata"]; [WACscProxy showFAQSection:@"11831" config:config]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
sectionPublishId | NSString | Y | FAQ Section的PublishID | 可以在AIHelp 后台 中,从FAQs菜单下[Section]菜单,查看PublishID |
config | NSMutableDictionary | N | 自定义Dictionary信息。可以在此处设置特定的Tag信息。 |
3.10.5.展示单条FAQ
调用此接口需要到AIHelp后台配置运营支撑模块tag设置,具体配置请参考WINGSDK第三方后台配置-相关章节。
1 2 |
+ (void)showSingleFAQ:(NSString *)faqId config:(NSMutableDictionary *)config |
示例代码:
1 2 3 4 5 6 7 8 |
NSMutableDictionary *customData = [NSMutableDictionary dictionary]; [customData setObject:@"vip,pay1" forKey:@"WINGSDK-tags"]; [customData setObject:@"1.0.0" forKey:@"VersionCode"]; NSMutableDictionary *config = [NSMutableDictionary dictionary]; [config setObject:customData forKey:@"WINGSDK-custom-metadata"]; [WACscProxy showSingleFAQ:@"42888" config:config]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
faqId | NSString | Y | FAQ的编号 | 打开AIHelp 客服后台,在机器人→常见问题页面下找到指定FAQ的FAQ编号,注意:此faqId不能填写客服后台未存在的FAQ编号。 |
config | NSMutableDictionary | N | 自定义Dictionary信息。可以在此处设置特定的Tag信息。 |
3.10.6.人工客服界面
1 2 |
+ (void)showConversation:(NSMutableDictionary *)config |
示例代码:
1 2 3 4 5 6 7 8 9 |
NSMutableDictionary *customData = [NSMutableDictionary dictionary]; [customData setObject:@"vip,pay1" forKey:@"WINGSDK-tags"]; [customData setObject:@"1.0.0" forKey:@"VersionCode"]; NSMutableDictionary *config = [NSMutableDictionary dictionary]; [config setObject:customData forKey:@"WINGSDK-custom-metadata"]; [WACscProxy showConversation:config]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
config | NSMutableDictionary | N | 自定义Dictionary信息。可以在此处设置特定的Tag信息。 |
3.10.7.设置客服系统中所展示的游戏名称
调用此接口在AIHelp中显示游戏的名称
1 2 |
+ (void)setName:(nonnull NSString *)name |
示例代码:
1 2 |
[WACscProxy setName:@"WADemo"]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
name | NSString | Y | 您想在AIHelp智能客服系统中展示的您的游戏名称 |
3.10.8.设置客服系统语言
1 2 |
+ (void)setLanguage:(nonnull NSString *)language |
示例代码:
1 2 |
[WACscProxy setLanguage:@"zh_CN"]; |
参数说明:
参数名 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
language | NSString | Y | 语言名称 | 语言支持如下图 |
语言支持列表图:
3.11 用户中心(充值中心账号信息)
3.11.1 获取用户中心数据接口
3.11.1.1实现协议WAUserCenterNoticeDelegate
1 2 |
-(void)userCenterNoticeWithResult:(WAUserCenterResult *)result; |
WAUserCenterResult说明
字段名 | 类型 | 说明 | 备注 |
---|---|---|---|
code | int | 状态码 | 参照5.1.1 状态码说明 |
msg | string | 错误信息 | — |
userCenterInfo | string | 用户中心文字内容 | — |
userName | string | 用户名 | — |
password | string | 初始密码 | 如果用户修改过密码,此字段为空 |
3.11.1.2 调用方法
1 2 |
[WAUserProxy getUserCenterNotice:(id<WAUserCenterNoticeDelegate>)delegate]; |
3.11.2 显示用户中心弹窗
3.11.2.1实现协议WAUserCenterNoticeUIDelegate
1)用户中心界面关闭回调接口
1 2 |
- (void)userCenterNoticeClose; |
2)用户中心界面错误回调接口
1 2 |
- (void)userCenterNoticeError:(NSError *)error; |
3.11.2.2调用方法
1 2 |
[WAUserProxy showUserCenterNoticeUI:(id<WAUserCenterNoticeUIDelegate>)delegate]; |
3.12 调用评分界面
cp可根据需求,调用appStore评分界面,调用方法
1 2 |
[WAUserProxy openReview]; |
系统要求:iOS10.3及以上系统才可以调起评分界面。
四、第三方配置
4.1 Facebook相关配置
4.1.1 Facebook基本配置
游戏如需使用Facebook相关登录、社交、数据收集功能,需要进行以下配置。如果不需要相关功能,请忽略此章节
具体配置请参考第三方后台配置—iOS版 二、Facebook第三方登录后台配置。
1、在facebook开发者平台创建一个Facebook应用,创建完之后会生成App ID和App Secret
这里的App ID要配置在项目当中,作为客户端与后台服务器连接的标识
2、在Xcode中配置相应的信息,主要是在info.plist文件中配置URL Schemes、FacebookAppID、FacebookDisplayName。注意一定要对应到facebook后台该App的App ID和Display Name。参考步骤1的截图。
3、针对iOS9做的一些配置
(1)Whitelist Facebook Servers for Network Requests
在info.plist增加下面配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>facebook.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>fbcdn.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>akamaihd.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict> |
(2)Whitelist Facebook Apps
1 2 3 4 5 6 7 8 |
<key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array> |
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)
4.3.2卸载检测
a)官方说明:https://support.appsflyer.com/hc/en-us/articles/211211963-iOS-Uninstall-Tracking
b)对接WINGSDK代码同3.7消息推送
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。
4.6 Twitter相关配置
游戏如需使用Twitter账号登录游戏,需要进行以下配置。如果不需要相关功能,请忽略此章节
Twitter需要iOS 9.0以上编译,如果使用9.0以下版本编译,会导致应用闪退。具体配置请参考第三方后台配置—iOS 四、Twitter后台应用配置
1、在twitter开发者平台创建一个twitter应用,创建完之后会生成Consumer Key和Consumer Secret
这里的Consumer Key和Consumer Secret要配置在项目info.plist中,作为客户端与后台服务器连接的标识。
可复制下面代码到info.plist中在修改为对应Consumer Key和Consumer Secret。
1 2 3 4 5 6 7 8 |
<key>Twitter</key> <dict> <key>consumerKey</key> <string>Consumer Key</string> <key>consumerSecret</key> <string>Consumer Secret</string> </dict> |
2、配置URL Scheme
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,作为客户端与后台服务器连接的标识。
可复制下面代码到info.plist中在修改为对应clientId、clientSecret和redirectUri
1 2 3 4 5 6 7 8 9 10 |
<key>Instagram</key> <dict> <key>clientId</key> <string>your Client Id</string> <key>clientSecret</key> <string>your Client Secret</string> <key>redirectUri</key> <string>your Redirect Uri</string> </dict> |
4.8 智能客服 AIHelp 相关配置
如果不需要AiHelp 功能,请忽略此章节
具体配置请参考WINGSDK第三方后台配置-智能客服 AIHelp 相关章节。
4.8.1 在AiHelp开发者平台创建一个AiHelp应用,创建完之后会生成appId、domain和appSecret(appKey)
可复制下面代码到info.plist中在修改为对应appId、domain和appSecret(appKey)
1 2 3 4 5 6 7 8 9 10 |
<key>AiHelp</key> <dict> <key>appId</key> <string>your appId</string> <key>domain</key> <string>your domain</string> <key> appSecret</key> <string>your appKey</string> </dict> |
4.8.2 配置权限
** iOS10需要在工程的info.plist添加权限:
Privacy – Photo Library Usage Description
Privacy – Camera Usage Description
** iOS11需要在工程的info.plist添加权限:
Privacy – Photo Library Additions Usage Description
4.9 Firebase相关配置
如果不需要Firebase 功能,请忽略此章节
具体配置请参考WINGSDK第三方后台配置-Firebase相关章节。
4.9.1 接入
1、引入WAFirebaseImpl库到项目
2、引用GoogleService-Info.plist配置文件到项目中
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
5、运行项目后,登录firebase 管理后台,项目—分析—DebugView模块,可查看到调试设备上传事件
五、附录
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_PLATFORM_APPLE | APPLE | APPLE平台 |
WA_PLATFORM_FACEBOOK | Facebook平台 | |
WA_PLATFORM_VK | VK | VK平台 |
5.1.3 请求类型说明
取值值 | 说明 | 备注 |
---|---|---|
INVITE | 邀请 | |
REQUEST | 普通请求 |
注:vk平台测试游戏邀请功能需要申请权限,可以把请求类型设置成WA_REQUEST_TYPE_REQUEST来测试普通邀请,带申请权限通过后改成WA_REQUEST_TYPE_INVITE来测试。关于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 | 导入用户 |
WAEventGoldUpdate | ghw_gold_update | 消耗游戏币 |
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 |