Commit 4f63bbe319f9a900e59743250be3b461d9eaa415

Authored by 小川 费
1 parent 9418790e
Exists in master

1

README.md
... ... @@ -16,17 +16,9 @@ PCSDK上报小游戏用户所触发的各种行为数据到噗嗤管理后台,
16 16 # 噗嗤管理后台
17 17 噗嗤管理后台对sdk中上报的各项数据进行分析;管理sdk中所需要的配置信息:分享/视频配置、配置参数(在线参数配置)、交叉推广位配置、用户自定义事件配置。
18 18  
19   -方便开发者联调测试阶段不影响上线游戏运营相关数据或者配置信息,config.js的Env配置提供测试和正式环境切换。
20   -
21   -> 测试环境各种配置管理、数据分析查看,请[前往测试服后台](http://pre-data.d3games.com/#/login)
22   -
23   -> 正式环境各种配置管理、数据分析查看,请[前往正式服后台](https://data.d3games.com/#/login)
24   -
25 19 噗嗤管理后台地址:
26 20  
27   -- 测试服后台,地址:http://pre-data.d3games.com/#/login
28   -
29   -- 正式服后台,地址:https://data.d3games.com/#/login
  21 +- https://data.d3games.com/#/login
30 22  
31 23 **友情提示:**
32 24  
... ... @@ -52,8 +44,8 @@ PCSDK上报小游戏用户所触发的各种行为数据到噗嗤管理后台,
52 44  
53 45 **后台提供配置相关功能(不能跳转请联系管理员添加权限):**
54 46  
55   -- [分享/视频配置](http://pre-data.d3games.com/index.html#/share_list)
56   -- [配置参数](http://pre-data.d3games.com/index.html#/config_list)
  47 +- [分享/视频配置](https://data.d3games.com/index.html#/share_list)
  48 +- [配置参数](https://data.d3games.com/index.html#/config_list)
57 49  
58 50  
59 51 # 更多:
... ...
book.json
... ... @@ -12,7 +12,6 @@
12 12 "-sharing",
13 13 "-highlight",
14 14 "-livereload",
15   - "-fontsettings",
16 15 "simple-page-toc@^0.1.1",
17 16 "prism",
18 17 "prism-themes",
... ... @@ -40,6 +39,9 @@
40 39 "structure": {
41 40 "readme": "README.md"
42 41 },
  42 + "styles": {
  43 + "website": "styles/website.css"
  44 + },
43 45 "pluginsConfig": {
44 46 "prism": {
45 47 "css": [
... ...
faq.md 0 → 100644
... ... @@ -0,0 +1,174 @@
  1 +# FAQ
  2 +
  3 +------
  4 +
  5 +#### **简介**
  6 +
  7 +启动注册打点上报用户注册活跃数据,噗嗤管理后台为游戏提供用户数据统计:实时获取活跃、新增用户数、打开次数、在线时长......;注册转化统计。
  8 +
  9 +
  10 +
  11 +#### **后台使用**
  12 +
  13 +完成启动注册打点后,登录后台->头部tab切换到【游戏数据】->【产品分析】->【实时数据】即可实时查看用户活跃、新增等信息:
  14 +![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_008.png "🔍点击查看大图")
  15 +
  16 +点击【注册转化】可查看列表式显示新增、注册、加载完成等详细信息:
  17 +
  18 +![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_009.png "🔍点击查看大图")
  19 +
  20 +
  21 +
  22 +
  23 +
  24 +#### **接入API:**
  25 +
  26 +| **名称** | **功能说明** |
  27 +| ------------------------ | ------------------------------------------------------------ |
  28 +| PCSDK.stat.loadingFinish | 加载游戏资源完成时打点,不是微信代码包白屏加载完成,游戏loading自身cdn资源加载完成调用 |
  29 +| PCSDK.stat.setLogind | 设置sdk必须要使用的用户id、第一次创建角色的注册时间,游戏接入方登录游戏服务器后调用 |
  30 +| PCSDK.stat.active | 用户活跃/新增注册上报,切记在setLogind设置需要的信息过后使用(不限于使用位置),不然会导致新增注册数据统计异常 |
  31 +
  32 +
  33 +
  34 +
  35 +
  36 +
  37 +
  38 +1. **loadingFinish**
  39 +
  40 + ```javascript
  41 + PCSDK.stat.loadingFinish(): void
  42 + ```
  43 +
  44 + 定义:加载游戏加载资源完成时打点
  45 +
  46 + 参数:
  47 +
  48 + ```
  49 + 无
  50 + ```
  51 +
  52 + 示例:加载完成游戏主界面图片、json资源打点
  53 +
  54 + ```javascript
  55 + private async initEnv() {
  56 + await SDKTools.env(Const.VERSION);
  57 + this.loadRes();
  58 + this.loadLogin();
  59 + }
  60 +
  61 + // 开始加载资源
  62 + private loadRes() {
  63 + LoaderManager.I.setCallback(this.onLoadedMain, this.onProgressMain, null, this).loadMain();
  64 + }
  65 +
  66 + // 资源加载完成
  67 + private onLoadedMain() {
  68 + PCSDK.stat.loadingFinish()
  69 + }
  70 +
  71 + // 更新资源加载进度条
  72 + private onProgressMain(ret) {
  73 + let progress = ret.data;
  74 + this.skin.txtProgress.text = Math.floor(progress * 100) + '%';
  75 + }
  76 + ```
  77 +
  78 +2. **setLogind**
  79 +
  80 + ```javascript
  81 + PCSDK.stat.setLogind( data: object ): void
  82 + ```
  83 +
  84 + 定义:游戏登录完成,得到登录用户的用户id和用户第一次注册时间,设置SDK必需的用户信息
  85 +
  86 + 参数:
  87 +
  88 + ```javascript
  89 + data: object
  90 +{
  91 + userId: string | number 必传, 用户唯一标识id
  92 + regTime: number 必传,用户第一次创建角色的注册时间戳
  93 + }
  94 + ```
  95 +
  96 + 示例:游戏登录完成后,获取用户信息后进行打点(该示例,只是模拟使用环境)
  97 +
  98 + ```javascript
  99 + // 发起登录请求,得到登录数据信息,调用setLogind设置SDK用户信息
  100 + Api.login().then( data => {
  101 + let { user_id, user_reg_time } = data;
  102 + PCSDK.stat.setLogind({
  103 + userId: data.user_id,
  104 + regTime: data.user_reg_time
  105 + });
  106 + });
  107 + ```
  108 +
  109 +3. **active**
  110 +
  111 + ```javascript
  112 + PCSDK.stat.active(): void
  113 + ```
  114 +
  115 + 定义:用户活跃/新增注册上报,切记在使用setLogind设置用户信息过后调用此接口,不然会导致新增注册数据统计异常
  116 +
  117 + 参数:
  118 +
  119 + ```javascript
  120 + 无
  121 + ```
  122 +
  123 + 示例:游戏登录完成后,获取用户信息后进行打点(该示例,只是模拟该接口使用环境)
  124 +
  125 + ```javascript
  126 + // 使用场景1:发起登录请求,得到用户数据信息,调用setLogind设置SDK用户信息后立即调用active
  127 + Api.login().then( data => {
  128 + let { user_id, user_reg_time } = data;
  129 + // 设置用户信息
  130 + PCSDK.stat.setLogind({
  131 + userId: data.user_id,
  132 + regTime: data.user_reg_time
  133 + });
  134 + // 用户活跃注册打点
  135 + PCSDK.stat.active();
  136 + });
  137 +
  138 + // 使用场景2:发起登录请求,得到用户数据信息,调用setLogind设置SDK用户信息。在其他界面调用active
  139 + // 资源加载loading界面
  140 + class LoadingScene(){
  141 + constructor(){
  142 + this.login();
  143 + }
  144 +
  145 + private login(){
  146 + // 登录
  147 + Api.login().then( data => {
  148 + let { user_id, user_reg_time } = data;
  149 + // 设置用户信息
  150 + PCSDK.stat.setLogind({
  151 + userId: data.user_id,
  152 + regTime: data.user_reg_time
  153 + });
  154 + // 进入home主页场景
  155 + SceneManager.I.switchScene(HomeScene);
  156 + });
  157 + }
  158 + }
  159 +
  160 + // Home页面
  161 + class HomeScene(){
  162 + constructor(){
  163 + this.btnStarGame.on('click', this.onGame, this);
  164 + }
  165 +
  166 + private onGame(){
  167 + // 用户活跃注册打点
  168 + PCSDK.stat.active();
  169 + // 进入游戏页面
  170 + SceneManager.I.switchScene(GameScene);
  171 + }
  172 + }
  173 +
  174 + ```
0 175 \ No newline at end of file
... ...
images/sdk_023.png 0 → 100755

84.9 KB

images/sdk_024.png 0 → 100755

36.8 KB

images/sdk_025.png 0 → 100755

56.5 KB

images/sdk_026.png 0 → 100755

61.8 KB

inner/README.md 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +# 噗嗤SDK
  2 +PCSDK(噗嗤SDK)是一款封装了微信小游戏、QQ小游戏平台常用api接口和用户行为数据上报的一款产品。
  3 +PCSDK上报小游戏用户所触发的各种行为数据到噗嗤管理后台,后台对数据统计分析后以多样化的方式展现数据。
  4 +
  5 +**PCSDK提供的模块功能:**
  6 +
  7 +- [统计模块](stat.md)
  8 +- [分享视频模块](share.md)
  9 +- [配置参数模块️](online.md)
  10 +- [多平台接口模块](platform.md)
  11 +- [数据模块](data.md)
  12 +- [事件模块](event.md)
  13 +
  14 +
  15 +
  16 +# 噗嗤管理后台
  17 +噗嗤管理后台对sdk中上报的各项数据进行分析;管理sdk中所需要的配置信息:分享/视频配置、配置参数(在线参数配置)、交叉推广位配置、用户自定义事件配置。
  18 +
  19 +方便开发者联调测试阶段不影响上线游戏运营相关数据或者配置信息,config.js的Env配置提供测试和正式环境切换。
  20 +
  21 +> 测试环境各种配置管理、数据分析查看,请[前往测试服后台](http://pre-data.d3games.com/#/login)
  22 +
  23 +> 正式环境各种配置管理、数据分析查看,请[前往正式服后台](https://data.d3games.com/#/login)
  24 +
  25 +噗嗤管理后台地址:
  26 +
  27 +- 测试服后台,地址:http://pre-data.d3games.com/#/login
  28 +
  29 +- 正式服后台,地址:https://data.d3games.com/#/login
  30 +
  31 +**友情提示:**
  32 +
  33 +- **之后文档中'后台'指的是[噗嗤管理后台],而不是微信小程序/小游戏后台。**
  34 +- **后台登录账号获取:需提供手机信息给我方运营,运营创建后台登录账号、密码后提供反馈。**
  35 +- **登录后台即可使用后台提供的各项服务**
  36 +
  37 +
  38 +
  39 +**后台概览:**
  40 +## ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_006.png "🔍点击查看大图")
  41 +
  42 +
  43 +
  44 +**后台提供数据分析功能(不能跳转请联系管理员添加权限):**
  45 +
  46 +- [注册/活跃用户,在线时长实时数据分析](https://data.d3games.com/index.html#/view_chart)
  47 +- [分享数据分析](https://data.d3games.com/index.html#/share_exact)
  48 +- [用户事件行为分析](https://data.d3games.com/index.html#/dot_list)
  49 +- [渠道数据统计分析](https//data.d3games.com/index.html#/channel_stat_list)
  50 +
  51 +
  52 +
  53 +**后台提供配置相关功能(不能跳转请联系管理员添加权限):**
  54 +
  55 +- [分享/视频配置](http://pre-data.d3games.com/index.html#/share_list)
  56 +- [配置参数](http://pre-data.d3games.com/index.html#/config_list)
  57 +
  58 +
  59 +# 更多:
  60 +- 快速接入,请详读 [安装步骤](install.md)
  61 +
  62 +
  63 +
  64 +- 遇到问题可以查看 [FAQ](faq.md)
0 65 \ No newline at end of file
... ...
inner/install.md 0 → 100644
... ... @@ -0,0 +1,233 @@
  1 +# 安装步骤
  2 +
  3 +------
  4 +
  5 +## SDK下载
  6 +
  7 +1. 下载最新版本的SDK [SDK下载](download.md) 。
  8 +2. 解压下载的sdk-out-v{版本号}.zip包,解压文件夹里面的的目录结构:
  9 +
  10 +```
  11 +├── sdk.d.ts
  12 +├── sdk/
  13 +| ├── config.js
  14 +| └── index.js
  15 +| └── libs/
  16 + | └── game.min.js
  17 +```
  18 +
  19 +![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_001.png "🔍点击查看大图")
  20 +
  21 +- **sdk.d.ts:sdk的ts声明文件,开发者项目采用Typescript开发,请复制该文件到项目中。**
  22 +- sdk/config.js:sdk配置文件,【[详细请阅读下方config.js参数说明](install.md#config)】
  23 +- sdk/index.js:sdk入口文件,引入了sdk所提供的模块功能
  24 +- sdk/libs/game.min.js:sdk类库核心代码文件
  25 +
  26 +
  27 +
  28 +## 配置合法域名
  29 +
  30 +* ##### 管理员或开发者身份在微信小程序后台→设置→开发者设置中添加 request、download合法域名
  31 + 测试环境 request 合法域名:
  32 +
  33 + https://pre-dataapi.d3games.com (统计平台测试服域名)
  34 +
  35 + 正式环境 request 合法域名:
  36 +
  37 + https://dataapi.d3games.com (统计平台正式服域名)
  38 +
  39 + cdn资源请求合法域名:
  40 +
  41 + https://dep.miso-lab.com (>>>request、download均要添加<<<)
  42 +
  43 +
  44 +
  45 +
  46 +
  47 +​
  48 +## SDK配置步骤
  49 +
  50 +* #### 将下载下来的sdk压缩包,解压后,拷贝sdk文件夹到微信开发者工具项目中。
  51 +
  52 + 示例:将sdk放入到小游戏开发者工具项目的src文件夹中
  53 +
  54 + ![引入目录](https://dep.miso-lab.com/sdkword/sdk_002.png "🔍点击查看大图")
  55 +
  56 +
  57 +
  58 +
  59 +
  60 +* #### 在game.js中将sdk.js文件使用require导入。
  61 +
  62 + 示例:将sdk放入到小游戏开发者工具项目的src文件夹中
  63 + ![引入目录](https://dep.miso-lab.com/sdkword/sdk_003.png "🔍点击查看大图")
  64 +
  65 +
  66 +
  67 +
  68 +* #### 根据运营提供的信息修改sdk文件夹下的**config**.js文件(可横向拖动查看查看更多====>)<div id="config"></div>
  69 +
  70 + ```javascript
  71 + export default {
  72 + IsDebug: false, // 是否debug模式,debug模式会打印log,可使用stat模块setDebug api进行修改
  73 + Env: 100, // 100表示正式环境,110表示测试环境,推荐测试联调阶段使用110,提审前切记改成100!!!
  74 + AdCacheDuration: 30, // 广告列表缓存持续时间间隔
  75 + IsUseShareModule: true, // 是否使用分享模块
  76 + IsOnlineAutoUse: true, // 是否开启sdk自动请求online模块(在线参数配置)的updateOnlineConfig,拉取在线参数配置
  77 + IsOnlineDebug: true, // 是否开启online模块(配置参数模块)debug模式
  78 + ShareRightKey: 'forward', // 右上角分享的shareKey,shareKey请阅读share模块说明,默认为forward,为空字符串则不使用右上角分享
  79 +
  80 + ShareData: { // 必填,默认分享数据(拉取不到分享配置后使用,默认分享,SDK自动分配share_id为99999)
  81 + share_desc: 'xxx',
  82 + share_wxad_id: '', // 可选,视频广告uid,配置此参数,拉取不到对应的shareKey,推送看视频,不配置或者配置的uid无效则推送分享
  83 + share_icon: 'xxx'
  84 + },
  85 + GameId: 0, // 必填,游戏ID,运营提供;
  86 + ChannelId: 0, // 必填,游戏渠道ID,运营提供;
  87 + Secret: '***请配置你的Secret***', // 必填,游戏的secret key
  88 + MidasPay: { // 米大师虚拟支付配置
  89 + OfferId: "0", // 在米大师申请的应用id
  90 + ZoneId: "1", // 分区ID,默认:1
  91 + Mode: "game", // 支付的类型,不同的支付类型有各自额外要传的附加参数,默认:game
  92 + CurrencyType: "CNY", // 币种,默认:CNY
  93 + Platform: '' // 申请接入时的平台,platform与应用id有关。默认:android(ios暂时没有开放,这里需要配置Platform,开放后,删掉此配置,sdk已经判断平台)
  94 + }
  95 +};
  96 + ```
  97 +
  98 +
  99 + 参数详解:
  100 +
  101 +<div id="config_env"></div>
  102 +1. **Env ( number ):**SDK执行环境,建议开发者测试联调阶段设为110。
  103 +
  104 + > 提审阶段一定要设为100
  105 +
  106 + > 测试环境各种配置管理、数据分析查看,请[前往测试服后台](http://pre-data.d3games.com/#/login)
  107 +
  108 + > 正式环境各种配置管理、数据分析查看,请[前往正式服后台](https://data.d3games.com/#/login)
  109 +
  110 + 100:正式环境,请求api域名地址为:https://dataapi.d3games.com
  111 +
  112 + 110:测试环境,请求api域名地址为:https://pre-dataapi.d3games.com
  113 +
  114 +2. **IsDebug ( boolean ):**是否debug模式,debug模式会打印sdk中的console.log/error/warn log。
  115 +
  116 + false:关闭log打印,提审前建议设置为false,不打印log信息
  117 +
  118 + true:开启log打印,如遇到联调问题,可设置为true,发体验版本或者查看log发给相关人员进行查看解决问题
  119 +
  120 + 也可在代码中动态设置:PCSDK.stat.setDebug( boolean )
  121 +
  122 +3. **AdCacheDuration(number):**表示获取广告位列表的缓存时间,例如:配置30,SDK中拉取交叉推广位列表后缓存30秒。此参数对接入交叉推广位模块后有效,没有接入可不修改,使用默认值。
  123 +
  124 +4. **IsUseShareModule( boolean ):**是否启用sdk分享/视频功能(sdk把分享和视频封装为share模块,登录后台->【游戏数据】->【配置相关】->【分享/视频配置】后可对分享视频进行动态配置)
  125 +
  126 + false:SDK启动时不拉取分享/视频列表,不接入分享/视频模块功能
  127 +
  128 + true:SDK启动时拉取后台配置的分享/视频列表,运营或者开发者登录后台后,配置分享/视频,开发者请详看分享视频模块接入。
  129 +
  130 +5. **IsOnlineAutoUse( boolean ):**是否启用在线配置参数模块功能
  131 +
  132 + false:两种处理 1)不启用在线配置参数模块功能; 2)启用在线配置参数功能,但是SDK启动时不自动调用updateOnlineConfig拉取后台配置参数列表,开发者在代码主动调用拉取在线配置参数:PCSDK.online.updateOnlineConfig();
  133 +
  134 + 示例:开发者代码中主动拉取在线配置参数。
  135 +
  136 + ```javascript
  137 + // 后台 ->【游戏数据】->【配置参数】栏配置了:是否显示微信插屏广告、交叉推广位是否展示动态开关
  138 + PCSDK.online.updateOnlineConfig().then(() => {
  139 + // 获取是否后台动态配置开启插屏广告,1为开启,0为关闭
  140 + let isInterstitialAd = PCSDK.online.getParamsInt('interstitial_ad_open', 0) === 1;
  141 + // isInterstitialAd && '显示插屏广告';
  142 + // 获取动态多个广告位开启的配置
  143 + let pcGameOpenMap = PCSDK.online.getParamsObj('pc_games_open', { "Drawer": 0, "GuessLike": 0, "Cross": 0 });
  144 + // pcGameOpenMap.Drawer === 1 && '显示抽屉推广位';
  145 + // pcGameOpenMap.GuessLike === 1 && '显示猜你喜欢推广位';
  146 + // pcGameOpenMap.Cross === 1 && '显示交叉推广位';
  147 + });
  148 + ```
  149 + true:sdk启动时自动调用updateOnlineConfig拉取后台在线配置参数列表,开发者可通过
  150 +
  151 + PCSDK.online.getParamsObj、PCSDK.online.getParamsInt、PCSDK.online.getParamsString、PCSDK.online.getParams api传递后台配置参数key获取在线配置参数。
  152 +
  153 + 示例:IsOnlineAutoUse: true,开发者可使用下面api获取在线配置参数配置的值
  154 +
  155 + ```javascript
  156 + let isInterstitialAd = PCSDK.online.getParamsInt('interstitial_ad_open', 0) === 1;
  157 + let pcGameOpenMap = PCSDK.online.getParamsObj('pc_games_open', { "Drawer": 0, "GuessLike": 0, "Cross": 0 });
  158 + ```
  159 +
  160 +6. **IsOnlineDebug( boolean ):**是否启用online模块(在线配置参数)debug模式,建议设置为true。
  161 +
  162 + false:不启动debug模式,开发者主动调用updateOnlineConfig或者SDK启动时调用updateOnlineConfig都会把在线配置参数列表设置10分钟缓存,不用每次都去服务器请求,参照了友盟在线参数功能的设计
  163 +
  164 + true: 开启debug模式,只要是请求updateOnlineConfig api都会立即发起请求,而不是去检测读取缓存
  165 +
  166 +7. **ShareRightKey( string ):**右上角分享的shareKey,shareKey请阅读分享视频模块,默认为forward,为空字符串则不使用右上角分享,此配置在配置【IsUseShareModule: true】情况下生效。
  167 +
  168 + 示例:
  169 +
  170 + 在后台的【分享/视频配置】栏目配置了一条分享key为:forward的分享配置
  171 +
  172 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_004.png "🔍点击查看大图")
  173 +
  174 +8. **ShareData( object ):**此配置在【IsUseShareModule: true】起效,开发者如果接入了分享视频模块,>>> 请务必配置一条 <<<。
  175 +
  176 + > IsUseShareModule设置true sdk启动拉取分享视频配置列表,如果分享视频列表拉取请求失败,或此shareKey不在分享视频配置列表中(登录后台 ->【游戏数据】->【分享/视频配置】栏没有配置分享key)就会使用此条设置的数据。
  177 +
  178 + 示例:可从后台【游戏数据】->【分享/视频配置】中选取一条:复制文案,点击分享素材icon -> 查看大图 -> 右键查看分享图片的html源码复制src图片地址:
  179 +
  180 + ```json
  181 + {
  182 + // 分享文案内容
  183 + share_desc: ' 半夜传来啪啪啪!竟是隔壁老王偷偷打气球',
  184 + // 可选,视频广告uid,配置此参数,拉取不到对应的shareKey,推送看视频,不配置或者配置的uid无效则推送分享
  185 + share_wxad_id: 'adunit-6958dcfc3f0bed31',
  186 + // 分享图
  187 + share_icon: 'https://dep.miso-lab.com/data_analysis/games/res/5D57D4A3Yx.png'
  188 + }
  189 + ```
  190 +
  191 + 操作步骤:
  192 +
  193 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_005.png "🔍点击查看大图")
  194 +
  195 +9. **GameId:必填,游戏id,请联系运营人员提供**
  196 +
  197 +10. **ChannelId:必填,游戏渠道id,请联系运营人员提供**
  198 +
  199 +11. **Secret:必填,游戏 Secret Key,请联系运营人员提供**
  200 +
  201 +12. **MidasPay( object ):**米大水虚拟支付配置,没有接入微信的米大师支付,请注意下面规则
  202 +
  203 + OfferId:在米大师申请的应用id,没有接入米大师,默认为"0"
  204 +
  205 + ZoneId:分区ID,默认:"1"
  206 +
  207 + Mode:支付的类型,不同的支付类型有各自额外要传的附加参数,默认:"game"
  208 +
  209 + CurrencyType:币种,默认:"CNY"
  210 +
  211 + Platform:申请接入时的平台,platform与应用id有关。
  212 +
  213 + 1)接入了米大师,填写"android"(ios暂时没有开放)
  214 +
  215 + 2)未接入米大师,使用其他支付,如果只支持android,则填写"android";
  216 +
  217 + 3)未接入米大师,使用其他支付,如果只支持ios,则填写"ios";
  218 +
  219 + 4)未接入米大师,使用其他支付,如果支持ios和android,则填写为"",sdk会根据手机识别android还是ios
  220 +
  221 +
  222 +
  223 +* #### 如果项目使用Typescript语言开发,请引入解压文件夹下的sdk.d.ts文件到项目中。
  224 +
  225 + 示例:项目采用的是Laya Typescript版本进行开发,将该文件复制到libs目录下面
  226 +
  227 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_007.png "🔍点击查看大图")
  228 +
  229 +* #### 到此,SDK的准备工作已经配置完毕,运行起来:
  230 +
  231 + 运行中碰到问题,[[请查看FAQ](faq.md)],或者微信群联系相关人员。
  232 +
  233 + 正常运行,阅读SDK手册,开始[[SDK模块功能](modules.md)]接入。
0 234 \ No newline at end of file
... ...
inner/intro.md 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +# 噗嗤SDK
  2 +PCSDK(噗嗤SDK)是一款封装了微信小游戏、QQ小游戏平台常用api接口和用户行为数据上报的一款产品。
  3 +PCSDK上报小游戏用户所触发的各种行为数据到噗嗤管理后台,后台对数据统计分析后以多样化的方式展现数据。
  4 +
  5 +**PCSDK提供的模块功能:**
  6 +
  7 +- [统计模块](stat.md)
  8 +- [分享视频模块](share.md)
  9 +- [配置参数模块️](online.md)
  10 +- [多平台接口模块](platform.md)
  11 +- [数据模块](data.md)
  12 +- [事件模块](event.md)
  13 +
  14 +
  15 +
  16 +# 噗嗤管理后台
  17 +噗嗤管理后台对sdk中上报的各项数据进行分析;管理sdk中所需要的配置信息:分享/视频配置、配置参数(在线参数配置)、交叉推广位配置、用户自定义事件配置。
  18 +
  19 +方便开发者联调测试阶段不影响上线游戏运营相关数据或者配置信息,config.js的Env配置提供测试和正式环境切换。
  20 +
  21 +> 测试环境各种配置管理、数据分析查看,请[前往测试服后台](http://pre-data.d3games.com/#/login)
  22 +
  23 +> 正式环境各种配置管理、数据分析查看,请[前往正式服后台](https://data.d3games.com/#/login)
  24 +
  25 +噗嗤管理后台地址:
  26 +
  27 +- 测试服后台,地址:http://pre-data.d3games.com/#/login
  28 +
  29 +- 正式服后台,地址:https://data.d3games.com/#/login
  30 +
  31 +**友情提示:**
  32 +
  33 +- **之后文档中'后台'指的是[噗嗤管理后台],而不是微信小程序/小游戏后台。**
  34 +- **后台登录账号获取:需提供手机信息给我方运营,运营创建后台登录账号、密码后提供反馈。**
  35 +- **登录后台即可使用后台提供的各项服务**
  36 +
  37 +
  38 +
  39 +**后台概览:**
  40 +## ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_006.png "🔍点击查看大图")
  41 +
  42 +
  43 +
  44 +**后台提供数据分析功能(不能跳转请联系管理员添加权限):**
  45 +
  46 +- [注册/活跃用户,在线时长实时数据分析](https://data.d3games.com/index.html#/view_chart)
  47 +- [分享数据分析](https://data.d3games.com/index.html#/share_exact)
  48 +- [用户事件行为分析](https://data.d3games.com/index.html#/dot_list)
  49 +- [渠道数据统计分析](https//data.d3games.com/index.html#/channel_stat_list)
  50 +
  51 +
  52 +
  53 +**后台提供配置相关功能(不能跳转请联系管理员添加权限):**
  54 +
  55 +- [分享/视频配置](http://pre-data.d3games.com/index.html#/share_list)
  56 +- [配置参数](http://pre-data.d3games.com/index.html#/config_list)
  57 +
  58 +
  59 +# 更多:
  60 +- 快速接入,请详读 [安装步骤](install.md)
  61 +
  62 +
  63 +
  64 +- 遇到问题可以查看 [FAQ](faq.md)
0 65 \ No newline at end of file
... ...
inner/stat_ads.md 0 → 100644
... ... @@ -0,0 +1,543 @@
  1 +# 交叉推广位
  2 +
  3 +------
  4 +
  5 +#### **简介**
  6 +
  7 +交叉推广位是在游戏中展示其他游戏,用户点击某个游戏跳转进入游戏,达到共享用户的目的。
  8 +
  9 +噗嗤游戏提供了3种类型的交叉推广位,后台可对交叉推广位进行配置管理,对交叉推广位各项指标分析阅览。
  10 +
  11 +**3种广告类型:交叉悬浮广告框、交叉抽屉式广告位、交叉猜你喜欢广告位**
  12 +
  13 +1. 交叉悬浮广告框,放置到首页、结算页
  14 +
  15 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_013.png "🔍点击查看大图")
  16 +
  17 +2. 交叉抽屉式广告位,放置到首页、结算页
  18 +
  19 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_014.png "🔍点击查看大图")
  20 +
  21 +3. 交叉猜你喜欢广告位,推荐放置到结算页
  22 +
  23 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_015.png "🔍点击查看大图")
  24 +
  25 +
  26 +
  27 +
  28 +
  29 +#### **后台使用**
  30 +
  31 +完成接入交叉推广位后,登录后台->头部tab切换到【游戏数据】->【流量分析】->【广告导出】即可查看推广位的各项数据信息(需要后台管理人员添加权限):
  32 +
  33 +![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_012.png "🔍点击查看大图")
  34 +
  35 +
  36 +
  37 +#### **接入必读**
  38 +
  39 +- 由于微信对每个游戏可跳转其他游戏有10个限制,可跳转的其它游戏需要在小游戏根目录下的全局配置文件game.json中进行添加配置:navigateToMiniProgramAppIdList,该参数定义请详读[小程序全局配置](https://developers.weixin.qq.com/minigame/dev/reference/configuration/app.html)。
  40 +
  41 +- 噗嗤游戏为了方便开发者接入调试交叉推广位,【后台测试服】已经配置测试使用的不同类型推广位,并提供以下10个测试服广告位appid:
  42 +
  43 + 水果爆破 :"wx26822126b4d99eda",
  44 +
  45 + 球球涂涂涂:"wxac0750884d5bed0c",
  46 +
  47 + 狂野漂移3D:"wx019a09df638e6683",
  48 +
  49 + 星星爱消消:"wx9ff47d13a88e5511",
  50 +
  51 + 土耳其方块消消乐:"wx89efb2282d65a2d0",
  52 +
  53 + 成语小才子:"wxd4d478c7d331ce80",
  54 +
  55 + 球球蹦蹦蹦:"wxabee9afe62d0b114",
  56 +
  57 + 俄罗斯方块连连消:"wx4cd087f19f4cb7c3",
  58 +
  59 + 球球爆爆爆:"wxae33d68413f40641",
  60 +
  61 + 疯狂水果一刀切:"wxdf26a04c53d6f1e9"
  62 +
  63 + ```javascript
  64 + "navigateToMiniProgramAppIdList": [
  65 + "wx26822126b4d99eda",
  66 + "wxac0750884d5bed0c",
  67 + "wx019a09df638e6683",
  68 + "wx9ff47d13a88e5511",
  69 + "wx89efb2282d65a2d0",
  70 + "wxd4d478c7d331ce80",
  71 + "wxabee9afe62d0b114",
  72 + "wx4cd087f19f4cb7c3",
  73 + "wxae33d68413f40641",
  74 + "wxdf26a04c53d6f1e9"
  75 + ]
  76 + ```
  77 +
  78 +
  79 +
  80 +- 完成下面的操作步骤,即可拉取交叉推广位:
  81 +
  82 + 1、开发者复制上面的10个其他游戏的appid,配置到game.json的navigateToMiniProgramAppIdList参数:
  83 +
  84 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_010.png "🔍点击查看大图")
  85 +
  86 + 2、修改[config.js的Env配置](install.md#config_env)为110,开发者测试联调阶段,走测试环境
  87 +
  88 + > 提示:广告位接入完毕测试通过,提交审核前,修改Env为100。
  89 +
  90 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_011.png "🔍点击查看大图")
  91 +
  92 +
  93 +
  94 +#### **接入API:**
  95 +
  96 +| **名称** | **功能说明** |
  97 +| --------------------------- | ------------------------------------------------------------ |
  98 +| PCSDK.stat.bannerList | 根据类型获取对应类型交叉广告列表,目前SDK支持3种类型:40(交叉悬浮广告框)、70(交叉抽屉式广告位)、50(交叉猜你喜欢广告位) |
  99 +| PCSDK.stat.bannerNavigateTo | 交叉推广位点击跳转到对应appid的游戏,该接口封装了小游戏的跳转功能(navigateToMiniProgram) |
  100 +| PCSDK.stat.addExposure | 交叉推广位一条或者多条广告展示,添加曝光数据,SDK在onHide时候上报数据到后台 |
  101 +
  102 +
  103 +
  104 +
  105 +
  106 +
  107 +
  108 +1. ##### **bannerList**
  109 +
  110 + ```javascript
  111 + PCSDK.stat.loadingFinish(banner_type): Promise<any>
  112 + ```
  113 +
  114 + 定义:根据类型获取对应类型交叉广告列表,目前SDK支持3种类型
  115 +
  116 + 参数:
  117 +
  118 + ```
  119 + banner_type: number 必填 目前支持三种广告类型:40、50、70
  120 + ```
  121 +
  122 + 返回值:Promise<any>
  123 +
  124 + 返回的是Promise类型,Promise resolve成功回调数据结构为:
  125 +
  126 + ```json
  127 + {
  128 + "banner_list": [
  129 + {
  130 + "banner_id": "3568",
  131 + "banner_name": "土耳其方块",
  132 + "banner_type": "40",
  133 + "banner_location": "100",
  134 + "banner_ad_id": "50",
  135 + "banner_launch_appid": "",
  136 + "banner_launch_path": "",
  137 + "banner_appid": "wx89efb2282d65a2d0",
  138 + "banner_path": "?channel_id=20361",
  139 + "banner_icon": "https://dep.miso-lab.com/data_analysis/games/res/5D42CB97RK.png",
  140 + "banner_user_num": "0",
  141 + "banner_exposure_num": "0",
  142 + "banner_sort": "1",
  143 + "banner_game_id": "1000053",
  144 + "banner_qqgame": "0",
  145 + "banner_qqgame_id": "0",
  146 + "banner_game_type": 0,
  147 + "banner_bone": "0",
  148 + "banner_system": "0",
  149 + "banner_online": "1",
  150 + "banner_reddot": "0",
  151 + "banner_gender": "0",
  152 + "banner_resident": "0",
  153 + "banner_qrcode": "0",
  154 + "banner_qrcode_img": "",
  155 + "banner_bone_info": false,
  156 + "banner_img_info": {
  157 + "banner_icon": "https://dep.miso-lab.com/data_analysis/games/res/5D42CB97RK.png"
  158 + }
  159 + },
  160 + {
  161 + "banner_id": "3571",
  162 + "banner_name": "水果一刀切",
  163 + "banner_type": "40",
  164 + "banner_location": "100",
  165 + "banner_ad_id": "99",
  166 + "banner_launch_appid": "",
  167 + "banner_launch_path": "",
  168 + "banner_appid": "wxdf26a04c53d6f1e9",
  169 + "banner_path": "?channel_id=20361",
  170 + "banner_icon": "https://dep.miso-lab.com/data_analysis/games/res/5D42CBACTt.png",
  171 + "banner_user_num": "0",
  172 + "banner_exposure_num": "0",
  173 + "banner_sort": "1",
  174 + "banner_game_id": "1000053",
  175 + "banner_qqgame": "0",
  176 + "banner_qqgame_id": "0",
  177 + "banner_game_type": 0,
  178 + "banner_bone": "0",
  179 + "banner_system": "0",
  180 + "banner_online": "1",
  181 + "banner_reddot": "0",
  182 + "banner_gender": "0",
  183 + "banner_resident": "0",
  184 + "banner_qrcode": "0",
  185 + "banner_qrcode_img": "",
  186 + "banner_bone_info": false,
  187 + "banner_img_info": {
  188 + "banner_icon": "https://dep.miso-lab.com/data_analysis/games/res/5D42CBACTt.png"
  189 + }
  190 + }
  191 + ]
  192 + }
  193 +
  194 + ```
  195 +
  196 + > **返回的数据banner_list列表解析为 Array< BannerData >,BannerData是banner_list每一项数据实体,下面的bannerNavigateTo与addExposure接口api参数banner_data属于此BannerData结构**。
  197 +
  198 + 示例:
  199 +
  200 + ```javascript
  201 + /**
  202 + * 演示交叉推广位使用示例
  203 + */
  204 + export default class TestBannerSample {
  205 + constructor() {
  206 + // 示例:加载交叉悬浮广告框
  207 + this.loadBannerList(BannerType.TYPE_CROSS)
  208 + .then((dataList: Array<BannerData>) => {
  209 + // 渲染广告位数据
  210 + this.renderAdCrossList(dataList);
  211 + }).catch(err => {
  212 + // bannerList不存在获取请求拉取失败
  213 + });
  214 + }
  215 +
  216 + /**
  217 + * 渲染广告位列表
  218 + * @param dataList 广告位列表
  219 + */
  220 + private renderAdCrossList(dataList: Array<BannerData>) {
  221 + // ...
  222 + }
  223 +
  224 + /**
  225 + * 根据类型获取交叉推广位列表
  226 + * @param banner_type 广告位类型
  227 + */
  228 + private loadBannerList(banner_type: BannerType): Promise<any> {
  229 + return new Promise((resolve, reject) => {
  230 + PCSDK.stat.bannerList(banner_type)
  231 + .then(data => {
  232 + let bannerList: Array<BannerData> = data.banner_list || [];
  233 + if (bannerList.length) {
  234 + // 处理bannerList数据列表
  235 + resolve(bannerList);
  236 + } else {
  237 + // 处理数据为空情况
  238 + reject(null);
  239 + }
  240 + }).catch(err => {
  241 + // 请求接口报错情况
  242 + reject(err);
  243 + });
  244 + });
  245 + }
  246 + }
  247 +
  248 + // 广告位类型的枚举
  249 + enum BannerType {
  250 + TYPE_CROSS = 40, // 交叉悬浮广告框
  251 + TYPE_LIKE = 50, // 交叉猜你喜欢广告位
  252 + TYPE_LIST = 70, // 交叉抽屉广告位
  253 + }
  254 +
  255 + /*
  256 + * banner数据实体结构
  257 + */
  258 + class BannerData {
  259 + public banner_id: string;
  260 + public banner_appid: string;
  261 + public banner_diamond: number;
  262 + public banner_type: string;
  263 + public banner_icon: string;
  264 + public banner_name: string;
  265 + public banner_resident: string; // 是否常驻
  266 + }
  267 + ```
  268 +
  269 +2. ##### **bannerNavigateTo**
  270 +
  271 + ```javascript
  272 + PCSDK.stat.bannerNavigateTo( location:number, banner_data: any, opts?: { extraData?: string; envVersion?: string }): Promise<any>
  273 + ```
  274 +
  275 + 定义:交叉推广位点击游戏跳转到对应appid的游戏,该接口封装了小游戏的跳转功能(navigateToMiniProgram), 第三个参数配置可参考[wx.navigateToMiniProgram extraData、envVersion配置信息](https://developers.weixin.qq.com/minigame/dev/api/open-api/miniprogram-navigate/wx.navigateToMiniProgram.html)
  276 +
  277 + 参数:
  278 +
  279 + ```javascript
  280 + location: number 必传,统一传递为:100
  281 +
  282 + banner_data:any 必传,点击跳转项对应数据,该数据的结构为BannerData,为bannerList获取的Array<BannerData>的单元实体项
  283 +
  284 + opts: object 选传,调试阶段可参照[wx.navigateToMiniProgram(Object object) extraData配置信息]进行裴旭
  285 + {
  286 + extraData: string 选传, 需要传递给目标小程序的数据,目标小程序可在 App.onLaunch,App.onShow 中获取到这份数据
  287 + envVersion: string 选传,要打开的小程序版本,合法值:develop、trial、release
  288 + }
  289 + ```
  290 +
  291 + 示例:获取猜你喜欢推广位,以列表的形式显示在界面上,点击任意一项游戏跳转其他游戏
  292 +
  293 + ```javascript
  294 + // 发起登录请求,得到登录数据信息,调用setLogind设置SDK用户信息
  295 + /**
  296 + * 演示交叉推广位使用示例
  297 + */
  298 + export default class TestBannerSample extends ui.shop.ShopPopwinUI {
  299 + private list: Laya.List;
  300 +
  301 + constructor() {
  302 + super();
  303 +
  304 + // 创建List ui
  305 + this.list = new Laya.List();
  306 + this.list.itemRender = AdItem;
  307 + this.list.vScrollBarSkin = "";
  308 + this.list.scrollBar.elasticBackTime = 500;
  309 + this.list.scrollBar.elasticDistance = 350;
  310 + this.list.x = 0;
  311 + this.list.y = 0;
  312 + this.list.spaceY = 10;
  313 + this.list.height = 1000;
  314 + this.list.renderHandler = new Laya.Handler(this, this.renderAdItem);
  315 + this.boxList.addChild(this.list);
  316 +
  317 + // 示例:加载猜你喜欢广告位数据列表
  318 + this.loadBannerList(BannerType.TYPE_LIKE)
  319 + .then((dataList: Array<BannerData>) => {
  320 + this.renderAdLikeList(dataList);
  321 + }).catch(err => {
  322 + // bannerList不存在获取请求拉取失败
  323 + });
  324 + }
  325 +
  326 + /**
  327 + * 渲染单个广告位ui
  328 + * @param cell
  329 + */
  330 + private renderAdItem(cell: AdItem) {
  331 + cell.init();
  332 + }
  333 +
  334 + /**
  335 + * 渲染广告位列表
  336 + * @param dataList 广告位列表
  337 + */
  338 + private renderAdLikeList(dataList: Array<BannerData>) {
  339 + this.list.array = dataList;
  340 + }
  341 +
  342 + /**
  343 + * 根据类型获取交叉推广位列表
  344 + * @param banner_type 广告位类型
  345 + */
  346 + private loadBannerList(banner_type: BannerType): Promise<any> {
  347 + return new Promise((resolve, reject) => {
  348 + PCSDK.stat.bannerList(banner_type)
  349 + .then(data => {
  350 + let bannerList: Array<BannerData> = data.banner_list || [];
  351 + if (bannerList.length) {
  352 + // 处理bannerList数据列表
  353 + resolve(bannerList);
  354 + } else {
  355 + // 处理数据为空情况
  356 + reject(null);
  357 + }
  358 + }).catch(err => {
  359 + // 请求接口报错情况
  360 + reject(err);
  361 + });
  362 + });
  363 + }
  364 + }
  365 +
  366 + class AdItem extends ui.ads.GameIconUI {
  367 + constructor() {
  368 + super();
  369 + this.on(Laya.Event.CLICK, this, this.onJumpGame);
  370 + }
  371 +
  372 + init() {
  373 + let { banner_icon, banner_name, banner_reddot } = this.dataSource;
  374 + this.iconTex.skin = banner_icon;
  375 + this.nametxt.text = banner_name;
  376 + this.hot.visible = banner_reddot + '' === '1';
  377 + }
  378 +
  379 + private onJumpGame(ev: Laya.Event) {
  380 + PCSDK.stat.bannerNavigateTo(100, { ...this.dataSource }).catch(err => {
  381 + // 跳转游戏微信弹出二次确认框,点击取消执行此处
  382 + });
  383 + }
  384 + }
  385 +
  386 + // 广告位类型的枚举
  387 + enum BannerType {
  388 + TYPE_CROSS = 40, // 交叉悬浮广告框
  389 + TYPE_LIKE = 50, // 交叉猜你喜欢广告位
  390 + TYPE_LIST = 70, // 交叉抽屉广告位
  391 + }
  392 +
  393 + /*
  394 + * banner数据实体结构
  395 + */
  396 + class BannerData {
  397 + public banner_id: string;
  398 + public banner_appid: string;
  399 + public banner_diamond: number;
  400 + public banner_type: string;
  401 + public banner_icon: string;
  402 + public banner_name: string;
  403 + public banner_resident: string; // 是否常驻
  404 + }
  405 + ```
  406 +
  407 +
  408 +3. ##### **addExposure**
  409 +
  410 + ```javascript
  411 + PCSDK.stat.addExposure( location: number, banner_data: Array< any > | any ): void
  412 + ```
  413 +
  414 + 定义:对一个或者多个展示的推广位添加曝光,SDK在onHide时候上报曝光数据到后台,后台进行统计查阅
  415 +
  416 + 参数:
  417 +
  418 + ```javascript
  419 + location: number 必传,统一传递为:100
  420 +
  421 + banner_data:any 必传,添加展推广位曝光数据,可添加一个或者多个曝光数据,banner_data参数数据结构为上面bannerList api返回的列表数据的项BannerData实体结构:Array<BannerData> | BannerData
  422 +
  423 + ```
  424 +
  425 + > 提示:
  426 + >
  427 + > 展示猜你喜欢/抽屉推广位:获取到9个推广位数据,展示了其中5个,调用曝光接口传入推广位数据为展示的5个,剩余的4个需在其展示的时候再调用曝光api接口传入。
  428 + >
  429 + > 展示交叉悬浮框推广位:展示一个,将此推广位传入曝光接口,点击展示下一个,则把这个最新的数据传入曝光api
  430 +
  431 + 示例:根据交叉悬浮框类型调用PCSDK.stat.bannnerList接口获取交叉悬浮框推广位列表,显示第一个,每隔4秒切换到下一个,点击一个切换下一个展示。此示例没有使用定时器方式,采用的是监听动画帧实现。
  432 + ```javascript
  433 + /**
  434 + * 演示交叉推广位使用示例
  435 + */
  436 +export default class TestBannerSample extends ui.ads.ADbtnUI {
  437 + private data;
  438 + private count: number;
  439 + private adList: Array<BannerData>;
  440 +
  441 + constructor() {
  442 + super();
  443 + this.count = 0;
  444 + this.adList = [];
  445 + this.on(Laya.Event.CLICK, this, this.onJumpGame);
  446 + }
  447 +
  448 + // 初始化显示交叉悬浮框广告位
  449 + init(isFirst: boolean) {
  450 + isFirst && (this.count = 0);
  451 + this.anim_entice.play(0, true);
  452 + this.anim_entice.addLabel('refresh', 38);
  453 + // 交叉悬浮框动画执行到第38帧,自动更新下一个,开发者可根据实际使用定时器实现切换下一个
  454 + this.anim_entice.on(Laya.Event.LABEL, this, this.handleAutoRrefresh);
  455 + // 第一次
  456 + this.refresh();
  457 + }
  458 +
  459 + // 清理交叉悬浮框广告位
  460 + clear() {
  461 + this.anim_entice.gotoAndStop(0);
  462 + this.anim_entice.removeLabel('refresh');
  463 + this.anim_entice.off(Laya.Event.LABEL, this, this.handleAutoRrefresh);
  464 + }
  465 +
  466 + private refresh() {
  467 + let list = this.adList;
  468 + if (!list || !list.length) {
  469 + this.loadBannerList(BannerType.TYPE_CROSS).then(() => this.refresh());
  470 + return;
  471 + }
  472 + let data = list.pop();
  473 + this.renderAdui(data);
  474 + this.data = data;
  475 + // 添加曝光数据
  476 + PCSDK.stat.addExposure(100, data);
  477 + // 也可以采用传递多个方式
  478 + // PCSDK.stat.addExposure(100, [{...data}]);
  479 + }
  480 +
  481 + private renderAdui(data) {
  482 + let { banner_bone_info, banner_img_info } = data;
  483 + if (banner_bone_info) {
  484 + this.imgIcon.visible = false;
  485 + } else {
  486 + this.imgIcon.visible = true;
  487 + this.imgIcon.skin = banner_img_info.banner_icon;
  488 + }
  489 + this.imgHot.visible = data.banner_reddot + '' === '1';
  490 + }
  491 +
  492 + private onJumpGame(ev: Laya.Event) {
  493 + this.anim_entice.gotoAndStop(39);
  494 + this.anim_entice.play(39, true);
  495 + // 切换下一个
  496 + this.refresh();
  497 + PCSDK.stat.bannerNavigateTo(100, { ...this.data }).catch(err => {
  498 + // 跳转游戏微信弹出二次确认框,点击取消执行此处
  499 + });
  500 + }
  501 +
  502 + /**
  503 + * 处理自动切换下一个
  504 + * @param name
  505 + */
  506 + private handleAutoRrefresh(name) {
  507 + if (name === 'refresh' && this.count !== 0) {
  508 + this.refresh();
  509 + }
  510 + this.count++;
  511 + }
  512 +
  513 + /**
  514 + * 根据类型获取交叉推广位列表
  515 + * @param banner_type 广告位类型
  516 + */
  517 + private loadBannerList(banner_type: BannerType): Promise<any> {
  518 + return new Promise((resolve, reject) => {
  519 + PCSDK.stat.bannerList(banner_type)
  520 + .then(data => {
  521 + let bannerList: Array<BannerData> = data.banner_list || [];
  522 + if (bannerList.length) {
  523 + // 处理bannerList数据列表
  524 + resolve(bannerList);
  525 + } else {
  526 + // 处理数据为空情况
  527 + reject(null);
  528 + }
  529 + }).catch(err => {
  530 + // 请求接口报错情况
  531 + reject(err);
  532 + });
  533 + });
  534 + }
  535 + }
  536 +
  537 + // 广告位类型的枚举
  538 + enum BannerType {
  539 + TYPE_CROSS = 40, // 交叉悬浮广告框
  540 + TYPE_LIKE = 50, // 交叉猜你喜欢广告位
  541 + TYPE_LIST = 70, // 交叉抽屉广告位
  542 + }
  543 + ```
0 544 \ No newline at end of file
... ...
install.md
... ... @@ -28,10 +28,6 @@
28 28 ## 配置合法域名
29 29  
30 30 * ##### 管理员或开发者身份在微信小程序后台→设置→开发者设置中添加 request、download合法域名
31   - 测试环境 request 合法域名:
32   -
33   - https://pre-dataapi.d3games.com (统计平台测试服域名)
34   -
35 31 正式环境 request 合法域名:
36 32  
37 33 https://dataapi.d3games.com (统计平台正式服域名)
... ... @@ -39,7 +35,7 @@
39 35 cdn资源请求合法域名:
40 36  
41 37 https://dep.miso-lab.com (>>>request、download均要添加<<<)
42   -
  38 +
43 39  
44 40  
45 41  
... ... @@ -70,7 +66,6 @@
70 66 ```javascript
71 67 export default {
72 68 IsDebug: false, // 是否debug模式,debug模式会打印log,可使用stat模块setDebug api进行修改
73   - Env: 100, // 100表示正式环境,110表示测试环境,推荐测试联调阶段使用110,提审前切记改成100!!!
74 69 AdCacheDuration: 30, // 广告列表缓存持续时间间隔
75 70 IsUseShareModule: true, // 是否使用分享模块
76 71 IsOnlineAutoUse: true, // 是否开启sdk自动请求online模块(在线参数配置)的updateOnlineConfig,拉取在线参数配置
... ... @@ -92,25 +87,13 @@
92 87 CurrencyType: "CNY", // 币种,默认:CNY
93 88 Platform: '' // 申请接入时的平台,platform与应用id有关。默认:android(ios暂时没有开放,这里需要配置Platform,开放后,删掉此配置,sdk已经判断平台)
94 89 }
95   -};
96   - ```
  90 + };
  91 +```
97 92  
98   -
99   - 参数详解:
100   -
101   -<div id="config_env"></div>
102   -1. **Env ( number ):**SDK执行环境,建议开发者测试联调阶段设为110。
103 93  
104   - > 提审阶段一定要设为100
105   -
106   - > 测试环境各种配置管理、数据分析查看,请[前往测试服后台](http://pre-data.d3games.com/#/login)
  94 +参数详解:
107 95  
108   - > 正式环境各种配置管理、数据分析查看,请[前往正式服后台](https://data.d3games.com/#/login)
109   -
110   - 100:正式环境,请求api域名地址为:https://dataapi.d3games.com
111   -
112   - 110:测试环境,请求api域名地址为:https://pre-dataapi.d3games.com
113   -
  96 +<div id="config_env"></div>
114 97 2. **IsDebug ( boolean ):**是否debug模式,debug模式会打印sdk中的console.log/error/warn log。
115 98  
116 99 false:关闭log打印,提审前建议设置为false,不打印log信息
... ...
intro.md
... ... @@ -14,19 +14,11 @@ PCSDK上报小游戏用户所触发的各种行为数据到噗嗤管理后台,
14 14  
15 15  
16 16 # 噗嗤管理后台
17   -噗嗤管理后台对sdk中上报的各项数据进行分析;管理sdk中所需要的配置信息:分享/视频配置、配置参数(在线参数配置)、交叉推广位配置、用户自定义事件配置。
18   -
19   -方便开发者联调测试阶段不影响上线游戏运营相关数据或者配置信息,config.js的Env配置提供测试和正式环境切换。
20   -
21   -> 测试环境各种配置管理、数据分析查看,请[前往测试服后台](http://pre-data.d3games.com/#/login)
22   -
23   -> 正式环境各种配置管理、数据分析查看,请[前往正式服后台](https://data.d3games.com/#/login)
  17 +噗嗤管理后台对sdk中上报的各项数据进行分析,管理sdk中所需要的配置信息:分享/视频配置、配置参数(在线参数配置)、交叉推广位配置、用户自定义事件配置。
24 18  
25 19 噗嗤管理后台地址:
26 20  
27   -- 测试服后台,地址:http://pre-data.d3games.com/#/login
28   -
29   -- 正式服后台,地址:https://data.d3games.com/#/login
  21 +- https://data.d3games.com/#/login
30 22  
31 23 **友情提示:**
32 24  
... ... @@ -52,8 +44,8 @@ PCSDK上报小游戏用户所触发的各种行为数据到噗嗤管理后台,
52 44  
53 45 **后台提供配置相关功能(不能跳转请联系管理员添加权限):**
54 46  
55   -- [分享/视频配置](http://pre-data.d3games.com/index.html#/share_list)
56   -- [配置参数](http://pre-data.d3games.com/index.html#/config_list)
  47 +- [分享/视频配置](https://data.d3games.com/index.html#/share_list)
  48 +- [配置参数](https://data.d3games.com/index.html#/config_list)
57 49  
58 50  
59 51 # 更多:
... ...
modules.md
... ... @@ -15,14 +15,6 @@ PCSDK上报小游戏用户所触发的各种行为数据到噗嗤管理后台,
15 15 # 噗嗤管理后台
16 16 噗嗤管理后台统计sdk中上报的各项数据进行分析;管理各种sdk中所需要的配置信息:分享/视频配置、配置参数(在线参数配置)、噗嗤游戏导出广告配置、用户事件行为配置。
17 17  
18   -为了开发联调测试阶段不影响游戏已上线运营相关数据或者配置信息,特意对管理后台做了测试和线上服划分,噗嗤管理后台分为:测试服后台,正式服后台:
19   -
20   -噗嗤管理后台后台地址:
21   -
22   -- 正式服后台,地址:https://data.d3games.com/#/login
23   -
24   -- 测试服后台,地址:http://pre-data.d3games.com/#/login
25   -
26 18 **友情提示:**
27 19  
28 20 - **之后文案中后台指的是噗嗤管理后台,而不是微信小程序/小游戏后台。**
... ...
share.md 0 → 100644
... ... @@ -0,0 +1,184 @@
  1 +
  2 +# 分享视频模块
  3 +
  4 +------
  5 +
  6 +#### **简介**
  7 +小游戏生态中,大家普遍把平台提供的分享/视频接口更多用于某个奖励领取、获取n倍奖励、游戏死亡复活、转盘额外次数获得等等一种有效途径(分享:拉取新用户,视频:赚钱广告费);噗嗤游戏在分享or视频平衡推送切换不断的探索迭代中,总结了一套分享/视频积分策略,集成在SDK中开放给开发者,开发者在后台界面化操作下能方便的对某个功能点分享文案、分享图、推送类型(分享、视频)进行添加修改:
  8 +
  9 +- 分享/视频配置可以让开发者在后台中动态修改相关功能的分享/视频配置内容。
  10 +
  11 +- 新增某个功能的分享点配置、在线修改相关功能的分享图或文案、在线切换某个功能按钮的分享/视频功能。
  12 +
  13 +
  14 +
  15 +#### **后台使用**
  16 +
  17 +配置分享视频配置,登录后台->头部tab切换到【游戏数据】->【配置相关】->【分享/视频配置】可新增、编辑修改分享/视频内容:
  18 +
  19 +![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_023.png "🔍点击查看大图")
  20 +
  21 +![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_024.png "🔍点击查看大图")
  22 +
  23 +接入分享视频模块后,后台已经对分享和视频数据分别进行整理统计了,游戏接入方可实时阅览分享/视频的各项数据:
  24 +
  25 +查看分享分析,登录后台->头部tab切换到【游戏数据】->【产品分析】->【分享分析】可阅览游戏分享数据的各项统计:
  26 +
  27 +![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_025.png "🔍点击查看大图")
  28 +
  29 +查看视频广告详情,登录后台->头部tab切换到【游戏数据】->【配置相关】->【视频广告详情】可阅览游戏各个功能点视频数据统计:
  30 +
  31 +![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_026.png "🔍点击查看大图")
  32 +
  33 +
  34 +
  35 +#### **接入必读**
  36 +
  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 +- 开发者如
  40 +
  41 +
  42 +#### 接入API:**
  43 +
  44 +| **名称** | **功能说明** |
  45 +| ------------------------------- | ------------------------------------------------------------ |
  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字符串 |
  50 +
  51 +
  52 +
  53 +1. ##### **updateOnlineConfig**
  54 +
  55 + ```javascript
  56 + PCSDK.online.updateOnlineConfig(): Promise<any>
  57 + ```
  58 +
  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 + > 下面示例会演示两种不同配置的使用范例:
  68 +
  69 + 参数:
  70 +
  71 + ```
  72 + 无
  73 + ```
  74 +
  75 + 返回值:
  76 +
  77 + ```
  78 + Promise<any>
  79 + ```
  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**
  116 +
  117 + ```javascript
  118 + PCSDK.online.getParamsInt( key: string, defaultVal?: number ): number
  119 + ```
  120 +
  121 + 定义:根据在线参数key获取number类型参数值,适合配置参数为:整数、浮点数
  122 +
  123 + 参数:
  124 +
  125 + ```javascript
  126 + key: string 必传 后台 ->【配置参数】配置的key
  127 + defaultVal: number 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值
  128 + ```
  129 +
  130 + 返回值:
  131 +
  132 + ```
  133 + number
  134 + ```
  135 +
  136 + 示例:[查看上面的示例代码](online.md#sample)
  137 +
  138 +3. **getParamsObj**
  139 +
  140 + ```javascript
  141 + PCSDK.online.getParamsObj( key: string, defaultVal?: any ): any
  142 + ```
  143 +
  144 + 定义:根据在线参数key获取object类型参数值,适合配置参数为:数组、json对象
  145 +
  146 + 参数:
  147 +
  148 + ```javascript
  149 + key: string 必传 后台 ->【配置参数】配置的key
  150 + defaultVal: any 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值
  151 + ```
  152 +
  153 + 返回值:
  154 +
  155 + ```
  156 + object | array | null
  157 + ```
  158 +
  159 + 示例:[查看上面的示例代码](online.md#sample)
  160 +
  161 +1. **getParamsString**
  162 +
  163 + ```javascript
  164 + PCSDK.online.getParamsString( key: string, defaultVal?: string ): string
  165 + ```
  166 +
  167 + 定义:根据在线参数key获取string类型参数值,适合配置参数为:字符串、json字符串
  168 +
  169 + 参数:
  170 +
  171 + ```javascript
  172 + key: string 必传 后台 ->【配置参数】配置的key
  173 + defaultVal: string 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值
  174 + ```
  175 +
  176 + 返回值:
  177 +
  178 + ```
  179 + string
  180 + ```
  181 +
  182 + 示例:[查看上面的示例代码](online.md#sample)
  183 +
  184 +
0 185 \ No newline at end of file
... ...
stat_ads.md
... ... @@ -38,7 +38,7 @@
38 38  
39 39 - 由于微信对每个游戏可跳转其他游戏有10个限制,可跳转的其它游戏需要在小游戏根目录下的全局配置文件game.json中进行添加配置:navigateToMiniProgramAppIdList,该参数定义请详读[小程序全局配置](https://developers.weixin.qq.com/minigame/dev/reference/configuration/app.html)。
40 40  
41   -- 噗嗤游戏为了方便开发者接入调试交叉推广位,【后台测试服】已经配置测试使用的不同类型推广位,并提供以下10个测试服广告位appid
  41 +- 噗嗤游戏为了方便开发者接入调试交叉推广位,后台已经配置测试使用的3种类型推广位,提供以下10个推广位appid,开发者复制下面的navigateToMiniProgramAppIdList json数据,配置到game.json的navigateToMiniProgramAppIdList参数
42 42  
43 43 水果爆破 :"wx26822126b4d99eda",
44 44  
... ... @@ -75,20 +75,9 @@
75 75 ]
76 76 ```
77 77  
78   -
79   -
80   -- 完成下面的操作步骤,即可拉取交叉推广位:
81   -
82   - 1、开发者复制上面的10个其他游戏的appid,配置到game.json的navigateToMiniProgramAppIdList参数:
83   -
84 78 ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_010.png "🔍点击查看大图")
85 79  
86   - 2、修改[config.js的Env配置](install.md#config_env)为110,开发者测试联调阶段,走测试环境
87   -
88   - > 提示:广告位接入完毕测试通过,提交审核前,修改Env为100。
89 80  
90   - ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_011.png "🔍点击查看大图")
91   -
92 81  
93 82  
94 83 #### **接入API:**
... ... @@ -101,10 +90,6 @@
101 90  
102 91  
103 92  
104   -
105   -
106   -
107   -
108 93 1. ##### **bannerList**
109 94  
110 95 ```javascript
... ...
stat_event.md
... ... @@ -16,7 +16,7 @@
16 16  
17 17 #### **接入必读**
18 18  
19   -接入自定义事件打点前,请[前往后台](http://pre-data.d3games.com/index.html#/login)进行添加自定义事件的key:登录后台->头部tab切换到【游戏数据】->【产品分析】->【事件分析】->点击【新增】添加自定义事件(事件key可语义化的自定义,推荐_连接)。
  19 +接入自定义事件打点前,请[前往后台](https://data.d3games.com/index.html#/login)进行添加自定义事件的key:登录后台->头部tab切换到【游戏数据】->【产品分析】->【事件分析】->点击【新增】添加自定义事件(事件key可语义化的自定义,推荐_连接)。
20 20  
21 21 ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_016.png "🔍点击查看大图")
22 22  
... ... @@ -91,7 +91,7 @@ enum EventKeys {
91 91  
92 92 | **名称** | **功能说明** |
93 93 | ---------------- | ------------------------------------------------------------ |
94   -| PCSDK.stat.event | 自定义事件打点,使用前请[前往后台](http://pre-data.d3games.com/index.html#/login)进行添加自定义事件key |
  94 +| PCSDK.stat.event | 自定义事件打点,使用前请[前往后台](https://data.d3games.com/index.html#/login)进行添加自定义事件key |
95 95  
96 96  
97 97  
... ...
stat_level.md
... ... @@ -52,9 +52,18 @@
52 52 ```javascript
53 53 PCSDK.stat.logLevelHide(levelId: string | number , opts?: { attr: number } ): void
54 54 ```
  55 + 定义:监听游戏战斗界面onHide时上报关卡的数据。什么是界面onHide?[请详读微信小游戏wx.onHide](https://developers.weixin.qq.com/minigame/dev/api/base/app/life-cycle/wx.onHide.html)
  56 + 注意事项:
55 57  
56   - > 定义:游戏中onHide时(设置wx.onHide回调监听事件)关卡onHide数据上报。
57   - > 需要屏蔽掉复活、失败、成功状态
  58 + > <font color="red">1)游戏战斗界面监听平台的onHide事件,使用此api上报关卡onHide打点。</font>
  59 + >
  60 + >
  61 +
  62 + > <font color="red">2)游戏战斗界面退出后,要移除onHide事件监听,避免在其他界面下,onHide时候执行此次上报。</font>
  63 + >
  64 + >
  65 +
  66 + > <font color="red">3)一定要屏蔽游戏复活中、游戏失败、游戏通过成功状态,这三种状态下避免上报此打点,详看下面示例。</font>
58 67  
59 68 参数:
60 69  
... ... @@ -66,7 +75,6 @@
66 75 attr: number 战斗属性(例如:关卡战斗中所使用的枪支等级)
67 76 }
68 77 ```
69   -
70 78 [点此查看完整示例](stat_level.md#sample)如何添加关卡onHide打点代码
71 79  
72 80 3. #### **logLevelFail**
... ... @@ -112,8 +120,7 @@
112 120 }
113 121 ```
114 122 <div id="sample"></div> 完整示例,以上四个接口使用场景:
115   -> 游戏监听wx.onHide回调中上报关卡onHide隐藏打点(需要屏蔽掉复活、失败、成功状态)。
116   -> SDK中监听了wx.onHide事件,当游戏onHide时,SDK会发送事件名为'app.hide'的自定义事件,开发者可在代码中使用PCSDK.event.bindEvent监听该事件,使用PCSDK.event.removeEvent移除对应监听事件,[详细文档event模块文档请阅读event事件模块](evennt.md)。
  123 +> SDK中监听了onHide事件,当游戏onHide时,SDK会发送事件名为'app.hide'的自定义事件,开发者可在代码中使用PCSDK.event.bindEvent监听该事件,使用PCSDK.event.removeEvent移除对应监听事件,[详细文档event模块文档请阅读event事件模块](evennt.md)。
117 124  
118 125 ```javascript
119 126 /**
... ... @@ -161,7 +168,7 @@
161 168 EventCenter.I.remove('level.relive', this, this.handleLevelRelive);
162 169 }
163 170  
164   - // 游戏复活
  171 + // 游戏复活
165 172 private doGameRelive(){
166 173 this.setState(GameState.Relive);
167 174 }
... ... @@ -178,14 +185,14 @@
178 185  
179 186 // SDK发出的app.hide事件监听
180 187 private handleHide() {
181   - // 关卡onHide上报(成功、失败、复活不进行logLevelHide上报
  188 + // 战斗界面onHide上报logLevelHide(游戏通关成功、游戏通关失败、游戏复活中不进行上报logLevelHide打点
182 189 if(!(this.isState(GameState.Win) || this.isState(GameState.Fail) || this.isState(GameState.Relive)))
183 190 PCSDK.stat.logLevelHide(this.missionId, {
184 191 attr: this.currSelectGun
185 192 });
186 193 }
187 194  
188   - // 监听关卡复活消息
  195 + // 监听关卡复活成功消息
189 196 private handleLevelRelive(){
190 197 // 关卡复活成功上报
191 198 PCSDK.stat.logLevelRelive(this.missionId, {
... ... @@ -227,7 +234,7 @@
227 234 });
228 235 break;
229 236  
230   - case GameState.Relive:// 处理复活
  237 + case GameState.Relive:// 处理复活
231 238 // 弹出复活操作界面
232 239 PopWinManager.I.openPopwin(RelivePopwinn);
233 240 break;
... ... @@ -242,7 +249,7 @@
242 249 // 复活界面关闭
243 250 close(){
244 251 super.close();
245   - // 关闭模拟复活成功,发送消息
  252 + // 关闭模拟:复活成功,发送复活成功消息
246 253 EventCenter.I.emit('level.relive');
247 254 }
248 255 }
... ...
styles/website.css 0 → 100644
... ... @@ -0,0 +1,68 @@
  1 +/* CSS for website */
  2 +h1 , h2{
  3 + border-bottom: 1px solid #EFEAEA;
  4 + padding-bottom: 3px;
  5 +}
  6 +.markdown-section>:first-child {
  7 + margin-top: 0!important;
  8 +}
  9 +.page-wrapper {
  10 + margin-top: -1.275em;
  11 +}
  12 +.book .book-body .page-wrapper .page-inner section.normal {
  13 + min-height:350px;
  14 + margin-bottom: 30px;
  15 +}
  16 +
  17 +.book .book-body .page-wrapper .page-inner section.normal hr {
  18 + height: 0px;
  19 + padding: 0;
  20 + margin: 1.7em 0;
  21 + overflow: hidden;
  22 + background-color: #e7e7e7;
  23 + border-bottom: 1px dotted #e7e7e7;
  24 +}
  25 +
  26 +.video-js {
  27 + width:100%;
  28 + height: 100%;
  29 +}
  30 +
  31 +pre[class*="language-"] {
  32 + border: none;
  33 + background-color: #f7f7f7;
  34 + /* font-size: 1em; */
  35 + line-height: 1.2em;
  36 +}
  37 +
  38 +.book .book-body .page-wrapper .page-inner section.normal {
  39 + font-size: 16px;
  40 + font-family: "ubuntu", "Tahoma", "Microsoft YaHei", arial, sans-serif;
  41 +}
  42 +
  43 +.aceCode {
  44 + font-size: 14px !important;
  45 +}
  46 +
  47 +input[type=checkbox]{
  48 + margin-left: -2em;
  49 +}
  50 +
  51 +.page-footer span{
  52 + font-size: 12px;
  53 +}
  54 +
  55 +.page-footer .copyright {
  56 + float: left;
  57 +}
  58 +
  59 +.body, html {
  60 + overflow-y: hidden;
  61 +}
  62 +
  63 +.versions-select select {
  64 + height: 2em;
  65 + line-height: 2em;
  66 + border-radius: 4px;
  67 + background: #efefef;
  68 +}
... ...