From f7c3ca7dbca8f1f8b0c44ad8166ab792949fff2f Mon Sep 17 00:00:00 2001 From: 小川 费 <449111130@qq.com> Date: Mon, 9 Sep 2019 14:08:13 +0800 Subject: [PATCH] 完结分享模块 --- SUMMARY.md | 2 +- event.md | 1 + images/sdk_027_1.png | Bin 0 -> 47313 bytes images/sdk_027_2.png | Bin 0 -> 99323 bytes images/sdk_027_3.png | Bin 0 -> 101696 bytes images/sdk_027_4.png | Bin 0 -> 98836 bytes online.md | 4 ++-- share.md | 562 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------- stat_active.md | 16 ++++++++-------- stat_ads.md | 10 +++++----- stat_event.md | 2 +- stat_level.md | 22 +++++++++++++--------- 12 files changed, 490 insertions(+), 129 deletions(-) create mode 100644 event.md create mode 100644 images/sdk_027_1.png create mode 100644 images/sdk_027_2.png create mode 100644 images/sdk_027_3.png create mode 100644 images/sdk_027_4.png diff --git a/SUMMARY.md b/SUMMARY.md index 729afc7..0831e69 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -12,7 +12,7 @@ * [关卡分析打点️️✔️](stat_level.md) * [自定义事件打点✔️](stat_event.md) * [交叉推广位✔️](stat_ads.md) -* [分享视频模块](share.md) +* [分享视频模块✔️](share.md) * [配置参数模块️✔️](online.md) * [多平台接口模块](platform.md) * [支付打点](platform_pay.md) diff --git a/event.md b/event.md new file mode 100644 index 0000000..c5e0b41 --- /dev/null +++ b/event.md @@ -0,0 +1 @@ +事件模块 \ No newline at end of file diff --git a/images/sdk_027_1.png b/images/sdk_027_1.png new file mode 100644 index 0000000..732c8bc Binary files /dev/null and b/images/sdk_027_1.png differ diff --git a/images/sdk_027_2.png b/images/sdk_027_2.png new file mode 100644 index 0000000..a52f670 Binary files /dev/null and b/images/sdk_027_2.png differ diff --git a/images/sdk_027_3.png b/images/sdk_027_3.png new file mode 100644 index 0000000..66df9ee Binary files /dev/null and b/images/sdk_027_3.png differ diff --git a/images/sdk_027_4.png b/images/sdk_027_4.png new file mode 100644 index 0000000..e8f21e5 Binary files /dev/null and b/images/sdk_027_4.png differ diff --git a/online.md b/online.md index 12ba025..c1ee058 100644 --- a/online.md +++ b/online.md @@ -5,7 +5,7 @@ #### **简介** -在线配置参数是噗嗤游戏开放的一个新模块功能,可以让开发者在后台配置参数中动态修改游戏中的参数值。例如:动态修改游戏的数值,小到一个简单开关0/1切换、一个简单的数字配置;打到一个游戏json配置等等。 +在线配置参数是噗嗤游戏开放的一个新模块功能,可以让开发者在后台【配置参数】栏中动态修改游戏使用的参数值。例如:动态修改游戏的数值,小到一个简单开关0/1切换、一个简单的数字配置;大到一个游戏json配置等。 该模块借鉴了[友盟在线配置参数](http://www.it610.com/article/4896789.htm)的设计思路。 @@ -40,7 +40,7 @@ 提示: - > [config.js中配置IsOnlineAutoUse](install.md#config_env)为true:SDK启动时自动去拉取在线配置参数,开发者不需要调用此接口,不然会导致重复拉取 + > [config.js中配置IsOnlineAutoUse](install.md#config_env)为true:SDK启动时会自动去拉取在线配置参数,开发者不需要调用此接口,不然会导致重复拉取 > > [config.js中配置IsOnlineAutoUse](install.md#config_env)为false:有两种理解方式:1)不接入使用在线配置参数模块;2)接入使用在线配置参数模块,开发者自己手动调用updateOnlineConfig api处理逻辑。 > diff --git a/share.md b/share.md index 076231b..6108bc4 100644 --- a/share.md +++ b/share.md @@ -4,13 +4,32 @@ ------ #### **简介** -小游戏生态中,大家普遍把平台提供的分享/视频接口更多用于某个奖励领取、获取n倍奖励、游戏死亡复活、转盘额外次数获得等等一种有效途径(分享:拉取新用户,视频:赚钱广告费);噗嗤游戏在分享or视频平衡推送切换不断的探索迭代中,总结了一套分享/视频积分策略,集成在SDK中开放给开发者,开发者在后台界面化操作下能方便的对某个功能点分享文案、分享图、推送类型(分享、视频)进行添加修改: +小游戏生态中,普遍把平台提供的分享/视频接口更多用于某个奖励领取、获取n倍奖励、游戏死亡复活、转盘额外次数获得等等一种有效途径(分享:拉取新用户,视频:赚钱广告费);噗嗤游戏在分享or视频推送不断的探索迭代中,总结了一套分享/视频积分策略,集成在SDK中开放给开发者,开发者只需对游戏中分享视频功能点命名一个英文名称key(分享视频key),这个key关联分享文案、分享图、分享开关(推送类型)、视频uid等等在后台配置好,使用SDK提供的一个dispatch api传入英文名称key即可完成接入工作。 -- 分享/视频配置可以让开发者在后台中动态修改相关功能的分享/视频配置内容。 +- 分享/视频配置可以让开发者在后台中动态修改相关功能点的分享/视频配置内容。 -- 新增某个功能的分享点配置、在线修改相关功能的分享图或文案、在线切换某个功能按钮的分享/视频功能。 +- 新增某个功能的分享点配置、在线修改相关功能点的分享图或文案、在线切换某个功能点按钮的分享/视频推送类型。 + +- 调用SDK的dispatch api,dispatch会根据后台配置的分享开关(推送类型)自动进行分发:推送分享还是视频全权交由SDK去处理,开发者只需要传入成功/失败回调函数,成功回调函数处理发放领取奖励、n倍奖励、成功复活等操作,失败回调函数处理参数传递的msg信息。 + +#### **疑惑解答** +1. 为什么要引入这个模块? + + > 游戏中很多n倍奖励、复活、额外奖励等功能点通常需要分享或者视频才能额外获得,游戏上线后,运营很有可能会对某些功能点有额外的需求修改:a功能点获取由分享改成视频方式获取、b功能点由视频改成分享方式获取、c功能点需要在前面n次看视频获得后全是分享获得、为某某功能的分享图想换一个、拉取视频不成功自动切换分享等等;为了应对这些不同情形,我们把分享和视频点包装成一个模块,a功能点也不在局限于只是简单的分享、b功能只是视频,而是通过后台分享开关去灵活切换。所有功能点入口调用都是使用dispatch,每个功能点都是转化为一个分享视频key在后台管理。 + +2. 什么是分享视频key? + + > 分享视频key是一个功能点的英文名称,这个key配置在后台中,关联分享文案、分享图、分享开关(推送类型)、视频uid等等信息。某个功能点(不论是分享还是视频方式)调用dispatch传入这个key,SDK会读取这个key关联的信息,根据分享开关(推送类型)来推送分享(需要分享文案、分享图)还是推送视频(需要视频uid)。 + +3. 什么是分享视频分发? + + > 调用dispatch api传入分享视频key,SDK会查找这个key在后台配置的数据,SDK读取数据中分享开关(推送类型)的字段信息,通过这个开关类型来判断推给用户是分享还是视频,这个根据类型来推送的操作就是分发操作。 + +4. 游戏中之前是玩家分享n次后变成看视频或者是看视频n次后全是分享,dispatch能满足吗? + + > 上面的问题dispatch也同样支持,还是同样的调用方式,不需要做其他额外处理,dispatch是怎么做到的了:分享开关(推送类型)有一个分享积分选择项,这个选项就是通过积分策略实现了上面问题。 + > - #### **后台使用** @@ -20,7 +39,7 @@ ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_024.png "🔍点击查看大图") -接入分享视频模块后,后台已经对分享和视频数据分别进行整理统计了,游戏接入方可实时阅览分享/视频的各项数据: +接入分享视频模块后,后台已经对分享和视频数据分别进行整理统计了,游戏接入方可实时查看分享/视频的各项数据: 查看分享分析,登录后台->头部tab切换到【游戏数据】->【产品分析】->【分享分析】可阅览游戏分享数据的各项统计: @@ -34,151 +53,488 @@ #### **接入必读** -- 接入此模块前,请[**前往sdk/config.js文件中配置【IsUseShareModule: true 】开启share模块功能**](install.md#config_env),此参数配置为true,SDK启动时将自动拉取后台 -> 【分享/视频配置】配置的分享/视频配置列表。 -- 微信小游戏开发者接入此模块,提审时候为了避免触犯微信平台的[滥用分享行为](https://developers.weixin.qq.com/minigame/product/#_5-1-滥用分享行为),在后台【配置参数】中配置了一个系统级别的配置参数share_unlock,进行分享开关切换:1(开启)0(关闭),提审时候设置为0,审核通过后设置为1,SDK中读取此参数,如果推送的是分享,最终处理为无视频无分享模式。 -- 开发者如 +- 接入此模块前,请[**前往sdk/config.js文件中配置【IsUseShareModule: true 】开启分享视频模块功能**](install.md#config_env),此参数配置为true,才能正常使用此模块的功能,SDK启动时会自动拉取后台配置所有功能点的分享/视频配置列表。 + +- 微信小游戏开发者接入此模块,如果游戏有很多分享点,提审时避免触犯微信平台的[滥用分享行为](https://developers.weixin.qq.com/minigame/product/#_5-1-滥用分享行为),在后台【配置参数】中配置了一个SDK内部使用的[配置参数](online.md)share_unlock,进行分享开关切换:1(开启)0(关闭),提审时设置为0,审核通过后设为1。share_unlock设置为0,所有的功能点不会分享完成、拉起看完视频后发放奖励,而是直接发放奖励,这样就能避免审核时,如果是推送分享拉起分享,被微信认为是诱导分享,被拒的可能性。 + +- sdk/config.js的配置参数ShareRightKey,表示右上角分享的分享视频key,请配置到后台【分享/视频配置】中。如果ShareRightKey配置不为空,SDK会自动调用微信的右上角分享接口(wx.onShareAppMessage),实现右上角分享功能,注意的是开发者在游戏中已经有注册wx.onShareAppMessage需要删除掉,不然游戏中onShareAppMessage的注册事件会把SDK中的注册事件处理函数覆盖掉,导致还是使用的是开发者注册的右上角分享功能。 + +- sdk/config.js的配置参数ShareData表示默认分享视频配置,此条配置应用在两种情况下: + > 1、请求功能点的分享/视频配置列表出错,使用key去查找对应的分享配置肯定是查找不到的,会读取此条默认数据。 + > + > + > + > 2、请求功能点的分享/视频配置列表成功了,但是这个key没有配置到后台,也会读取此条默认数据 -#### 接入API:** +#### **接入**API: | **名称** | **功能说明** | | ------------------------------- | ------------------------------------------------------------ | -| PCSDK.online.updateOnlineConfig | 拉取后台配置的配置参数数据,可代码中手动调用,也可以通过config.js中配置SDK主动拉取,注意:使用前请详细[阅读config.js的IsOnlineAutoUse和IsOnlineDebug参数详解](install.md#config_env) | -| PCSDK.online.getParamsInt | 根据在线参数key获取number类型参数值,适合配置参数为:整数、浮点数 | -| PCSDK.online.getParamsObj | 根据在线参数key获取object类型参数值,适合配置参数为:数组、json对象 | -| PCSDK.online.getParamsString | 根据在线参数key获取string类型参数值,适合配置参数为:字符串、json字符串 | +| PCSDK.shareVideo.share | 普通分享,不需要处理回调的场景,例如分享到群、分享到好友,这些普通的分享,而不用处理成功/失败回调函数。 | +| PCSDK.shareVideo.dispatch | 分享视频分发入口,传入功能点英文命名的分享/视频key | +| PCSDK.shareVideo.getShareVideoType | 根据功能点在后台配置的分享/视频key,得到此功能点分享开关(推送类型)SDK计算得到最终推送类型:-1(无视频无分享)、0(分享)、1(异步分享)、5(分享积分)、2(视频)、3(无视频则分享)、4(视频和分享)(控制分享和视频两个按钮的显示) | -1. ##### **updateOnlineConfig** +1. ##### **share** ```javascript - PCSDK.online.updateOnlineConfig(): Promise + PCSDK.shareVideo.share(key:sring, params?: any, opts?: any): void ``` - 定义:拉取后台配置的配置参数数据, - - 提示: - - > [config.js中配置IsOnlineAutoUse](install.md#config_env)为true:SDK启动时自动去拉取在线配置参数,开发者不需要调用此接口,不然会导致重复拉取 - > - > [config.js中配置IsOnlineAutoUse](install.md#config_env)为false:有两种理解方式:1)不接入使用在线配置参数模块;2)接入使用在线配置参数模块,开发者自己手动调用updateOnlineConfig api处理逻辑。 - > - > 下面示例会演示两种不同配置的使用范例: + 定义:普通分享,不需要处理回调的场景,例如分享到群、分享到好友,这些普通的分享,而不用处理成功/失败回调函数。 参数: - ``` - 无 - ``` + ```javascript + key: string 必传 功能点的分享/视频key(后台 ->【游戏数据】 ->【配置相关】->【分享/视频配置】配置的key) + + params: object 选传 扩展参数:分享链接query携带自定义参数,{ key: value }对象形式,该对象传递的参数会与SDK内部query参数一起组成query(查询参数, key1=val1&key2=val2的格式)的值,SDK内部参数key有:channel_id、user_invite_uid、share_id、share_key。 + + 提示:params传递的对象中如果含有传递SDK内部query参数key,会被SDK内部参数值覆盖,所以开发者避免传递这些key。 + opts: object 选传 可不传递 + + ``` + 返回值: - + + ```javascript + void ``` - Promise + + 示例:游戏首页分享到群的功能,假如config.js配置的ChannelId: 20024;后台配置的分享视频key: home_share2group、此分享key的id:512;用户id:100000。 + + ```javascript + // 示例1: + // 分享后生成的query:share_id=512&share_key=home_share2group&channel_id=20024&user_invite_uid=100000 + PCSDK.shareVideo.share( 'home_share2group' ); + + // 示例2:第二个参数是分享生成的query携带的参数 + // 分享后生成的query:type=99&share_id=512&share_key=home_share2group&channel_id=20024&user_invite_uid=100000 + PCSDK.shareVideo.share( 'home_share2group', { + type:99 + }); + + // 示例3:第二个参数是分享生成的query携带的参数,传递SDK内部query参数:channel_id + // 分享后生成的query:type=99&share_id=512&share_key=home_share2group&channel_id=20024&user_invite_uid=100000 + PCSDK.shareVideo.share( 'home_share2group', { + type:99, + channel_id:10000 + }); ``` - -
-示例1:config.js配置IsOnlineAutoUse为false,开发者调用updateOnlineConfig api手动拉取在线配置参数数据 - -```javascript - // 后台 ->【游戏数据】->【配置参数】栏配置了:是否显示微信插屏广告、交叉推广位是否展示动态开关 - PCSDK.online.updateOnlineConfig().then(() => { - // 使用1:获取是否后台动态配置开启插屏广告,1为开启,0为关闭 - let isInterstitialAd = PCSDK.online.getParamsInt('interstitial_ad_open', 0) === 1; - // isInterstitialAd && '显示插屏广告'; - - // 使用2:获取动态多个广告位开启的配置 - let pcGameOpenMap = PCSDK.online.getParamsObj('pc_games_open', { "Drawer": 0, "GuessLike": 0, "Cross": 0 }); - // pcGameOpenMap.Drawer === 1 && '显示抽屉推广位'; - // pcGameOpenMap.GuessLike === 1 && '显示猜你喜欢推广位'; - // pcGameOpenMap.Cross === 1 && '显示交叉推广位'; - - // 使用3:获取签到配置 - let signRewardCfg = PCSDK.online.getParamsObj('sign_reward_cfg', [100, 300, 500, 700, 900, 2000, 3000]); - - // 使用4:获取动态bannerUid - let bannerUid = PCSDK.online.getParamsString('banner_common_uid', 'adunit-fe38438f074c717f'); - // bannerUid && '显示banner'; - }); -``` - -示例2:config.js配置IsOnlineAutoUse为true,SDK启动时会自动调用 updateOnlineConfig api拉取在线配置参数数据 - -```javascript - let isInterstitialAd = PCSDK.online.getParamsInt('interstitial_ad_open', 0) === 1; - let pcGameOpenMap = PCSDK.online.getParamsObj('pc_games_open', { "Drawer": 0, "GuessLike": 0, "Cross": 0 }); -``` - - - -2. ##### **getParamsInt** + +2. ##### **dispatch** ```javascript - PCSDK.online.getParamsInt( key: string, defaultVal?: number ): number + PCSDK.shareVideo.dispatch( key: string, params?: { success: Function, fail: Function, context?: any} ): void ``` - 定义:根据在线参数key获取number类型参数值,适合配置参数为:整数、浮点数 + 定义:普通分享,不需要处理回调的场景,例如分享到群、分享到好友,这些普通的分享,而不用处理成功/失败回调函数。 参数: ```javascript - key: string 必传 后台 ->【配置参数】配置的key - defaultVal: number 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值 + key: string 必传 功能点的分享/视频key(后台 ->【游戏数据】 ->【配置相关】->【分享/视频配置】配置的key) + + params: object 选传 扩展参数:success分享视频成功回调处理函数,fail分享视频失败回调处理函数,contex函数执行上下文 + { + success: ( from:number, ret: any | null ) => void, + error: ( from:number, error: object | null ) => void, + context: any + } + + from:此次分发成功推送类型 + from返回枚举值为: + 0:无视频无分享(后台配置分享开关(推送类型)or 应对审核分享关闭:配置参数share_unlock设置为0) + 1:推送同步分享 + 2:推送异步分享 + 3:推送视频 + + error:此次分发失败的错误消息 + error返回枚举值为: + { code: 1000, msg: '要看完视频哦!' }, + { code: 1001, msg: '加载视频广告失败!' }, + { code: 999, msg: '视频UID不存在!' }, + { code: 1002, msg: '加载视频广告失败!' }, + { code: 1003, msg: '正在观看视频中...' }, + { code: 1004, msg: '分享失败,请尝试发送至不同群!' }, + { code: 1005, msg: '别总骚扰这个群,换个群分享吧!' }, + { code: 1006, msg: '请分享到群哦!' }, + { code: 1007, msg: '分享到群才能领取更多~' }, + { code: 1008, msg: '分享失败,请尝试发送至不同群!' }, + { code: 1009, msg: '今日已达分享上限次数,请明日再来' } ``` - + 返回值: - + + ```javascript + void ``` - number + + 示例:下面只是api的简单演示,详细案例,请戳[详细使用示例](share.md#detail)。 + + 演示 + + ```javascript + // DiamondDoublePopwin.ts文件 + export default class DiamondDoublePopwin extends BaseView{ + protected addEvent() { + super.addEvent(); + // 免费领取双倍(应对微信审核,审核分享不能开放时候使用) + this.btnFree.on(Laya.Event.CLICK, this, this.onReward); + // 分享双倍 + this.btnShare.on(Laya.Event.CLICK, this, this.onReward); + // 视频双倍 + this.btnVideo.on(Laya.Event.CLICK, this, this.onReward); + } + + protected removeEvent() { + super.removeEvent(); + this.btnFree.off(Laya.Event.CLICK, this, this.onReward); + this.btnShare.off(Laya.Event.CLICK, this, this.onReward); + this.btnVideo.off(Laya.Event.CLICK, this, this.onReward); + } + + // 领取奖励操作 + private onReward(){ + PCSDK.shareVideo.dispatch( ShareVideoKeys.DiamondDouble.toString(), { + success: this.handleReward, + fail: this.handleError, + context: this + } ); + } + + // 分享/视频成功后回调处理函数:发奖励 + private handleReward(from: ShareVideoFrom, ret: any | null){ + // 分享成功、视频成功、无视频无分享 + } + + // 分享/视频失败后回调处理函数:弹出提示 + private handleError(from: ShareVideoFrom, error: any | null){ + // 返回错误,处理错误msg信息,自定义处理 + if( error ){ + wx.showToast({ + title: error.msg + }); + } + } + } + + // Enums.ts文件 + // 分享视频key枚举,每个key表示一个功能点 + enum ShareVideoKeys { + // 钻石双倍获取 + DiamondDouble = 'diamond_double', + // 失败获得双倍奖励 + FailRewardDouble = 'fail_reward_double' + } + + // 分享视频功能点最终处理方式 + enum ShareVideoFrom{ + None = 0, // 无视频无分享 + Share = 1, // 分享 + ShareAsync = 2, // 异步分享 + Video = 3, // 看视频 + } ``` - - 示例:[查看上面的示例代码](online.md#sample) - -3. **getParamsObj** + +3. ##### **getShareVideoType** ```javascript - PCSDK.online.getParamsObj( key: string, defaultVal?: any ): any + PCSDK.shareVideo.getShareVideoType( key: string ): number ``` - 定义:根据在线参数key获取object类型参数值,适合配置参数为:数组、json对象 - + 定义:根据分享视频key获取此次shareVideo模块推送的分享视频类型值:-1(无视频无分享:提审时返回)、0(推送同步分享)、1(推送异步分享)、2(推送看视频)、3(无视频则分享)、4(视频和分享)、5(分享积分);此api用于通过得到的类型值处理页面的ui状态(微信和QQ平台对按钮的icon有强制限制):显示视频icon、显示分享icon、既没有分享icon,也没有视频icon。 + 参数: - ```javascript - key: string 必传 后台 ->【配置参数】配置的key - defaultVal: any 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值 + key: string 必传 功能点的分享/视频key(后台 ->【游戏数据】 ->【配置相关】->【分享/视频配置】配置的key) ``` - + 返回值: - - ``` - object | array | null + + ```javascript + number + 返回值此次点击功能按钮触发的推送类型:-1(无视频无分享:提审时返回)、0(推送同步分享)、1(推送异步分享)、2(推送看视频)、3(无视频则分享)、4(视频和分享)、5(分享积分) + 分享视频类型枚举值如下: + // 推送类型:分享视频类型枚举 + enum ShareVideoType { + None = -1, // -1无分享无视频 + Share = 0, // 0分享 + ShareAysnc = 1, // 1异步分享 + ShareIntegral = 5, // 5分享积分 + Video = 2, // 2看视频 + VideoToShare = 3, // 3无视频则分享 + VideoAndShare = 4 // 4视频和分享(控制分享和视频两个按钮的显示) , + } ``` - - 示例:[查看上面的示例代码](online.md#sample) - -1. **getParamsString** - + + 示例:下面只是api的简单演示,详细案例,请戳[详细使用示例](share.md#detail)。 + ```javascript - PCSDK.online.getParamsString( key: string, defaultVal?: string ): string + // DiamondDoublePopwin.ts文件 + export default class DiamondDoublePopwin extends BaseView{ + protected addEvent() { + super.addEvent(); + // 免费领取双倍(应对微信审核,审核分享不能开放时候使用) + this.btnFree.on(Laya.Event.CLICK, this, this.onReward); + // 分享双倍 + this.btnShare.on(Laya.Event.CLICK, this, this.onReward); + // 视频双倍 + this.btnVideo.on(Laya.Event.CLICK, this, this.onReward); + } + + protected removeEvent() { + super.removeEvent(); + this.btnFree.off(Laya.Event.CLICK, this, this.onReward); + this.btnShare.off(Laya.Event.CLICK, this, this.onReward); + this.btnVideo.off(Laya.Event.CLICK, this, this.onReward); + } + + // 每次打开此popwin执行onOpen + protected onOpen(){ + super.onOpen(); + this.iniitRewardUI(); + } + + // 初始化/更新获得奖励按钮ui + private initRewardUI() { + let shareVideoType: ShareVideoType = PCSDK.shareVideo.getShareVideoType(ShareVideoKeys.DiamondDouble.toString()); + switch (shareVideoType) { + case ShareVideoType.Share: // 同步分享 + case ShareVideoType.ShareAysnc: // 异步分享 + case ShareVideoType.ShareIntegral: // 分享积分 + this.btnFree.visible = false; + this.btnShare.visible = true; + this.btnVideo.visible = false; + break; + + case ShareVideoType.Video: // 推送视频 + case ShareVideoType.VideoToShare: // 无视频则分享 + // 视频ui状态 + this.btnFree.visible = false; + this.btnShare.visible = false; + this.btnVideo.visible = true; + break; + + default: // 无视频和无分享 + // 既不显示分享ui又不显示视频ui,直接领奖ui状态 + this.btnFree.visible = true; + this.btnShare.visible = false; + this.btnVideo.visible = false; + break; + } + } + + // 领取奖励操作 + private onReward(){ + PCSDK.shareVideo.dispatch( ShareVideoKeys.DiamondDouble.toString(), { + success: this.handleReward, + fail: this.handleError, + context: this + } ); + } + + // 分享/视频成功后回调处理函数:发奖励 + private handleReward(from: ShareVideoFrom, ret: any | null){ + // 分享成功、视频成功、无视频无分享 + } + + // 分享/视频失败后回调处理函数:弹出提示 + private handleError(from: ShareVideoFrom, error: any | null){ + // 返回错误,处理错误msg信息,自定义处理 + if( error ){ + wx.showToast({ + title: error.msg + }); + } + } + } + + // Enums.ts文件 + // 分享视频类型(与后台一一对应) + export enum ShareVideoType { + None = -1, // -1无分享无视频 + Share = 0, // 0同步分享 + ShareAysnc = 1, // 1异步分享 + ShareIntegral = 5, // 5分享积分 + Video = 2, // 2看视频 + VideoToShare = 3, // 3无视频则分享 + VideoAndShare = 4, // 4视频和分享(控制分享和视频两个按钮的显示) + } + + // 分享视频key枚举,每个key表示一个功能点 + enum ShareVideoKeys { + // 钻石双倍获取 + DiamondDouble = 'diamond_double', + // 失败获得双倍奖励 + FailRewardDouble = 'fail_reward_double' + } + + // 分享视频功能点最终推送类型 + enum ShareVideoFrom{ + None = 0, // 无视频无分享 + Share = 1, // 分享 + ShareAsync = 2, // 异步分享 + Video = 3, // 看视频 + } + ``` +
+ 下面演示dispatch和getShareVideoType两个api的完整使用,Laya引擎开发: - 定义:根据在线参数key获取string类型参数值,适合配置参数为:字符串、json字符串 - - 参数: + 页面功能点按钮做三个状态: + 1、看视频状态(显示视频icon) + + 2、分享状态(显示分享icon) + + 3、直接领奖(没有icon,审核状态) + + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_027_1.png "🔍点击查看大图") + + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_027_2.png "🔍点击查看大图") + + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_027_3.png "🔍点击查看大图") + + ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_027_4.png "🔍点击查看大图") + + 例如,一个领取钻石双倍,页面的按钮ui通过下面的方式进行切换 + + 1、页面做三个按钮:视频icon按钮、分享icon按钮、直接领取按钮 + + 2、进入页面根据配置的key获取类型,显示对应类型ui:调用下面的initRewardUI(可随意命名) + + 3、分享或者视频后,SDK会发送一个tactic.update的消息过来,使用PCSDK.event.add注册监听,PCSDK.event.remove移除监听(PCSDK.event详细了解请查看[事件模块](event.md)),监听事件处理下一次推送显示ui状态:执行一下initRewardUI。 + + 4、给三个按钮都注册事件:onReward + ```javascript - key: string 必传 后台 ->【配置参数】配置的key - defaultVal: string 选传 默认值 后台没有配置此key,或在线配置参数数据拉取失败,则返回此值 + // DiamondDoublePopwin.ts文件 + export default class DiamondDoublePopwin extends BaseView { + protected addEvent() { + super.addEvent(); + // 免费领取双倍(应对微信审核,审核分享不能开放时候使用) + this.btnFree.on(Laya.Event.CLICK, this, this.onReward); + // 分享双倍 + this.btnShare.on(Laya.Event.CLICK, this, this.onReward); + // 视频双倍 + this.btnVideo.on(Laya.Event.CLICK, this, this.onReward); + // PCSDK.event.add注册监听SDK发送的消息:tactic.update,更新获得奖励按钮ui + PCSDK.event.add('tactic.update', this.initRewardUI, this); + } + + protected removeEvent() { + super.removeEvent(); + this.btnFree.off(Laya.Event.CLICK, this, this.onReward); + this.btnShare.off(Laya.Event.CLICK, this, this.onReward); + this.btnVideo.off(Laya.Event.CLICK, this, this.onReward); + // PCSDK.event.remove移除监听SDK发送的消息:tactic.update + PCSDK.event.remove('tactic.update', this.initRewardUI, this); + } + + // 每次打开此popwin执行onOpen + protected onOpen(){ + super.onOpen(); + // 界面打开 + this.initRewardUI(); + } + + // 领取奖励操作 + private onReward(){ + PCSDK.shareVideo.dispatch( ShareVideoKeys.DiamondDouble.toString(), { + success: this.handleReward, + context: this + } ) + } + + // 分享/视频成功后回调处理函数:发奖励 + private handleReward(from: ShareVideoFrom, ret: any | null){ + // 分享成功、视频成功、无视频无分享 + } + + // 分享/视频失败后回调处理函数:弹出提示 + private handleError(from: ShareVideoFrom, error: any | null){ + // 返回错误,处理错误msg信息,自定义处理 + if( error ){ + wx.showToast({ + title: error.msg + }); + } + } + + // 初始化/更新获得奖励按钮ui + private initRewardUI() { + let shareVideoType: ShareType = PCSDK.shareVideo.getShareVideoType(ShareVideoKeys.DiamondDouble.toString()); + switch (shareVideoType) { + case ShareVideoType.Share: // 同步分享 + case ShareVideoType.ShareAysnc: // 异步分享 + case ShareVideoType.ShareIntegral: // 分享积分 + // 分享ui状态 + this.stat_share.play(0,false); + // 等同于 + // this.btnFree.visible = false; + // this.btnShare.visible = true; + // this.btnVideo.visible = false; + break; + + case ShareVideoType.Video: // 视频 + case ShareVideoType.VideoToShare: // 无视频则分享 + // 视频ui状态 + this.stat_video.play(0,false); + // 等同于 + // this.btnFree.visible = false; + // this.btnShare.visible = false; + // this.btnVideo.visible = true; + break; + + default: // 无视频和无分享 + // 既不显示分享ui又不显示视频ui,直接领奖ui状态 + this.stat_free.play(0,false); + // 等同于 + // this.btnFree.visible = true; + // this.btnShare.visible = false; + // this.btnVideo.visible = false; + break; + } + } + } + + // Enums.ts文件 + // 分享视频类型(与后台一一对应) + export enum ShareVideoType { + None = -1, // -1无分享无视频 + Share = 0, // 0同步分享 + ShareAysnc = 1, // 1异步分享 + ShareIntegral = 5, // 5分享积分 + Video = 2, // 2看视频 + VideoToShare = 3, // 3无视频则分享 + VideoAndShare = 4, // 4视频和分享(控制分享和视频两个按钮的显示) + } + + // 分享视频key枚举,每个key表示一个功能点 + enum ShareVideoKeys { + // 钻石双倍获取 + DiamondDouble = 'diamond_double', + // 失败获得双倍奖励 + FailRewardDouble = 'fail_reward_double' + } + + // 分享视频功能点最终推送类型 + enum ShareVideoFrom{ + None = 0, // 无视频无分享 + Share = 1, // 分享 + ShareAsync = 2, // 异步分享 + Video = 3, // 看视频 + } ``` - 返回值: - ``` - string - ``` - 示例:[查看上面的示例代码](online.md#sample) +#### **终章:** + +这个模块的内容点比较多,接入的注意事项也比较多,望接入者细度使用说明和理解示例意图。 - \ No newline at end of file +噗嗤游戏的小伙伴在开发公司内部游戏中使用此模块,简单封装了SDK分享视频模块的几个通用方法,提供开发者参考,**[点击下载](https://dep.miso-lab.com/sdkword/sdk-share-tools-1.0.0.zip)**。 diff --git a/stat_active.md b/stat_active.md index dd696cb..683bd14 100644 --- a/stat_active.md +++ b/stat_active.md @@ -26,7 +26,7 @@ | **名称** | **功能说明** | | ------------------------ | ------------------------------------------------------------ | | PCSDK.stat.loadingFinish | 加载游戏资源完成时打点,不是微信代码包白屏加载完成,游戏加载完成游戏ui界面图、json资源 | -| PCSDK.stat.setLogind | 设置SDK必须要使用的用户id、第一次创建角色的注册时间,游戏接入方登录游戏服务器后调用 | +| PCSDK.stat.setLogind | 设置SDK必须要使用的用户id、第一次创建角色的注册时间(单位秒),游戏接入方登录游戏服务器后调用 | | PCSDK.stat.active | 用户活跃/新增注册上报,切记在setLogind设置需要的信息过后使用(设置setLogind后此api不限于使用位置),不然会导致新增注册数据统计异常 | @@ -82,7 +82,7 @@ PCSDK.stat.setLogind( data: object ): void ``` - 定义:游戏成功登录到服务器后得到用户信息(用户id和用户第一次注册时间),设置SDK必需的用户信息 + 定义:游戏成功登录到服务器后得到用户信息:用户id和用户第一次注册时间(时间戳,单位秒),设置SDK必需的用户信息 参数: @@ -90,7 +90,7 @@ data: object { userId: string | number 必传, 用户唯一标识id - regTime: number 必传,用户第一次创建角色的注册时间戳 + regTime: number 必传,用户第一次创建角色的注册时间(时间戳,单位秒) } ``` @@ -102,7 +102,7 @@ let { user_id, user_reg_time } = data; PCSDK.stat.setLogind({ userId: data.user_id, - regTime: data.user_reg_time + regTime: data.user_reg_time // 用户第一次注册时间,时间戳,单位秒 }); }); ``` @@ -129,8 +129,8 @@ let { user_id, user_reg_time } = data; // 设置用户信息 PCSDK.stat.setLogind({ - userId: data.user_id, - regTime: data.user_reg_time + userId: data.user_id, // 用户id + regTime: data.user_reg_time // 用户第一次注册时间,时间戳,单位秒 }); // 用户活跃注册打点 PCSDK.stat.active(); @@ -149,8 +149,8 @@ let { user_id, user_reg_time } = data; // 设置用户信息 PCSDK.stat.setLogind({ - userId: data.user_id, - regTime: data.user_reg_time + userId: data.user_id, // 用户id + regTime: data.user_reg_time // 用户第一次注册时间,时间戳,单位秒 }); // 进入home主页场景 SceneManager.I.switchScene(HomeScene); diff --git a/stat_ads.md b/stat_ads.md index acabbf3..66635b1 100644 --- a/stat_ads.md +++ b/stat_ads.md @@ -6,19 +6,19 @@ 交叉推广位是在游戏中展示其他游戏,用户点击某个游戏跳转进入游戏,达到共享用户的目的。 -噗嗤游戏提供了3种类型的交叉推广位,后台可对交叉推广位进行配置管理,对交叉推广位各项指标分析阅览。 +噗嗤游戏提供了3种类型的交叉推广位,后台可对交叉推广位进行配置管理,对交叉推广位各项指标分析查看。 **3种广告类型:交叉悬浮广告框、交叉抽屉式广告位、交叉猜你喜欢广告位** -1. 交叉悬浮广告框,放置到首页、结算页 +1. 交叉悬浮广告框,推荐位置:首页、结算页 ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_013.png "🔍点击查看大图") -2. 交叉抽屉式广告位,放置到首页、结算页 +2. 交叉抽屉式广告位,推荐位置:首页、结算页 ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_014.png "🔍点击查看大图") -3. 交叉猜你喜欢广告位,推荐放置到结算页 +3. 交叉猜你喜欢广告位,推荐位置:结算页 ![sdk文件目录结构](https://dep.miso-lab.com/sdkword/sdk_015.png "🔍点击查看大图") @@ -86,7 +86,7 @@ | --------------------------- | ------------------------------------------------------------ | | PCSDK.stat.bannerList | 根据类型获取对应类型交叉广告列表,目前SDK支持3种类型:40(交叉悬浮广告框)、70(交叉抽屉式广告位)、50(交叉猜你喜欢广告位) | | PCSDK.stat.bannerNavigateTo | 交叉推广位点击跳转到对应appid的游戏,该接口封装了小游戏的跳转功能(navigateToMiniProgram) | -| PCSDK.stat.addExposure | 交叉推广位一条或者多条广告展示,添加曝光数据,SDK在onHide时候上报数据到后台 | +| PCSDK.stat.addExposure | 交叉推广位一条或者多条广告展示,添加曝光数据,SDK内部会在onHide时候上报数据到后台 | diff --git a/stat_event.md b/stat_event.md index 9a20d9a..31759df 100644 --- a/stat_event.md +++ b/stat_event.md @@ -4,7 +4,7 @@ #### **简介** -自定义事件是噗嗤游戏为开发者提供的自助分析功能。用户在小游戏上的行为,我们定义为事件。 游戏的任意位置需要统计触达人数我们通用可以使用事件来进行统计,后台进行分析后阅览。 +自定义事件是噗嗤游戏为开发者提供的自助分析功能:事件触发去重人数、次数等信息。游戏的任意位置需要统计触达人数、次数等都可以使用事件来实现,后台提供分析数据可查看,并不局限于用户的行为事件。 #### **后台使用** diff --git a/stat_level.md b/stat_level.md index 00afe8a..bbac1c8 100644 --- a/stat_level.md +++ b/stat_level.md @@ -29,7 +29,7 @@ 1. #### **logLevelRelive** ```javascript - PCSDK.stat.logLevelRelive(levelId: string | number , opts?: { attr: number } ): void + PCSDK.stat.logLevelRelive(levelId: string | number , params?: { attr?: number, ext?: string } ): void ``` 定义:关卡复活成功数据上报 @@ -39,9 +39,10 @@ ``` levelId: string | number 必传,游戏关卡id - opts: object 选传,扩展参数,目前只支持传递一个属性: attr + params: object 选传,关卡需要的其他参数,目前只支持传递2个属性: attr、ext { - attr: number 战斗属性(例如:关卡战斗中所使用的枪支等级) + attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级) + ext: string 选传 扩展参数:key1=val1&key2=val2的格式 } ``` @@ -50,7 +51,7 @@ 2. #### **logLevelHide** ```javascript - PCSDK.stat.logLevelHide(levelId: string | number , opts?: { attr: number } ): void + PCSDK.stat.logLevelHide(levelId: string | number , params?: { attr?: number, ext?: string } ): void ``` 定义:监听游戏战斗界面onHide时上报关卡的数据。什么是界面onHide?[请详读微信小游戏wx.onHide](https://developers.weixin.qq.com/minigame/dev/api/base/app/life-cycle/wx.onHide.html) 注意事项: @@ -70,9 +71,10 @@ ``` levelId: string | number 必传,游戏关卡id - opts: object 选传,扩展参数,目前只支持传递一个属性: attr + params: object 选传,关卡需要的其他参数,目前只支持传递2个属性: attr、ext { attr: number 战斗属性(例如:关卡战斗中所使用的枪支等级) + ext: string 选传 扩展参数:key1=val1&key2=val2的格式 } ``` [点此查看完整示例](stat_level.md#sample)如何添加关卡onHide打点代码 @@ -80,7 +82,7 @@ 3. #### **logLevelFail** ```javascript - PCSDK.stat.logLevelFail(levelId: string | number , opts: { ctime: number, first: number, attr?: number } ): void + PCSDK.stat.logLevelFail(levelId: string | number , params: { ctime: number, first: number, attr?: number, ext?: string } ): void ``` 定义:关卡失败数据上报 @@ -90,11 +92,12 @@ ``` levelId: string | number 必传,游戏关卡id - opts: object 必传,扩展参数,目前只支持传递一个属性: attr + params: object 必传,关卡需要的其他参数 { ctime: number 必传 关卡耗时 = 当前时间-关卡进入时间,单位秒 first: number 必传 是否第一次体验关卡,1是,0否 attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级) + ext: string 选传 扩展参数:key1=val1&key2=val2的格式 } ``` [点此查看完整示例](stat_level.md#sample)如何添加关卡失败打点代码 @@ -102,7 +105,7 @@ 4. #### **logLevelWin** ```javascript - PCSDK.stat.logLevelWin(levelId: string | number , opts: { ctime: number, first: number, attr?: number } ): void + PCSDK.stat.logLevelWin(levelId: string | number , params: { ctime: number, first: number, attr?: number, ext?: number } ): void ``` 定义:关卡成功通关数据上报 @@ -112,11 +115,12 @@ ``` levelId: string | number 必传,游戏关卡id - opts: object 必传,扩展参数 + params: object 必传,关卡需要的其他参数 { ctime: number 必传 关卡耗时 = 当前时间-关卡进入时间,单位秒 first: number 必传 是否第一次体验关卡,1是,0否 attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级) + ext: string 选传 扩展参数:key1=val1&key2=val2的格式 } ```
完整示例,以上四个接口使用场景: -- libgit2 0.21.0