Commit 6a23c5dbb9a57d6c0cf1d5380de1caee8f7722ba

Authored by 小川 费
1 parent e6f13bf6
Exists in master

1

SUMMARY.md
... ... @@ -14,13 +14,11 @@
14 14 * [交叉推广位](stat_ads.md)
15 15 * [分享视频模块](share.md)
16 16 * [配置参数模块️](online.md)
17   -* [多平台接口模块❎](platform.md)
18   - * [支付打点❎](platform_pay.md)
19   - * [授权按钮❎](platform_common.md#userbtn)
20   - * [检测自动更新❎](platform_common.md#autoupdate)
21   - * [打开客服消息❎](platform_common.md#service)
22   - * [震动接口❎](platform_common.md#vibrate)
23   - * [其他接口❎](platform_common.md#other)
  17 +* [多平台接口模块](platform.md)
  18 + * [支付打点](platform.md#logpay)
  19 + * [检测自动更新](platform.md#checkUpdate)
  20 + * [打开客服消息](platform.md#service)
  21 + * [震动接口](platform.md#vibrate)
24 22 * [数据模块](data.md)
25 23 * [事件模块](event.md)
26 24 * [FAQ❎](faq.md)
27 25 \ No newline at end of file
... ...
images/sdk_029.png 0 → 100644

103 KB

images/sdk_video_001.mp4 0 → 100644
No preview for this file type
images/sdk_video_002.mp4 0 → 100644
No preview for this file type
install.md
... ... @@ -60,9 +60,8 @@
60 60  
61 61  
62 62  
63   -
64 63 * #### 根据运营提供的信息修改sdk文件夹下的**config**.js文件(可横向拖动查看查看更多====>)<div id="config"></div>
65   -
  64 +<div id="configJs"></div>
66 65 ```javascript
67 66 export default {
68 67 IsDebug: false, // 是否debug模式,debug模式会打印log,可使用stat模块setDebug api进行修改
... ...
platform.md
1   -# 多平台接口模块
  1 +# 多平台接口模块:PCSDK.platform
2 2  
3 3 ------
4 4  
5 5 #### **简介**
6 6  
7   -启动注册打点上报用户注册活跃数据,噗嗤管理后台为游戏提供用户数据统计:实时获取活跃、新增用户数、打开次数、在线时长......;注册转化统计
  7 +所谓多平台指的是微信小游戏、QQ轻游戏、今日头条、oppo等游戏发布的平台。微信和QQ接口文档api相似度99%,微信、QQ、今日头条平台的接口api相似度80%以上,虽然相似度很高,但是仍需要针对差异性做一些处理。多平台接口模块就是想要在SDK内部去抹平了各个平台差异性的处理,达到同一个api调用,应用多个平台的作用
8 8  
  9 +#### **此模块是参照微信小游戏提供的api进行封装的公用方法,提供了以下游戏中常用到的功能:**
9 10  
  11 +**支付打点:logPay** (此模块保留logPay调用只是为了兼容已经接入的游戏,该api已经归类到【统计模块】下面的[支付打点](stat_pay.md)栏)。
10 12  
11   -#### **后台使用**
  13 +**打开客服消息:openCustomerServiceConversation** 整理[wx.openCustomerServiceConversation](https://developers.weixin.qq.com/minigame/dev/api/open-api/customer-message/wx.openCustomerServiceConversation.html)
12 14  
13   -完成启动注册打点后,登录后台->头部tab切换到【游戏数据】->【产品分析】->【实时数据】即可实时查看用户活跃、新增等信息:
14   -![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_008.png "🔍点击查看大图")
  15 +**检测版本更新:checkUpdate** 整理来自:[wx.getUpdateManager](https://developers.weixin.qq.com/minigame/dev/api/base/update/UpdateManager.html)
15 16  
16   -点击【注册转化】可查看列表式显示新增、注册、加载完成等详细信息:
  17 +**显示模态弹出框:showModal** 整理来自:[wx.showModal](https://developers.weixin.qq.com/minigame/dev/api/ui/interaction/wx.showModal.html)
17 18  
18   -![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_009.png "🔍点击查看大图")
  19 +**复制文本:copy** 整理来自:[wx.setClipboardData](https://developers.weixin.qq.com/minigame/dev/api/device/clipboard/wx.setClipboardData.html)
19 20  
  21 +**长震动:vibrateLong** 整理来自:[wx.vibrateLong](https://developers.weixin.qq.com/minigame/dev/api/device/vibrate/wx.vibrateLong.html)
20 22  
  23 +**短震动:vibrateShort** 整理来自:[wx.vibrateShort](https://developers.weixin.qq.com/minigame/dev/api/device/vibrate/wx.vibrateShort.html)
  24 +
  25 +**更新转发属性:updateShareMenu** 整理来自:[wx.updateShareMenu](https://developers.weixin.qq.com/minigame/dev/api/share/wx.updateShareMenu.html)
  26 +
  27 +**微信小游戏推荐弹窗组件GamePortal:isGamePortalPlaying 与 gamePortalShow** 整理来自:[wx.createGamePortal](https://developers.weixin.qq.com/minigame/dev/api/game-portal/GameBanner.html)
  28 +
  29 +**微信小游戏推荐icon组件GameIcon:gameIconShow 与 gameIconDestroy** 整理来自:[wx.createGameIcon](https://developers.weixin.qq.com/minigame/dev/api/game-portal/wx.createGameIcon.html)
  30 +
  31 +**微信小游戏插屏广告组件InterstitialAd:isInterstitialPlaying 与 interstitialShow** 整理来自:[wx.createInterstitialAd](https://developers.weixin.qq.com/minigame/dev/api/ad/InterstitialAd.html)
21 32  
22 33  
23 34  
... ... @@ -25,150 +36,319 @@
25 36  
26 37 | **名称** | **功能说明** |
27 38 | ------------------------ | ------------------------------------------------------------ |
28   -| PCSDK.stat.loadingFinish | 加载游戏资源完成时打点,不是微信代码包白屏加载完成,游戏loading自身cdn资源加载完成调用 |
29   -| PCSDK.stat.setLogind | 设置sdk必须要使用的用户id、第一次创建角色的注册时间,游戏接入方登录游戏服务器后调用 |
30   -| PCSDK.stat.active | 用户活跃/新增注册上报,切记在setLogind设置需要的信息过后使用(不限于使用位置),不然会导致新增注册数据统计异常 |
31   -
32   -
  39 +| PCSDK.platform.logPay | 支付统计打点,支付完成(取消、成功、失败)的打点 |
  40 +| PCSDK.platform.openCustomerServiceConversation | 进入客服会话,可打开一个普通的客服会话,也可打开客服会话发送体力、钻石和进入跳转充值等,[具体用法请看](platform.md#service)|
  41 +| PCSDK.platform.checkUpdate | 检测版本是否有更新,如果版本更新会弹出确认框 |
  42 +| PCSDK.platform.vibrateShort | 使手机发生较短时间的振动(15 ms) |
  43 +| PCSDK.platform.vibrateLong | 使手机发生较长时间的振动(400 ms) |
33 44  
34 45  
35 46  
36 47  
37 48  
38   -1. **loadingFinish**
  49 +<div id="logpay"></div>
  50 +1. **logPay**
39 51  
40 52 ```javascript
41   - PCSDK.stat.loadingFinish(): void
  53 + PCSDK.platform.logPay( params: object ): void
42 54 ```
43 55  
44   - 定义:加载游戏加载资源完成时打点
  56 + 定义:开发者游戏充值完成后,上报支付结果打点,支付结果类型:0(支付失败),1(支付成功),-1(取消支付)。该api需在[config.js中配置MidasPay](install.md#configJs)信息。
45 57  
46 58 参数:
47 59  
48 60 ```
  61 + params object 必传 打点参数
  62 + {
  63 + type: number 必传 支付类型:0(支付失败),1(支付成功),-1(取消支付);
  64 + source: string 必传 游戏服务商生成的订单号,没有则为空字符串
  65 + amount: number 必传 实际支付金额,单位分
  66 + buy_id: string | number; 必传 商品ID
  67 + buy_name: string; 必传 商品名称
  68 + item_info: string 必传 获得的道具内容:道具id及数量,逗号分隔,多项使用分号分隔 => 1,1;2,10;3,100
  69 + }
  70 + ```
  71 + 返回值:
  72 +
  73 + ```
  74 + void
49 75
50 76 ```
51 77  
52   - 示例:加载完成游戏主界面图片、json资源打点
  78 + 示例:客户端游戏支付完成后上报支付打点,下例只是演示logPay用法
53 79  
54 80 ```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) + '%';
  81 + private reqPay() {
  82 + Api.I.pay().then( ret => {
  83 + switch(ret.code){
  84 + case 1: // 支付成功回调处理
  85 + PCSDK.platform.logPay({
  86 + type: 1, // 成功支付
  87 + source: "10000400", // 订单号,没有则为空字符串
  88 + amount: 10 * 100, // 10元
  89 + buy_id: 58, // 支付的商品id
  90 + buy_name: "钻石*152,金币*188888888",
  91 + item_info: "40,152;90,188888888" // 例如 钻石id:40 金币id:90
  92 + });
  93 + break;
  94 +
  95 + case 0: // 支付失败回调处理
  96 + PCSDK.platform.logPay({
  97 + type: 0, // 失败支付
  98 + source: "10000400", // 订单号,没有则为空字符串
  99 + amount: 10 * 100, // 10元
  100 + buy_id: 58, // 支付的商品id
  101 + buy_name: "钻石*152,金币*188888888",
  102 + item_info: "40,152;90,188888888" // 例如 钻石id:40 金币id:90
  103 + });
  104 + break;
  105 +
  106 + case -1: // 支付取消回调处理
  107 + PCSDK.platform.logPay({
  108 + type: -1, // 取消支付
  109 + source: "10000400", // 订单号,没有则为空字符串
  110 + amount: 10 * 100, // 10元
  111 + buy_id: 58, // 支付的商品id
  112 + buy_name: "钻石*152,金币*188888888",
  113 + item_info: "40,152;90,188888888" // 例如 钻石id:40 金币id:90
  114 + });
  115 + break;
  116 + }
  117 + });
75 118 }
76 119 ```
77   -
78   -2. **setLogind**
  120 +<div id="service"></div>
  121 +2. **openCustomerServiceConversation**
79 122  
80 123 ```javascript
81   - PCSDK.stat.setLogind( data: object ): void
  124 + PCSDK.platform.openCustomerServiceConversation( params?: _CustomerServiceConversationObject ): void
82 125 ```
83 126  
84   - 定义:游戏登录完成,得到登录用户的用户id和用户第一次注册时间,设置SDK必需的用户信息
  127 + 定义:进入客服会话,可打开一个普通的客服会话,也可打开客服会话发送体力和进入跳转充值
85 128  
86 129 参数:
87 130  
88 131 ```javascript
89   - data: object
90   -{
91   - userId: string | number 必传, 用户唯一标识id
92   - regTime: number 必传,用户第一次创建角色的注册时间戳
  132 + params _CustomerServiceConversationObject 选传,不传递打开一个普通的客户会话。[参数说明参照](https://developers.weixin.qq.com/minigame/dev/api/open-api/customer-message/wx.openCustomerServiceConversation.html)
  133 + {
  134 + sessionFrom string 选传 会话来源
  135 + showMessageCard boolean 选传 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息
  136 + sendMessageTitle string 选传 会话内消息卡片标题
  137 + sendMessagePath string 选传 会话内消息卡片路径
  138 + sendMessageImg string 选传 会话内消息卡片图片路径
  139 + success function 选传 接口调用成功的回调函数
  140 + fail function 选传 接口调用失败的回调函数
  141 + complete function 选传 接口调用结束的回调函数(调用成功、失败都会执行)
93 142 }
94 143 ```
95 144  
96   - 示例:游戏登录完成后,获取用户信息后进行打点(该示例,只是模拟使用环境)
  145 + 示例1:进入普通的客服会话
97 146  
98 147 ```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   - });
  148 + PCSDK.platform.openCustomerServiceConversation();
  149 + ```
  150 + 示例2:应用场景如进入客服会话跳转领取体力、钻石等等: 示例为跳转客服领取18888钻石奖励,success函数中记录数据状态(用于客服返回,执行onShow生命周期函数时逻辑判断)。
  151 + <iframe height=498 width=740 src="https://dep.miso-lab.com/sdkword/sdk_video_001.mp4" frameborder=0 allowfullscreen></iframe>
  152 +
  153 + ```javascript
  154 + // 跳转客服领取18888钻石奖励,开发者可根据示例修改
  155 + PCSDK.platform.openCustomerServiceConversation({
  156 + showMessageCard: true,
  157 + sendMessageTitle: '钻石已发送,点击领取钻石!',
  158 + sendMessagePath: '',
  159 + sendMessageImg: 'http://dep.miso-lab.com/mergeguns/bin/res/image/service_reward.png', // 图片icon对应的域名记得加入到request和download白名单中
  160 + success: () => {
  161 + // 打开跳转客服成功,记录成功状态,在游戏全局注册的onShow监听通过判断这个状态去请求接口领取奖励
  162 + // 记录数据状态,onShow的时候读取数据状态判断,只是演示操作,可根据实际情况修改
  163 + AppDataManager.I.set('service.reward.data', {
  164 + status: 1, // 可以领奖
  165 + reward: 18888 // 获得18888钻石
  166 + });
  167 + },
  168 + fail: (err) => {
  169 + console.log("openCustomerServiceConversation fail: ", err);
  170 + }
  171 + });
  172 +
  173 + // 在游戏中全局注册的onShow事件监听中检测是
  174 + // 游戏入口:Main.cs
  175 + class Main {
  176 + constructor() {
  177 + this.init();
  178 + }
  179 +
  180 + private init() {
  181 + PCSDK.event.add('app.show', this.onShow, this); // 等同于wx.onShow(this.onShow.bind(this));
  182 + PCSDK.event.add('app.hide', this.onHide, this); // 等同于wx.onHide(this.onHide.bind(this));
  183 + }
  184 +
  185 + private onShow(opts) {
  186 + // 判断是否是来源于客服会话,上面的openCustomerServiceConversation的success设置的数据状态做判断
  187 + let serviceRewardData = AppDataManager.I.get('service.reward.data');
  188 + if (serviceRewardData && serviceRewardData.status === 1) {
  189 + AppDataManager.I.set('service.reward.data', null);
  190 + // 奖励发放,处理发放后的逻辑,比如每天只能领取一次的记录,防止重复刷奖励
  191 + }
  192 + }
  193 +
  194 + private onHide(){
  195 + // 监听平台的onHide事件
  196 + }
  197 + }
107 198 ```
  199 + 示例3:应用场景例如进入客服会话,success函数中记录数据状态(用于客服返回,执行onShow生命周期函数时逻辑判断),点击右下角的充值按钮后,跳转充值,充值完成后在onShow中处理:需要后台提供api接口,验证充值合理性并发放奖励,**此接口需要后端支持**。
  200 + <iframe height=498 width=740 src="https://dep.miso-lab.com/sdkword/sdk_video_002.mp4" frameborder=0 allowfullscreen></iframe>
108 201  
109   -3. **active**
  202 + ```javascript
  203 + // 跳转客服充值,开发者可根据示例修改,sendMessagePath请严格按照示例中提供的参数
  204 + /**
  205 + * 充值跳转客服
  206 + * @param itemId 购买道具商品id
  207 + * @param money 购买商品花费,单位元
  208 + */
  209 + private openServiceWithItem(itemId: number, money: number) {
  210 + PCSDK.platform.openCustomerServiceConversation({
  211 + showMessageCard: true,
  212 + sendMessageTitle: `充值${money}元`,
  213 + sendMessagePath: `channel=${PCSDK.data.ChannelId}&item=${itemId}&uid=${PCSDK.data.UserId}&pf=${PCSDK.data.SystemId}`,
  214 + sendMessageImg: 'http://dep.miso-lab.com/idiom/bin/share/pay.png', // 图片icon对应的域名记得加入到request和download白名单中
  215 + success: () => {
  216 + // 打开跳转客服成功,记录成功状态,onShow通过判断这个状态去请求接口领取奖励
  217 + // 记录数据状态,onShow的时候读取数据状态判断,只是演示操作,可根据实际情况修改
  218 + AppDataManager.I.set('service.pay.data', {
  219 + status: 1, // 可以领奖
  220 + itemId: itemId, // 购买道具商品id
  221 + money: money // 购买商品花费,单位元
  222 + });
  223 + },
  224 + fail: (err) => {
  225 + console.log("openCustomerServiceConversation fail: ", err);
  226 + }
  227 + });
  228 + }
  229 +
  230 + // 在游戏中全局注册的onShow事件监听中检测是
  231 + // 游戏入口:Main.cs
  232 + class Main {
  233 + constructor() {
  234 + this.init();
  235 + }
  236 +
  237 + private init() {
  238 + PCSDK.event.add('app.show', this.onShow, this); // 等同于wx.onShow(this.onShow.bind(this));
  239 + PCSDK.event.add('app.hide', this.onHide, this); // 等同于wx.onHide(this.onHide.bind(this));
  240 + }
  241 +
  242 + private onShow(opts) {
  243 + // 判断是否是来源于客服会话,上面的openCustomerServiceConversation的success设置的数据状态做判断
  244 + let serviceRewardData = AppDataManager.I.get('service.pay.data');
  245 + if (serviceRewardData && serviceRewardData.status === 1) {
  246 + AppDataManager.I.set('service.pay.data', null);
  247 + // 领取奖励的逻辑,比如每天只能领取一次的记录,防止重复刷奖励
  248 + // 请求后端接口验证奖励合理性
  249 + }
  250 + }
  251 +
  252 + private onHide(){
  253 + // 监听平台的onHide事件
  254 + }
  255 + }
  256 + ```
  257 +<div id="checkUpdate"></div>
  258 +3. **checkUpdate**
110 259  
111 260 ```javascript
112   - PCSDK.stat.active(): void
  261 + PCSDK.platform.checkUpdate( params?: _ShowModalObject ): void
113 262 ```
114 263  
115   - 定义:用户活跃/新增注册上报,切记在使用setLogind设置用户信息过后调用此接口,不然会导致新增注册数据统计异常
  264 + 定义:检测版本是否有更新,如果版本有更新会弹出确认框,参数可不传递,不传递有版本更新会弹出下图的默认确认框;开发者可自定义弹出框的显示样式,参数与[wx.showModal](https://developers.weixin.qq.com/minigame/dev/api/ui/interaction/wx.showModal.html)一模一样。
  265 + 建议此api在游戏的入口调用。
  266 + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_029.png "🔍点击查看大图")
116 267  
117 268 参数:
118 269  
119 270 ```javascript
120   - 无
  271 + params _ShowModalObject 选传 不传递有版本更新会弹出上图样式默认确认框;开发者可自定义弹出框的显示样式,参数参照wx.showModal的参数
  272 + {
  273 + title string 选传 提示的标题,默认为:更新提示
  274 + content string 选传 提示的内容,默认为:新版本已经准备好,是否重启应用?
  275 + showCancel boolean 选传 是否显示取消按钮,默认为:false不显示
  276 + cancelText string 选传 取消按钮的文字,最多4个字符
  277 + cancelColor string 选传 取消按钮的文字颜色,必须是16进制格式的颜色字符串
  278 + confirmText string 选传 确认按钮的文字,最多4个字符
  279 + confirmColor string 选传 确认按钮的文字颜色,必须是16进制格式的颜色字符串
  280 + success function 选传 接口调用成功的回调函数
  281 + fail function 选传 接口调用失败的回调函数
  282 + complete function 选传 接口调用结束的回调函数(调用成功、失败都会执行)
  283 + }
121 284 ```
122 285  
123   - 示例:游戏登录完成后,获取用户信息后进行打点(该示例,只是模拟该接口使用环境)
  286 + 示例:在游戏入口类中检测是否有版本更新
124 287  
125 288 ```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();
  289 + class Main {
  290 + constructor() {
  291 + this.init();
143 292 }
144 293  
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);
  294 + private init() {
  295 + this.checkUpdate();
164 296 }
165 297  
166   - private onGame(){
167   - // 用户活跃注册打点
168   - PCSDK.stat.active();
169   - // 进入游戏页面
170   - SceneManager.I.switchScene(GameScene);
  298 + private checkUpdate() {
  299 + // 调用SDK的checkUpdate,微信版本有更新,会自动弹出更新确认框
  300 + PCSDK.platform.checkUpdate();
  301 +
  302 + // 自定义更新弹出框
  303 + /*
  304 + PCSDK.platform.checkUpdate({
  305 + showCancel: true,
  306 + content: '客官,xxx游戏有更新了!',
  307 + cancelText: '放弃'
  308 + });
  309 + */
171 310 }
172 311 }
173 312  
  313 + ```
  314 +<div id="vibrate"></div>
  315 +4.0 **vibrateShort**
  316 +
  317 + ```javascript
  318 + PCSDK.platform.vibrateShort(): Promise<any>
  319 + ```
  320 +
  321 + 定义:使手机发生较短时间的振动(15 ms)。仅在 iPhone 7 / 7 Plus 以上及 Android 机型生效
  322 +
  323 + 参数:
  324 +
  325 + ```javascript
  326 + 无
  327 + ```
  328 +
  329 + 示例:
  330 +
  331 + ```javascript
  332 + PCSDK.platform.vibrateShort();
  333 +
  334 + ```
  335 +4.1 **vibrateLong**
  336 +
  337 + ```javascript
  338 + PCSDK.platform.vibrateShort(): Promise<any>
  339 + ```
  340 +
  341 + 定义:使手机发生较长时间的振动(400 ms)
  342 +
  343 + 参数:
  344 +
  345 + ```javascript
  346 + 无
  347 + ```
  348 +
  349 + 示例:
  350 +
  351 + ```javascript
  352 + PCSDK.platform.vibrateLong();
  353 +
174 354 ```
175 355 \ No newline at end of file
... ...
word/噗嗤SDK(PCSDK).xmind
No preview for this file type