Commit f7c3ca7dbca8f1f8b0c44ad8166ab792949fff2f
1 parent
4f63bbe3
Exists in
master
完结分享模块
Showing
12 changed files
with
490 additions
and
129 deletions
Show diff stats
SUMMARY.md
46.2 KB
97 KB
99.3 KB
96.5 KB
online.md
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | |
6 | 6 | #### **简介** |
7 | 7 | |
8 | -在线配置参数是噗嗤游戏开放的一个新模块功能,可以让开发者在后台配置参数中动态修改游戏中的参数值。例如:动态修改游戏的数值,小到一个简单开关0/1切换、一个简单的数字配置;打到一个游戏json配置等等。 | |
8 | +在线配置参数是噗嗤游戏开放的一个新模块功能,可以让开发者在后台【配置参数】栏中动态修改游戏使用的参数值。例如:动态修改游戏的数值,小到一个简单开关0/1切换、一个简单的数字配置;大到一个游戏json配置等。 | |
9 | 9 | |
10 | 10 | 该模块借鉴了[友盟在线配置参数](http://www.it610.com/article/4896789.htm)的设计思路。 |
11 | 11 | |
... | ... | @@ -40,7 +40,7 @@ |
40 | 40 | |
41 | 41 | 提示: |
42 | 42 | |
43 | - > [config.js中配置IsOnlineAutoUse](install.md#config_env)为true:SDK启动时自动去拉取在线配置参数,开发者不需要调用此接口,不然会导致重复拉取 | |
43 | + > [config.js中配置IsOnlineAutoUse](install.md#config_env)为true:SDK启动时会自动去拉取在线配置参数,开发者不需要调用此接口,不然会导致重复拉取 | |
44 | 44 | > |
45 | 45 | > [config.js中配置IsOnlineAutoUse](install.md#config_env)为false:有两种理解方式:1)不接入使用在线配置参数模块;2)接入使用在线配置参数模块,开发者自己手动调用updateOnlineConfig api处理逻辑。 |
46 | 46 | > | ... | ... |
share.md
... | ... | @@ -4,13 +4,32 @@ |
4 | 4 | ------ |
5 | 5 | |
6 | 6 | #### **简介** |
7 | -小游戏生态中,大家普遍把平台提供的分享/视频接口更多用于某个奖励领取、获取n倍奖励、游戏死亡复活、转盘额外次数获得等等一种有效途径(分享:拉取新用户,视频:赚钱广告费);噗嗤游戏在分享or视频平衡推送切换不断的探索迭代中,总结了一套分享/视频积分策略,集成在SDK中开放给开发者,开发者在后台界面化操作下能方便的对某个功能点分享文案、分享图、推送类型(分享、视频)进行添加修改: | |
7 | +小游戏生态中,普遍把平台提供的分享/视频接口更多用于某个奖励领取、获取n倍奖励、游戏死亡复活、转盘额外次数获得等等一种有效途径(分享:拉取新用户,视频:赚钱广告费);噗嗤游戏在分享or视频推送不断的探索迭代中,总结了一套分享/视频积分策略,集成在SDK中开放给开发者,开发者只需对游戏中分享视频功能点命名一个英文名称key(分享视频key),这个key关联分享文案、分享图、分享开关(推送类型)、视频uid等等在后台配置好,使用SDK提供的一个dispatch api传入英文名称key即可完成接入工作。 | |
8 | 8 | |
9 | -- 分享/视频配置可以让开发者在后台中动态修改相关功能的分享/视频配置内容。 | |
9 | +- 分享/视频配置可以让开发者在后台中动态修改相关功能点的分享/视频配置内容。 | |
10 | 10 | |
11 | -- 新增某个功能的分享点配置、在线修改相关功能的分享图或文案、在线切换某个功能按钮的分享/视频功能。 | |
11 | +- 新增某个功能的分享点配置、在线修改相关功能点的分享图或文案、在线切换某个功能点按钮的分享/视频推送类型。 | |
12 | + | |
13 | +- 调用SDK的dispatch api,dispatch会根据后台配置的分享开关(推送类型)自动进行分发:推送分享还是视频全权交由SDK去处理,开发者只需要传入成功/失败回调函数,成功回调函数处理发放领取奖励、n倍奖励、成功复活等操作,失败回调函数处理参数传递的msg信息。 | |
14 | + | |
15 | +#### **疑惑解答** | |
16 | +1. 为什么要引入这个模块? | |
17 | + | |
18 | + > 游戏中很多n倍奖励、复活、额外奖励等功能点通常需要分享或者视频才能额外获得,游戏上线后,运营很有可能会对某些功能点有额外的需求修改:a功能点获取由分享改成视频方式获取、b功能点由视频改成分享方式获取、c功能点需要在前面n次看视频获得后全是分享获得、为某某功能的分享图想换一个、拉取视频不成功自动切换分享等等;为了应对这些不同情形,我们把分享和视频点包装成一个模块,a功能点也不在局限于只是简单的分享、b功能只是视频,而是通过后台分享开关去灵活切换。所有功能点入口调用都是使用dispatch,每个功能点都是转化为一个分享视频key在后台管理。 | |
19 | + | |
20 | +2. 什么是分享视频key? | |
21 | + | |
22 | + > 分享视频key是一个功能点的英文名称,这个key配置在后台中,关联分享文案、分享图、分享开关(推送类型)、视频uid等等信息。某个功能点(不论是分享还是视频方式)调用dispatch传入这个key,SDK会读取这个key关联的信息,根据分享开关(推送类型)来推送分享(需要分享文案、分享图)还是推送视频(需要视频uid)。 | |
23 | + | |
24 | +3. 什么是分享视频分发? | |
25 | + | |
26 | + > 调用dispatch api传入分享视频key,SDK会查找这个key在后台配置的数据,SDK读取数据中分享开关(推送类型)的字段信息,通过这个开关类型来判断推给用户是分享还是视频,这个根据类型来推送的操作就是分发操作。 | |
27 | + | |
28 | +4. 游戏中之前是玩家分享n次后变成看视频或者是看视频n次后全是分享,dispatch能满足吗? | |
29 | + | |
30 | + > 上面的问题dispatch也同样支持,还是同样的调用方式,不需要做其他额外处理,dispatch是怎么做到的了:分享开关(推送类型)有一个分享积分选择项,这个选项就是通过积分策略实现了上面问题。 | |
31 | + > | |
12 | 32 | |
13 | - | |
14 | 33 | |
15 | 34 | #### **后台使用** |
16 | 35 | |
... | ... | @@ -20,7 +39,7 @@ |
20 | 39 | |
21 | 40 |  |
22 | 41 | |
23 | -接入分享视频模块后,后台已经对分享和视频数据分别进行整理统计了,游戏接入方可实时阅览分享/视频的各项数据: | |
42 | +接入分享视频模块后,后台已经对分享和视频数据分别进行整理统计了,游戏接入方可实时查看分享/视频的各项数据: | |
24 | 43 | |
25 | 44 | 查看分享分析,登录后台->头部tab切换到【游戏数据】->【产品分析】->【分享分析】可阅览游戏分享数据的各项统计: |
26 | 45 | |
... | ... | @@ -34,151 +53,488 @@ |
34 | 53 | |
35 | 54 | #### **接入必读** |
36 | 55 | |
37 | -- 接入此模块前,请[**前往sdk/config.js文件中配置【IsUseShareModule: true 】开启share模块功能**](install.md#config_env),此参数配置为true,SDK启动时将自动拉取后台 -> 【分享/视频配置】配置的分享/视频配置列表。 | |
38 | -- 微信小游戏开发者接入此模块,<font color="#FF0000">提审时候为了避免触犯微信平台的</font>[滥用分享行为](https://developers.weixin.qq.com/minigame/product/#_5-1-滥用分享行为),在后台【配置参数】中配置了一个系统级别的配置参数share_unlock,进行分享开关切换:1(开启)0(关闭),提审时候设置为0,审核通过后设置为1,SDK中读取此参数,如果推送的是分享,最终处理为无视频无分享模式。 | |
39 | -- 开发者如 | |
56 | +- 接入此模块前,请[**前往sdk/config.js文件中配置【IsUseShareModule: true 】开启分享视频模块功能**](install.md#config_env),此参数配置为true,才能正常使用此模块的功能,SDK启动时会自动拉取后台配置所有功能点的分享/视频配置列表。 | |
57 | + | |
58 | +- <font color="#FF0000">微信小游戏开发者接入此模块,如果游戏有很多分享点,提审时避免触犯微信平台的[滥用分享行为](https://developers.weixin.qq.com/minigame/product/#_5-1-滥用分享行为),在后台【配置参数】中配置了一个SDK内部使用的[配置参数](online.md)share_unlock,进行分享开关切换:1(开启)0(关闭),提审时设置为0,审核通过后设为1。share_unlock设置为0,所有的功能点不会分享完成、拉起看完视频后发放奖励,而是直接发放奖励,这样就能避免审核时,如果是推送分享拉起分享,被微信认为是诱导分享,被拒的可能性。 | |
59 | + | |
60 | +- sdk/config.js的配置参数ShareRightKey,表示右上角分享的分享视频key,请配置到后台【分享/视频配置】中。如果ShareRightKey配置不为空,SDK会自动调用微信的右上角分享接口(wx.onShareAppMessage),实现右上角分享功能,注意的是开发者在游戏中已经有注册wx.onShareAppMessage需要删除掉,不然游戏中onShareAppMessage的注册事件会把SDK中的注册事件处理函数覆盖掉,导致还是使用的是开发者注册的右上角分享功能。 | |
61 | + | |
62 | +- sdk/config.js的配置参数ShareData表示默认分享视频配置,此条配置应用在两种情况下: | |
40 | 63 | |
64 | + > 1、请求功能点的分享/视频配置列表出错,使用key去查找对应的分享配置肯定是查找不到的,会读取此条默认数据。 | |
65 | + > | |
66 | + > | |
67 | + > | |
68 | + > 2、请求功能点的分享/视频配置列表成功了,但是这个key没有配置到后台,也会读取此条默认数据 | |
41 | 69 | |
42 | -#### 接入API:** | |
70 | +#### **接入**API: | |
43 | 71 | |
44 | 72 | | **名称** | **功能说明** | |
45 | 73 | | ------------------------------- | ------------------------------------------------------------ | |
46 | -| PCSDK.online.updateOnlineConfig | 拉取后台配置的配置参数数据,可代码中手动调用,也可以通过config.js中配置SDK主动拉取,注意:使用前请详细[阅读config.js的IsOnlineAutoUse和IsOnlineDebug参数详解](install.md#config_env) | | |
47 | -| PCSDK.online.getParamsInt | 根据在线参数key获取number类型参数值,适合配置参数为:整数、浮点数 | | |
48 | -| PCSDK.online.getParamsObj | 根据在线参数key获取object类型参数值,适合配置参数为:数组、json对象 | | |
49 | -| PCSDK.online.getParamsString | 根据在线参数key获取string类型参数值,适合配置参数为:字符串、json字符串 | | |
74 | +| PCSDK.shareVideo.share | 普通分享,不需要处理回调的场景,例如分享到群、分享到好友,这些普通的分享,而不用处理成功/失败回调函数。 | | |
75 | +| PCSDK.shareVideo.dispatch | 分享视频分发入口,传入功能点英文命名的分享/视频key | | |
76 | +| PCSDK.shareVideo.getShareVideoType | 根据功能点在后台配置的分享/视频key,得到此功能点分享开关(推送类型)SDK计算得到最终推送类型:-1(无视频无分享)、0(分享)、1(异步分享)、5(分享积分)、2(视频)、3(无视频则分享)、4(视频和分享)(控制分享和视频两个按钮的显示) | | |
50 | 77 | |
51 | 78 | |
52 | 79 | |
53 | -1. ##### **updateOnlineConfig** | |
80 | +1. ##### **share** | |
54 | 81 | |
55 | 82 | ```javascript |
56 | - PCSDK.online.updateOnlineConfig(): Promise<any> | |
83 | + PCSDK.shareVideo.share(key:sring, params?: any, opts?: any): void | |
57 | 84 | ``` |
58 | 85 | |
59 | - 定义:拉取后台配置的配置参数数据, | |
60 | - | |
61 | - 提示: | |
62 | - | |
63 | - > [config.js中配置IsOnlineAutoUse](install.md#config_env)为true:SDK启动时自动去拉取在线配置参数,开发者不需要调用此接口,不然会导致重复拉取 | |
64 | - > | |
65 | - > [config.js中配置IsOnlineAutoUse](install.md#config_env)为false:有两种理解方式:1)不接入使用在线配置参数模块;2)接入使用在线配置参数模块,开发者自己手动调用updateOnlineConfig api处理逻辑。 | |
66 | - > | |
67 | - > 下面示例会演示两种不同配置的使用范例: | |
86 | + 定义:普通分享,不需要处理回调的场景,例如分享到群、分享到好友,这些普通的分享,而不用处理成功/失败回调函数。 | |
68 | 87 | |
69 | 88 | 参数: |
70 | 89 | |
71 | - ``` | |
72 | - 无 | |
73 | - ``` | |
90 | + ```javascript | |
91 | + key: string 必传 功能点的分享/视频key(后台 ->【游戏数据】 ->【配置相关】->【分享/视频配置】配置的key) | |
92 | + | |
93 | + params: object 选传 扩展参数:分享链接query携带自定义参数,{ key: value }对象形式,该对象传递的参数会与SDK内部query参数一起组成query(查询参数, key1=val1&key2=val2的格式)的值,SDK内部参数key有:channel_id、user_invite_uid、share_id、share_key。 | |
94 | + | |
95 | + 提示:params传递的对象中如果含有传递SDK内部query参数key,会被SDK内部参数值覆盖,所以开发者避免传递这些key。 | |
74 | 96 | |
97 | + opts: object 选传 可不传递 | |
98 | + | |
99 | + ``` | |
100 | + | |
75 | 101 | 返回值: |
76 | - | |
102 | + | |
103 | + ```javascript | |
104 | + void | |
77 | 105 | ``` |
78 | - Promise<any> | |
106 | + | |
107 | + 示例:游戏首页分享到群的功能,假如config.js配置的ChannelId: 20024;后台配置的分享视频key: home_share2group、此分享key的id:512;用户id:100000。 | |
108 | + | |
109 | + ```javascript | |
110 | + // 示例1: | |
111 | + // 分享后生成的query:share_id=512&share_key=home_share2group&channel_id=20024&user_invite_uid=100000 | |
112 | + PCSDK.shareVideo.share( 'home_share2group' ); | |
113 | + | |
114 | + // 示例2:第二个参数是分享生成的query携带的参数 | |
115 | + // 分享后生成的query:type=99&share_id=512&share_key=home_share2group&channel_id=20024&user_invite_uid=100000 | |
116 | + PCSDK.shareVideo.share( 'home_share2group', { | |
117 | + type:99 | |
118 | + }); | |
119 | + | |
120 | + // 示例3:第二个参数是分享生成的query携带的参数,传递SDK内部query参数:channel_id | |
121 | + // 分享后生成的query:type=99&share_id=512&share_key=home_share2group&channel_id=20024&user_invite_uid=100000 | |
122 | + PCSDK.shareVideo.share( 'home_share2group', { | |
123 | + type:99, | |
124 | + channel_id:10000 | |
125 | + }); | |
79 | 126 | ``` |
80 | - | |
81 | - <div id="sample"></div> | |
82 | -示例1:config.js配置IsOnlineAutoUse为false,开发者调用updateOnlineConfig api手动拉取在线配置参数数据 | |
83 | - | |
84 | -```javascript | |
85 | - // 后台 ->【游戏数据】->【配置参数】栏配置了:是否显示微信插屏广告、交叉推广位是否展示动态开关 | |
86 | - PCSDK.online.updateOnlineConfig().then(() => { | |
87 | - // 使用1:获取是否后台动态配置开启插屏广告,1为开启,0为关闭 | |
88 | - let isInterstitialAd = PCSDK.online.getParamsInt('interstitial_ad_open', 0) === 1; | |
89 | - // isInterstitialAd && '显示插屏广告'; | |
90 | - | |
91 | - // 使用2:获取动态多个广告位开启的配置 | |
92 | - let pcGameOpenMap = PCSDK.online.getParamsObj('pc_games_open', { "Drawer": 0, "GuessLike": 0, "Cross": 0 }); | |
93 | - // pcGameOpenMap.Drawer === 1 && '显示抽屉推广位'; | |
94 | - // pcGameOpenMap.GuessLike === 1 && '显示猜你喜欢推广位'; | |
95 | - // pcGameOpenMap.Cross === 1 && '显示交叉推广位'; | |
96 | - | |
97 | - // 使用3:获取签到配置 | |
98 | - let signRewardCfg = PCSDK.online.getParamsObj('sign_reward_cfg', [100, 300, 500, 700, 900, 2000, 3000]); | |
99 | - | |
100 | - // 使用4:获取动态bannerUid | |
101 | - let bannerUid = PCSDK.online.getParamsString('banner_common_uid', 'adunit-fe38438f074c717f'); | |
102 | - // bannerUid && '显示banner'; | |
103 | - }); | |
104 | -``` | |
105 | - | |
106 | -示例2:config.js配置IsOnlineAutoUse为true,SDK启动时会自动调用 updateOnlineConfig api拉取在线配置参数数据 | |
107 | - | |
108 | -```javascript | |
109 | - let isInterstitialAd = PCSDK.online.getParamsInt('interstitial_ad_open', 0) === 1; | |
110 | - let pcGameOpenMap = PCSDK.online.getParamsObj('pc_games_open', { "Drawer": 0, "GuessLike": 0, "Cross": 0 }); | |
111 | -``` | |
112 | - | |
113 | - | |
114 | - | |
115 | -2. ##### **getParamsInt** | |
127 | + | |
128 | +2. ##### **dispatch** | |
116 | 129 | |
117 | 130 | ```javascript |
118 | - PCSDK.online.getParamsInt( key: string, defaultVal?: number ): number | |
131 | + PCSDK.shareVideo.dispatch( key: string, params?: { success: Function, fail: Function, context?: any} ): void | |
119 | 132 | ``` |
120 | 133 | |
121 | - 定义:根据在线参数key获取number类型参数值,适合配置参数为:整数、浮点数 | |
134 | + 定义:普通分享,不需要处理回调的场景,例如分享到群、分享到好友,这些普通的分享,而不用处理成功/失败回调函数。 | |
122 | 135 | |
123 | 136 | 参数: |
124 | 137 | |
125 | 138 | ```javascript |
126 | - key: string 必传 后台 ->【配置参数】配置的key | |
127 | - defaultVal: number 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值 | |
139 | + key: string 必传 功能点的分享/视频key(后台 ->【游戏数据】 ->【配置相关】->【分享/视频配置】配置的key) | |
140 | + | |
141 | + params: object 选传 扩展参数:success分享视频成功回调处理函数,fail分享视频失败回调处理函数,contex函数执行上下文 | |
142 | + { | |
143 | + success: ( from:number, ret: any | null ) => void, | |
144 | + error: ( from:number, error: object | null ) => void, | |
145 | + context: any | |
146 | + } | |
147 | + | |
148 | + from:此次分发成功推送类型 | |
149 | + from返回枚举值为: | |
150 | + 0:无视频无分享(后台配置分享开关(推送类型)or 应对审核分享关闭:配置参数share_unlock设置为0) | |
151 | + 1:推送同步分享 | |
152 | + 2:推送异步分享 | |
153 | + 3:推送视频 | |
154 | + | |
155 | + error:此次分发失败的错误消息 | |
156 | + error返回枚举值为: | |
157 | + { code: 1000, msg: '要看完视频哦!' }, | |
158 | + { code: 1001, msg: '加载视频广告失败!' }, | |
159 | + { code: 999, msg: '视频UID不存在!' }, | |
160 | + { code: 1002, msg: '加载视频广告失败!' }, | |
161 | + { code: 1003, msg: '正在观看视频中...' }, | |
162 | + { code: 1004, msg: '分享失败,请尝试发送至不同群!' }, | |
163 | + { code: 1005, msg: '别总骚扰这个群,换个群分享吧!' }, | |
164 | + { code: 1006, msg: '请分享到群哦!' }, | |
165 | + { code: 1007, msg: '分享到群才能领取更多~' }, | |
166 | + { code: 1008, msg: '分享失败,请尝试发送至不同群!' }, | |
167 | + { code: 1009, msg: '今日已达分享上限次数,请明日再来' } | |
128 | 168 | ``` |
129 | - | |
169 | + | |
130 | 170 | 返回值: |
131 | - | |
171 | + | |
172 | + ```javascript | |
173 | + void | |
132 | 174 | ``` |
133 | - number | |
175 | + | |
176 | + 示例:下面只是api的简单演示,详细案例,请戳[详细使用示例](share.md#detail)。 | |
177 | + | |
178 | + 演示 | |
179 | + | |
180 | + ```javascript | |
181 | + // DiamondDoublePopwin.ts文件 | |
182 | + export default class DiamondDoublePopwin extends BaseView{ | |
183 | + protected addEvent() { | |
184 | + super.addEvent(); | |
185 | + // 免费领取双倍(应对微信审核,审核分享不能开放时候使用) | |
186 | + this.btnFree.on(Laya.Event.CLICK, this, this.onReward); | |
187 | + // 分享双倍 | |
188 | + this.btnShare.on(Laya.Event.CLICK, this, this.onReward); | |
189 | + // 视频双倍 | |
190 | + this.btnVideo.on(Laya.Event.CLICK, this, this.onReward); | |
191 | + } | |
192 | + | |
193 | + protected removeEvent() { | |
194 | + super.removeEvent(); | |
195 | + this.btnFree.off(Laya.Event.CLICK, this, this.onReward); | |
196 | + this.btnShare.off(Laya.Event.CLICK, this, this.onReward); | |
197 | + this.btnVideo.off(Laya.Event.CLICK, this, this.onReward); | |
198 | + } | |
199 | + | |
200 | + // 领取奖励操作 | |
201 | + private onReward(){ | |
202 | + PCSDK.shareVideo.dispatch( ShareVideoKeys.DiamondDouble.toString(), { | |
203 | + success: this.handleReward, | |
204 | + fail: this.handleError, | |
205 | + context: this | |
206 | + } ); | |
207 | + } | |
208 | + | |
209 | + // 分享/视频成功后回调处理函数:发奖励 | |
210 | + private handleReward(from: ShareVideoFrom, ret: any | null){ | |
211 | + // 分享成功、视频成功、无视频无分享 | |
212 | + } | |
213 | + | |
214 | + // 分享/视频失败后回调处理函数:弹出提示 | |
215 | + private handleError(from: ShareVideoFrom, error: any | null){ | |
216 | + // 返回错误,处理错误msg信息,自定义处理 | |
217 | + if( error ){ | |
218 | + wx.showToast({ | |
219 | + title: error.msg | |
220 | + }); | |
221 | + } | |
222 | + } | |
223 | + } | |
224 | + | |
225 | + // Enums.ts文件 | |
226 | + // 分享视频key枚举,每个key表示一个功能点 | |
227 | + enum ShareVideoKeys { | |
228 | + // 钻石双倍获取 | |
229 | + DiamondDouble = 'diamond_double', | |
230 | + // 失败获得双倍奖励 | |
231 | + FailRewardDouble = 'fail_reward_double' | |
232 | + } | |
233 | + | |
234 | + // 分享视频功能点最终处理方式 | |
235 | + enum ShareVideoFrom{ | |
236 | + None = 0, // 无视频无分享 | |
237 | + Share = 1, // 分享 | |
238 | + ShareAsync = 2, // 异步分享 | |
239 | + Video = 3, // 看视频 | |
240 | + } | |
134 | 241 | ``` |
135 | - | |
136 | - 示例:[查看上面的示例代码](online.md#sample) | |
137 | - | |
138 | -3. **getParamsObj** | |
242 | + | |
243 | +3. ##### **getShareVideoType** | |
139 | 244 | |
140 | 245 | ```javascript |
141 | - PCSDK.online.getParamsObj( key: string, defaultVal?: any ): any | |
246 | + PCSDK.shareVideo.getShareVideoType( key: string ): number | |
142 | 247 | ``` |
143 | 248 | |
144 | - 定义:根据在线参数key获取object类型参数值,适合配置参数为:数组、json对象 | |
145 | - | |
249 | + 定义:根据分享视频key获取此次shareVideo模块推送的分享视频类型值:-1(无视频无分享:提审时返回)、0(推送同步分享)、1(推送异步分享)、2(推送看视频)、3(无视频则分享)、4(视频和分享)、5(分享积分);此api用于通过得到的类型值处理页面的ui状态(微信和QQ平台对按钮的icon有强制限制):显示视频icon、显示分享icon、既没有分享icon,也没有视频icon。 | |
250 | + | |
146 | 251 | 参数: |
147 | - | |
148 | 252 | ```javascript |
149 | - key: string 必传 后台 ->【配置参数】配置的key | |
150 | - defaultVal: any 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值 | |
253 | + key: string 必传 功能点的分享/视频key(后台 ->【游戏数据】 ->【配置相关】->【分享/视频配置】配置的key) | |
151 | 254 | ``` |
152 | - | |
255 | + | |
153 | 256 | 返回值: |
154 | - | |
155 | - ``` | |
156 | - object | array | null | |
257 | + | |
258 | + ```javascript | |
259 | + number | |
260 | + 返回值此次点击功能按钮触发的推送类型:-1(无视频无分享:提审时返回)、0(推送同步分享)、1(推送异步分享)、2(推送看视频)、3(无视频则分享)、4(视频和分享)、5(分享积分) | |
261 | + 分享视频类型枚举值如下: | |
262 | + // 推送类型:分享视频类型枚举 | |
263 | + enum ShareVideoType { | |
264 | + None = -1, // -1无分享无视频 | |
265 | + Share = 0, // 0分享 | |
266 | + ShareAysnc = 1, // 1异步分享 | |
267 | + ShareIntegral = 5, // 5分享积分 | |
268 | + Video = 2, // 2看视频 | |
269 | + VideoToShare = 3, // 3无视频则分享 | |
270 | + VideoAndShare = 4 // 4视频和分享(控制分享和视频两个按钮的显示) , | |
271 | + } | |
157 | 272 | ``` |
158 | - | |
159 | - 示例:[查看上面的示例代码](online.md#sample) | |
160 | - | |
161 | -1. **getParamsString** | |
162 | - | |
273 | + | |
274 | + 示例:下面只是api的简单演示,详细案例,请戳[详细使用示例](share.md#detail)。 | |
275 | + | |
163 | 276 | ```javascript |
164 | - PCSDK.online.getParamsString( key: string, defaultVal?: string ): string | |
277 | + // DiamondDoublePopwin.ts文件 | |
278 | + export default class DiamondDoublePopwin extends BaseView{ | |
279 | + protected addEvent() { | |
280 | + super.addEvent(); | |
281 | + // 免费领取双倍(应对微信审核,审核分享不能开放时候使用) | |
282 | + this.btnFree.on(Laya.Event.CLICK, this, this.onReward); | |
283 | + // 分享双倍 | |
284 | + this.btnShare.on(Laya.Event.CLICK, this, this.onReward); | |
285 | + // 视频双倍 | |
286 | + this.btnVideo.on(Laya.Event.CLICK, this, this.onReward); | |
287 | + } | |
288 | + | |
289 | + protected removeEvent() { | |
290 | + super.removeEvent(); | |
291 | + this.btnFree.off(Laya.Event.CLICK, this, this.onReward); | |
292 | + this.btnShare.off(Laya.Event.CLICK, this, this.onReward); | |
293 | + this.btnVideo.off(Laya.Event.CLICK, this, this.onReward); | |
294 | + } | |
295 | + | |
296 | + // 每次打开此popwin执行onOpen | |
297 | + protected onOpen(){ | |
298 | + super.onOpen(); | |
299 | + this.iniitRewardUI(); | |
300 | + } | |
301 | + | |
302 | + // 初始化/更新获得奖励按钮ui | |
303 | + private initRewardUI() { | |
304 | + let shareVideoType: ShareVideoType = PCSDK.shareVideo.getShareVideoType(ShareVideoKeys.DiamondDouble.toString()); | |
305 | + switch (shareVideoType) { | |
306 | + case ShareVideoType.Share: // 同步分享 | |
307 | + case ShareVideoType.ShareAysnc: // 异步分享 | |
308 | + case ShareVideoType.ShareIntegral: // 分享积分 | |
309 | + this.btnFree.visible = false; | |
310 | + this.btnShare.visible = true; | |
311 | + this.btnVideo.visible = false; | |
312 | + break; | |
313 | + | |
314 | + case ShareVideoType.Video: // 推送视频 | |
315 | + case ShareVideoType.VideoToShare: // 无视频则分享 | |
316 | + // 视频ui状态 | |
317 | + this.btnFree.visible = false; | |
318 | + this.btnShare.visible = false; | |
319 | + this.btnVideo.visible = true; | |
320 | + break; | |
321 | + | |
322 | + default: // 无视频和无分享 | |
323 | + // 既不显示分享ui又不显示视频ui,直接领奖ui状态 | |
324 | + this.btnFree.visible = true; | |
325 | + this.btnShare.visible = false; | |
326 | + this.btnVideo.visible = false; | |
327 | + break; | |
328 | + } | |
329 | + } | |
330 | + | |
331 | + // 领取奖励操作 | |
332 | + private onReward(){ | |
333 | + PCSDK.shareVideo.dispatch( ShareVideoKeys.DiamondDouble.toString(), { | |
334 | + success: this.handleReward, | |
335 | + fail: this.handleError, | |
336 | + context: this | |
337 | + } ); | |
338 | + } | |
339 | + | |
340 | + // 分享/视频成功后回调处理函数:发奖励 | |
341 | + private handleReward(from: ShareVideoFrom, ret: any | null){ | |
342 | + // 分享成功、视频成功、无视频无分享 | |
343 | + } | |
344 | + | |
345 | + // 分享/视频失败后回调处理函数:弹出提示 | |
346 | + private handleError(from: ShareVideoFrom, error: any | null){ | |
347 | + // 返回错误,处理错误msg信息,自定义处理 | |
348 | + if( error ){ | |
349 | + wx.showToast({ | |
350 | + title: error.msg | |
351 | + }); | |
352 | + } | |
353 | + } | |
354 | + } | |
355 | + | |
356 | + // Enums.ts文件 | |
357 | + // 分享视频类型(与后台一一对应) | |
358 | + export enum ShareVideoType { | |
359 | + None = -1, // -1无分享无视频 | |
360 | + Share = 0, // 0同步分享 | |
361 | + ShareAysnc = 1, // 1异步分享 | |
362 | + ShareIntegral = 5, // 5分享积分 | |
363 | + Video = 2, // 2看视频 | |
364 | + VideoToShare = 3, // 3无视频则分享 | |
365 | + VideoAndShare = 4, // 4视频和分享(控制分享和视频两个按钮的显示) | |
366 | + } | |
367 | + | |
368 | + // 分享视频key枚举,每个key表示一个功能点 | |
369 | + enum ShareVideoKeys { | |
370 | + // 钻石双倍获取 | |
371 | + DiamondDouble = 'diamond_double', | |
372 | + // 失败获得双倍奖励 | |
373 | + FailRewardDouble = 'fail_reward_double' | |
374 | + } | |
375 | + | |
376 | + // 分享视频功能点最终推送类型 | |
377 | + enum ShareVideoFrom{ | |
378 | + None = 0, // 无视频无分享 | |
379 | + Share = 1, // 分享 | |
380 | + ShareAsync = 2, // 异步分享 | |
381 | + Video = 3, // 看视频 | |
382 | + } | |
383 | + | |
165 | 384 | ``` |
385 | + <div id="detail"></div> | |
386 | + 下面演示dispatch和getShareVideoType两个api的完整使用,Laya引擎开发: | |
166 | 387 | |
167 | - 定义:根据在线参数key获取string类型参数值,适合配置参数为:字符串、json字符串 | |
168 | - | |
169 | - 参数: | |
388 | + 页面功能点按钮做三个状态: | |
170 | 389 | |
390 | + 1、看视频状态(显示视频icon) | |
391 | + | |
392 | + 2、分享状态(显示分享icon) | |
393 | + | |
394 | + 3、直接领奖(没有icon,审核状态) | |
395 | + | |
396 | +  | |
397 | + | |
398 | +  | |
399 | + | |
400 | +  | |
401 | + | |
402 | +  | |
403 | + | |
404 | + 例如,一个领取钻石双倍,页面的按钮ui通过下面的方式进行切换 | |
405 | + | |
406 | + 1、页面做三个按钮:视频icon按钮、分享icon按钮、直接领取按钮 | |
407 | + | |
408 | + 2、进入页面根据配置的key获取类型,显示对应类型ui:调用下面的initRewardUI(可随意命名) | |
409 | + | |
410 | + 3、<font color="#FF0000">分享或者视频后,SDK会发送一个tactic.update的消息过来,使用PCSDK.event.add注册监听,PCSDK.event.remove移除监听(PCSDK.event详细了解请查看[事件模块](event.md)),监听事件处理下一次推送显示ui状态:执行一下initRewardUI。</font> | |
411 | + | |
412 | + 4、给三个按钮都注册事件:onReward | |
413 | + | |
171 | 414 | ```javascript |
172 | - key: string 必传 后台 ->【配置参数】配置的key | |
173 | - defaultVal: string 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值 | |
415 | + // DiamondDoublePopwin.ts文件 | |
416 | + export default class DiamondDoublePopwin extends BaseView { | |
417 | + protected addEvent() { | |
418 | + super.addEvent(); | |
419 | + // 免费领取双倍(应对微信审核,审核分享不能开放时候使用) | |
420 | + this.btnFree.on(Laya.Event.CLICK, this, this.onReward); | |
421 | + // 分享双倍 | |
422 | + this.btnShare.on(Laya.Event.CLICK, this, this.onReward); | |
423 | + // 视频双倍 | |
424 | + this.btnVideo.on(Laya.Event.CLICK, this, this.onReward); | |
425 | + // PCSDK.event.add注册监听SDK发送的消息:tactic.update,更新获得奖励按钮ui | |
426 | + PCSDK.event.add('tactic.update', this.initRewardUI, this); | |
427 | + } | |
428 | + | |
429 | + protected removeEvent() { | |
430 | + super.removeEvent(); | |
431 | + this.btnFree.off(Laya.Event.CLICK, this, this.onReward); | |
432 | + this.btnShare.off(Laya.Event.CLICK, this, this.onReward); | |
433 | + this.btnVideo.off(Laya.Event.CLICK, this, this.onReward); | |
434 | + // PCSDK.event.remove移除监听SDK发送的消息:tactic.update | |
435 | + PCSDK.event.remove('tactic.update', this.initRewardUI, this); | |
436 | + } | |
437 | + | |
438 | + // 每次打开此popwin执行onOpen | |
439 | + protected onOpen(){ | |
440 | + super.onOpen(); | |
441 | + // 界面打开 | |
442 | + this.initRewardUI(); | |
443 | + } | |
444 | + | |
445 | + // 领取奖励操作 | |
446 | + private onReward(){ | |
447 | + PCSDK.shareVideo.dispatch( ShareVideoKeys.DiamondDouble.toString(), { | |
448 | + success: this.handleReward, | |
449 | + context: this | |
450 | + } ) | |
451 | + } | |
452 | + | |
453 | + // 分享/视频成功后回调处理函数:发奖励 | |
454 | + private handleReward(from: ShareVideoFrom, ret: any | null){ | |
455 | + // 分享成功、视频成功、无视频无分享 | |
456 | + } | |
457 | + | |
458 | + // 分享/视频失败后回调处理函数:弹出提示 | |
459 | + private handleError(from: ShareVideoFrom, error: any | null){ | |
460 | + // 返回错误,处理错误msg信息,自定义处理 | |
461 | + if( error ){ | |
462 | + wx.showToast({ | |
463 | + title: error.msg | |
464 | + }); | |
465 | + } | |
466 | + } | |
467 | + | |
468 | + // 初始化/更新获得奖励按钮ui | |
469 | + private initRewardUI() { | |
470 | + let shareVideoType: ShareType = PCSDK.shareVideo.getShareVideoType(ShareVideoKeys.DiamondDouble.toString()); | |
471 | + switch (shareVideoType) { | |
472 | + case ShareVideoType.Share: // 同步分享 | |
473 | + case ShareVideoType.ShareAysnc: // 异步分享 | |
474 | + case ShareVideoType.ShareIntegral: // 分享积分 | |
475 | + // 分享ui状态 | |
476 | + this.stat_share.play(0,false); | |
477 | + // 等同于 | |
478 | + // this.btnFree.visible = false; | |
479 | + // this.btnShare.visible = true; | |
480 | + // this.btnVideo.visible = false; | |
481 | + break; | |
482 | + | |
483 | + case ShareVideoType.Video: // 视频 | |
484 | + case ShareVideoType.VideoToShare: // 无视频则分享 | |
485 | + // 视频ui状态 | |
486 | + this.stat_video.play(0,false); | |
487 | + // 等同于 | |
488 | + // this.btnFree.visible = false; | |
489 | + // this.btnShare.visible = false; | |
490 | + // this.btnVideo.visible = true; | |
491 | + break; | |
492 | + | |
493 | + default: // 无视频和无分享 | |
494 | + // 既不显示分享ui又不显示视频ui,直接领奖ui状态 | |
495 | + this.stat_free.play(0,false); | |
496 | + // 等同于 | |
497 | + // this.btnFree.visible = true; | |
498 | + // this.btnShare.visible = false; | |
499 | + // this.btnVideo.visible = false; | |
500 | + break; | |
501 | + } | |
502 | + } | |
503 | + } | |
504 | + | |
505 | + // Enums.ts文件 | |
506 | + // 分享视频类型(与后台一一对应) | |
507 | + export enum ShareVideoType { | |
508 | + None = -1, // -1无分享无视频 | |
509 | + Share = 0, // 0同步分享 | |
510 | + ShareAysnc = 1, // 1异步分享 | |
511 | + ShareIntegral = 5, // 5分享积分 | |
512 | + Video = 2, // 2看视频 | |
513 | + VideoToShare = 3, // 3无视频则分享 | |
514 | + VideoAndShare = 4, // 4视频和分享(控制分享和视频两个按钮的显示) | |
515 | + } | |
516 | + | |
517 | + // 分享视频key枚举,每个key表示一个功能点 | |
518 | + enum ShareVideoKeys { | |
519 | + // 钻石双倍获取 | |
520 | + DiamondDouble = 'diamond_double', | |
521 | + // 失败获得双倍奖励 | |
522 | + FailRewardDouble = 'fail_reward_double' | |
523 | + } | |
524 | + | |
525 | + // 分享视频功能点最终推送类型 | |
526 | + enum ShareVideoFrom{ | |
527 | + None = 0, // 无视频无分享 | |
528 | + Share = 1, // 分享 | |
529 | + ShareAsync = 2, // 异步分享 | |
530 | + Video = 3, // 看视频 | |
531 | + } | |
174 | 532 | ``` |
175 | 533 | |
176 | - 返回值: | |
177 | 534 | |
178 | - ``` | |
179 | - string | |
180 | - ``` | |
181 | 535 | |
182 | - 示例:[查看上面的示例代码](online.md#sample) | |
536 | +#### **终章:** | |
537 | + | |
538 | +这个模块的内容点比较多,接入的注意事项也比较多,望接入者细度使用说明和理解示例意图。 | |
183 | 539 | |
184 | - | |
185 | 540 | \ No newline at end of file |
541 | +<font color="#FF0000">噗嗤游戏的小伙伴在开发公司内部游戏中使用此模块,简单封装了SDK分享视频模块的几个通用方法,提供开发者参考,</font>**[点击下载](https://dep.miso-lab.com/sdkword/sdk-share-tools-1.0.0.zip)**。 | ... | ... |
stat_active.md
... | ... | @@ -26,7 +26,7 @@ |
26 | 26 | | **名称** | **功能说明** | |
27 | 27 | | ------------------------ | ------------------------------------------------------------ | |
28 | 28 | | PCSDK.stat.loadingFinish | 加载游戏资源完成时打点,不是微信代码包白屏加载完成,游戏加载完成游戏ui界面图、json资源 | |
29 | -| PCSDK.stat.setLogind | 设置SDK必须要使用的用户id、第一次创建角色的注册时间,游戏接入方登录游戏服务器后调用 | | |
29 | +| PCSDK.stat.setLogind | 设置SDK必须要使用的用户id、第一次创建角色的注册时间(单位秒),游戏接入方登录游戏服务器后调用 | | |
30 | 30 | | PCSDK.stat.active | 用户活跃/新增注册上报,切记在setLogind设置需要的信息过后使用(设置setLogind后此api不限于使用位置),不然会导致新增注册数据统计异常 | |
31 | 31 | |
32 | 32 | |
... | ... | @@ -82,7 +82,7 @@ |
82 | 82 | PCSDK.stat.setLogind( data: object ): void |
83 | 83 | ``` |
84 | 84 | |
85 | - 定义:游戏成功登录到服务器后得到用户信息(用户id和用户第一次注册时间),设置SDK必需的用户信息 | |
85 | + 定义:游戏成功登录到服务器后得到用户信息:<font color="#FF0000">用户id和用户第一次注册时间(时间戳,单位秒),设置SDK必需的用户信息</font> | |
86 | 86 | |
87 | 87 | 参数: |
88 | 88 | |
... | ... | @@ -90,7 +90,7 @@ |
90 | 90 | data: object |
91 | 91 | { |
92 | 92 | userId: string | number 必传, 用户唯一标识id |
93 | - regTime: number 必传,用户第一次创建角色的注册时间戳 | |
93 | + regTime: number 必传,用户第一次创建角色的注册时间(时间戳,单位秒) | |
94 | 94 | } |
95 | 95 | ``` |
96 | 96 | |
... | ... | @@ -102,7 +102,7 @@ |
102 | 102 | let { user_id, user_reg_time } = data; |
103 | 103 | PCSDK.stat.setLogind({ |
104 | 104 | userId: data.user_id, |
105 | - regTime: data.user_reg_time | |
105 | + regTime: data.user_reg_time // 用户第一次注册时间,时间戳,单位秒 | |
106 | 106 | }); |
107 | 107 | }); |
108 | 108 | ``` |
... | ... | @@ -129,8 +129,8 @@ |
129 | 129 | let { user_id, user_reg_time } = data; |
130 | 130 | // 设置用户信息 |
131 | 131 | PCSDK.stat.setLogind({ |
132 | - userId: data.user_id, | |
133 | - regTime: data.user_reg_time | |
132 | + userId: data.user_id, // 用户id | |
133 | + regTime: data.user_reg_time // 用户第一次注册时间,时间戳,单位秒 | |
134 | 134 | }); |
135 | 135 | // 用户活跃注册打点 |
136 | 136 | PCSDK.stat.active(); |
... | ... | @@ -149,8 +149,8 @@ |
149 | 149 | let { user_id, user_reg_time } = data; |
150 | 150 | // 设置用户信息 |
151 | 151 | PCSDK.stat.setLogind({ |
152 | - userId: data.user_id, | |
153 | - regTime: data.user_reg_time | |
152 | + userId: data.user_id, // 用户id | |
153 | + regTime: data.user_reg_time // 用户第一次注册时间,时间戳,单位秒 | |
154 | 154 | }); |
155 | 155 | // 进入home主页场景 |
156 | 156 | SceneManager.I.switchScene(HomeScene); | ... | ... |
stat_ads.md
... | ... | @@ -6,19 +6,19 @@ |
6 | 6 | |
7 | 7 | 交叉推广位是在游戏中展示其他游戏,用户点击某个游戏跳转进入游戏,达到共享用户的目的。 |
8 | 8 | |
9 | -噗嗤游戏提供了3种类型的交叉推广位,后台可对交叉推广位进行配置管理,对交叉推广位各项指标分析阅览。 | |
9 | +噗嗤游戏提供了3种类型的交叉推广位,后台可对交叉推广位进行配置管理,对交叉推广位各项指标分析查看。 | |
10 | 10 | |
11 | 11 | **3种广告类型:交叉悬浮广告框、交叉抽屉式广告位、交叉猜你喜欢广告位** |
12 | 12 | |
13 | -1. 交叉悬浮广告框,放置到首页、结算页 | |
13 | +1. 交叉悬浮广告框,推荐位置:首页、结算页 | |
14 | 14 | |
15 | 15 |  |
16 | 16 | |
17 | -2. 交叉抽屉式广告位,放置到首页、结算页 | |
17 | +2. 交叉抽屉式广告位,推荐位置:首页、结算页 | |
18 | 18 | |
19 | 19 |  |
20 | 20 | |
21 | -3. 交叉猜你喜欢广告位,推荐放置到结算页 | |
21 | +3. 交叉猜你喜欢广告位,推荐位置:结算页 | |
22 | 22 | |
23 | 23 |  |
24 | 24 | |
... | ... | @@ -86,7 +86,7 @@ |
86 | 86 | | --------------------------- | ------------------------------------------------------------ | |
87 | 87 | | PCSDK.stat.bannerList | 根据类型获取对应类型交叉广告列表,目前SDK支持3种类型:40(交叉悬浮广告框)、70(交叉抽屉式广告位)、50(交叉猜你喜欢广告位) | |
88 | 88 | | PCSDK.stat.bannerNavigateTo | 交叉推广位点击跳转到对应appid的游戏,该接口封装了小游戏的跳转功能(navigateToMiniProgram) | |
89 | -| PCSDK.stat.addExposure | 交叉推广位一条或者多条广告展示,添加曝光数据,SDK在onHide时候上报数据到后台 | | |
89 | +| PCSDK.stat.addExposure | 交叉推广位一条或者多条广告展示,添加曝光数据,SDK内部会在onHide时候上报数据到后台 | | |
90 | 90 | |
91 | 91 | |
92 | 92 | ... | ... |
stat_event.md
stat_level.md
... | ... | @@ -29,7 +29,7 @@ |
29 | 29 | 1. #### **logLevelRelive** |
30 | 30 | |
31 | 31 | ```javascript |
32 | - PCSDK.stat.logLevelRelive(levelId: string | number , opts?: { attr: number } ): void | |
32 | + PCSDK.stat.logLevelRelive(levelId: string | number , params?: { attr?: number, ext?: string } ): void | |
33 | 33 | ``` |
34 | 34 | |
35 | 35 | 定义:关卡复活成功数据上报 |
... | ... | @@ -39,9 +39,10 @@ |
39 | 39 | ``` |
40 | 40 | levelId: string | number 必传,游戏关卡id |
41 | 41 | |
42 | - opts: object 选传,扩展参数,目前只支持传递一个属性: attr | |
42 | + params: object 选传,关卡需要的其他参数,目前只支持传递2个属性: attr、ext | |
43 | 43 | { |
44 | - attr: number 战斗属性(例如:关卡战斗中所使用的枪支等级) | |
44 | + attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级) | |
45 | + ext: string 选传 扩展参数:key1=val1&key2=val2的格式 | |
45 | 46 | } |
46 | 47 | ``` |
47 | 48 | |
... | ... | @@ -50,7 +51,7 @@ |
50 | 51 | 2. #### **logLevelHide** |
51 | 52 | |
52 | 53 | ```javascript |
53 | - PCSDK.stat.logLevelHide(levelId: string | number , opts?: { attr: number } ): void | |
54 | + PCSDK.stat.logLevelHide(levelId: string | number , params?: { attr?: number, ext?: string } ): void | |
54 | 55 | ``` |
55 | 56 | 定义:监听游戏战斗界面onHide时上报关卡的数据。什么是界面onHide?[请详读微信小游戏wx.onHide](https://developers.weixin.qq.com/minigame/dev/api/base/app/life-cycle/wx.onHide.html) |
56 | 57 | 注意事项: |
... | ... | @@ -70,9 +71,10 @@ |
70 | 71 | ``` |
71 | 72 | levelId: string | number 必传,游戏关卡id |
72 | 73 | |
73 | - opts: object 选传,扩展参数,目前只支持传递一个属性: attr | |
74 | + params: object 选传,关卡需要的其他参数,目前只支持传递2个属性: attr、ext | |
74 | 75 | { |
75 | 76 | attr: number 战斗属性(例如:关卡战斗中所使用的枪支等级) |
77 | + ext: string 选传 扩展参数:key1=val1&key2=val2的格式 | |
76 | 78 | } |
77 | 79 | ``` |
78 | 80 | [点此查看完整示例](stat_level.md#sample)如何添加关卡onHide打点代码 |
... | ... | @@ -80,7 +82,7 @@ |
80 | 82 | 3. #### **logLevelFail** |
81 | 83 | |
82 | 84 | ```javascript |
83 | - PCSDK.stat.logLevelFail(levelId: string | number , opts: { ctime: number, first: number, attr?: number } ): void | |
85 | + PCSDK.stat.logLevelFail(levelId: string | number , params: { ctime: number, first: number, attr?: number, ext?: string } ): void | |
84 | 86 | ``` |
85 | 87 | |
86 | 88 | 定义:关卡失败数据上报 |
... | ... | @@ -90,11 +92,12 @@ |
90 | 92 | ``` |
91 | 93 | levelId: string | number 必传,游戏关卡id |
92 | 94 | |
93 | - opts: object 必传,扩展参数,目前只支持传递一个属性: attr | |
95 | + params: object 必传,关卡需要的其他参数 | |
94 | 96 | { |
95 | 97 | ctime: number 必传 关卡耗时 = 当前时间-关卡进入时间,单位秒 |
96 | 98 | first: number 必传 是否第一次体验关卡,1是,0否 |
97 | 99 | attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级) |
100 | + ext: string 选传 扩展参数:key1=val1&key2=val2的格式 | |
98 | 101 | } |
99 | 102 | ``` |
100 | 103 | [点此查看完整示例](stat_level.md#sample)如何添加关卡失败打点代码 |
... | ... | @@ -102,7 +105,7 @@ |
102 | 105 | 4. #### **logLevelWin** |
103 | 106 | |
104 | 107 | ```javascript |
105 | - PCSDK.stat.logLevelWin(levelId: string | number , opts: { ctime: number, first: number, attr?: number } ): void | |
108 | + PCSDK.stat.logLevelWin(levelId: string | number , params: { ctime: number, first: number, attr?: number, ext?: number } ): void | |
106 | 109 | ``` |
107 | 110 | |
108 | 111 | 定义:关卡成功通关数据上报 |
... | ... | @@ -112,11 +115,12 @@ |
112 | 115 | ``` |
113 | 116 | levelId: string | number 必传,游戏关卡id |
114 | 117 | |
115 | - opts: object 必传,扩展参数 | |
118 | + params: object 必传,关卡需要的其他参数 | |
116 | 119 | { |
117 | 120 | ctime: number 必传 关卡耗时 = 当前时间-关卡进入时间,单位秒 |
118 | 121 | first: number 必传 是否第一次体验关卡,1是,0否 |
119 | 122 | attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级) |
123 | + ext: string 选传 扩展参数:key1=val1&key2=val2的格式 | |
120 | 124 | } |
121 | 125 | ``` |
122 | 126 | <div id="sample"></div> 完整示例,以上四个接口使用场景: | ... | ... |