- 小程序生成圣诞头像 Plus
背景 今天中午在社区看到一篇要圣诞帽的帖子,于是下午抽了点时间写了两个demo发一篇文章吧。 实际上的内心OS:这么基础的东西,还需要来社区要?这届开发者那么菜的吗? 简易版 国庆的时候一波要小国旗的热度火了,当时在群里花了半小时写了个demo,没有发文章,这次改成简易版的圣诞头像框一起发出来吧。 实现步骤 1、获取用户头像 …略 (这个要是不会就别写往下看了) 2、将头像绘制到canvas中 获取到的头像为网络地址,小程序的canvas不支持网络图片,所以需要先使用 [代码]wx.getImageInfo[代码] 或 [代码]wx.downloadFile[代码] 获取一个本地图片地址才可以绘制到canvas中,然后再绘制一个头像框就ok了 代码 [代码]wx.getImageInfo({ src: 头像URL, success: result => { let ctx = wx.createCanvasContext('head') ctx.drawImage(result['path'], 0, 0, 300, 300) ctx.drawImage(头像框图片地址, 0, 0, 300, 300) ctx.draw() } }) [代码] 3、将canvas导出为图片并保存到相册 使用 [代码]wx.canvasToTempFilePath[代码] 将canvas导出为图片,然后调用 [代码]wx.saveImageToPhotosAlbum[代码] 将图片保存到相册 代码 [代码]wx.canvasToTempFilePath({ x: 0, y: 0, width: 300, height: 300, destWidth: 300, destHeight: 300, canvasId: 'head', success: result => { wx.saveImageToPhotosAlbum({ filePath: result.tempFilePath, success: () => { wx.showToast({ title: '保存成功' }) } }) } }) [代码] 进阶版 真正的圣诞头像一般是在原有的头像上加一顶圣诞帽,每个人的头像都是不一样的,这样就需要对圣诞帽进行调整大小、旋转等操作,这就需要一些canvas手势操作,在GitHub上随便找了个轮子 点击查看。 这个轮子文档中的一些方法好像并未实现 实现步骤 步骤和简易版大致相同,核心代码轮子里都实现了,我只是调用,这里略… [图片] 代码片段 https://developers.weixin.qq.com/s/lk5QFRmQ7DdL 图片素材均来自网络,仅供学习交流,严禁用于商业用途! 本文内容及评论未经允许,禁止任何形式的转载与复制(代码可在程序中使用)
2019-12-24 - 经营用户流量
产品上线是开始,通过运营让更多用户找到,用起来,留下来,才可以达到产品设计初衷。怎么可以更好的运营产品是有发方法论的,下面是我对运营的部分理解-经营用户流量。 什么是经营用户流量? 通俗意义上的运营,比如活动运营、用户运营、产品运营等,这些所有的细分岗位做的事情,就是经营用户流量。其实就是结合用户生命周期管理和AARRR模型所做的所有事情。 用户的生命周期:投入期、成长期、成熟期、休眠期、流失期。 投入期:找到用户 这个阶段重要的一个指标是新增。 运营一款产品的第一步,毫无疑问是获取用户,也就是大家通常所说的推广。如果没有用户,就谈不上运营。 运营的资源或者说公司的资源是有限的,获取海量用户固然美好,但是现实往往很残酷。我们需要找到最想要最精准的用户,然后用最少的资源把他们带到产品里。针对小程序之间的换量是一个快速实现增长的方式。 成长期:激活用户 这个阶段重要的一个指标是日活。 这里其实就是寻找增长黑客理论中的“啊哈”时刻,让用户迅速感知到产品价值,从新用户转化成活跃用户。 比如电商平台,成功完成一笔订单可能是它的“啊哈”时刻,那平台在新用户的转化激活层面会做什么?商家运营会要求商家给一定的折扣,活动运营会做一些新用户的促销活动。平台本身会提供一些门槛较低的优化券来促成用户转化。这些全部是运营的负责范围。 成熟期:留存、变现 这个阶段重要的指标是用户留存,次日留存、7日留存、30日留存,不同产品不同场景,对留存有不同要求。 找到用户的“啊哈”时刻,用各种运营和产品手段促使用户完成更多这样的行为。 比如电商,将用户进行分层,利用短信push、优惠券、促销活动等各种手段提升用户的复购率。 休眠/流失期:用户唤醒/召回 这个阶段需要定义流失用户特征,建立用户流失预测模型和用户唤醒召回策略等。 以游戏为例,用户若连续一周未登录或未充值则需要预警。用户客服可以依次通过游戏内消息、QQ、短信、电话等形式回访,和用户进行沟通。 因为小程序的特殊性,用户的留存很关键,以获客为中心的增长模式是无意义成长之轮。例如:小程序的留存是5%,500万用户实际上只有25万真实留存下来的用户,这样前期的获客投入效果会大打折扣,获客成本居高下。
2019-10-16 - A/B测试
前言 当小程序需要有两个版本或者要添加两组不同的广告时,A/B测试就可以派上用场了。可是要怎么使用AB测试呢?本文介绍使用Testin做AB测试。 创建实验 在Testin云测中注册一个账号,如果已经有了,那直接登录就可以啦。 创建应用:支持多种平台的应用创建哦!记得要将关键的AppKey复制下来。 创建实验:首先选择模式,选择好模式以后就可以填写自己的实验信息了。实验名称建议是与实验内容有关的名称,这样会方便后期的使用。 填写变量:变量一定要确定了再填写,因为实验创建完成后就不能修改了(ps:可以编辑版本一的内容哦)。 编辑指标:一定要计算好自己需要多少指标,因为指标一旦建立就不能更改了~指标创建完成了就意味着实验创建完成了。 开始实验:记得要给两个版本进行流量分配哦! 开发工具中使用实验 在libs文件夹中导入A/B测试对应的js文件,这个文件可以在testin网站中找到哦~然后在app.js文件中引用该js文件,并将已复制的AppKey写入页面。代码如下: [代码] var testinAB = require('libs/testin-ab-weapp-v3.1.1.js'); var appKey = "TESTIN_wf6a6fbb8d35235"; [代码] 在globalData中定义一个变量,变量名要与实验中的变量名相同。 在onLaunch()方法中调用testAB方法。以下是testAB方法的代码: [代码] testAB: function (cb) { var that = this; if (cb) { testCb = cb; return; } testinAB.init(appKey); //初始化 testinAB.setDefVars({ //设置默认值 testMoreTools: 1, }); testinAB.getVars(function (vars) { //将实验变量testMoreTools保存到全局数据versionTest中 that.globalData.versionTest = vars.get('testMoreTools'); if (testCb) { //testAB的回调 testCb(); } }); }, [代码] 在需要A/B测试的页面中获取全局变量。先在data中声明该全局变量versionTest,然后在onLoad方法中加载全局变量的值,代码如下: [代码] if (app.globalData.versionTest) { that.setData({ versionTest: app.globalData.versionTest, }) } else { app.testAB(function () { that.setData({ versionTest: app.globalData.versionTest, }) }); } [代码] 在wxml页面根据全局变量的值选择是显示A还是B的内容。 [代码] <view bindtap='navigateToMini'> <view class='detail-info' wx:if="{{versionTest == 1}}">文案A。</view> <view class='detail-info' wx:else>文案B。</view> </view> [代码] A/B测试需要一个回馈函数:testinAB.track(‘conventA’, 1);这里的conventA是在实验中创建的一个指标,testinAB会自动获取你所点击的是哪一个版本从而在相应的指标中的版本上加1。如果是跳转页面,要在track中写一个回调函数声明你要跳转的是哪个页面。如果是navigator小程序跳转就不需要了。代码如下: [代码] navigateToMini: function() { testinAB.track('conventA', 1, function () { window.location.href = '跳转地址' }); }) [代码] 所有的步骤都完成之后就可以进行A/B测试了,如果测试成功network中会返回一个sendLog方法,如果没有,那就说明测试不可用了。 以上就是我对A/B测试的小总结,希望会对你有所帮助。
2019-03-18