- 小程序整体流程
设计IdeaFrom 给你1个亿是否是自己熟悉的领域?是否足够的小?功能是否足够的专注?是否有孤注一掷的思想?是否分析过行业的上下游?是否能经过反复的推敲?是否能精确计算出单价、成本、毛利、何时赚钱?是否承认idea产生的过程是不可琢磨的?是否现在是最合适的时机?竞品分析是否有竞品,它的优缺点是什么原型sketch组件库、组件预览PC端适配适老化适配商业模式广告电商会员开发注册申请账号安装开发工具设置团队开发(页面计算工作量)基础:js、css组件使用,较多逻辑开发上架预览上传代码提交审核发布运营目标场景(为哪些人提供哪些连接/服务)指标及定义数据分析留存率、DAU、PV运营招式行业运营平台化:连锁加盟、传统经销渠道供应链:服装定制案例合作伙伴:批发行业案例流量私域流量地推活动支付:收款码案例、优惠券朋友圈广告一物一码微信生态公众号联动群及KOL朋友圈搜一搜+好物圈效果评估
2022-09-11 - 【实战记录】关于实现聊天室语音播放问题的一次曲线救国的记录
需求背景: 该项目为互联网医院小程序,其中重要的功能为在线问诊,需要建立医患聊天的功能,故本项目集成了融云sdk即时通讯单聊功能。 问题: 接了融云的sdk后,发文字,图片及自定义消息都是那么的丝滑,但在上线阶段,发现微信小程序真机中部分语音播放不了;通过分析定位,发现由于 wx.createInnerAudioContext(),部分语音在ios真机中会报INNERERRCODE:-11800, ERRMSG:这项操作无法完成。通过和融云技术一顿沟通,也在查找社区文档后发现,早在2021年3月份,有人也提了这个问题,也没有找到官方的相关反馈,并且我自己提了bug(https://developers.weixin.qq.com/community/develop/doc/0004224a4c09c0553ddd1c09657800),也没有下文了。没办法,项目上线迫在眉睫,只能换其他技术替代方案了 解决方案: 为兼容wx.createInnerAudioContext()报错,在onError时,保存需要通过uni.getBackgroundAudioManager()来播放的音频列表 this.audio = uni.createInnerAudioContext(); this.audio.src = this.src; this.audio.onPlay(() => { this.audio.isPlaying = true; this.animate = true; this.timer = setInterval(() => { this.animate = false setTimeout(() => { this.animate = true }, 50) }, 1250); this.audio.onStop(() => { this.audio.isPlaying = false; this.animate = false; this.timer && clearInterval(this.timer) }) this.audio.onEnded(() => { this.audio.isPlaying = false; this.animate = false; this.timer && clearInterval(this.timer) }) }) this.audio.onError((err) => { this.$bgAudioList.push({ messageUId: this.messageUId, animate: false, }) // 所有需要通过背景音乐播放的存入全局 this.useBackgroundAudioManager = true; }) this.$audioList.push(this.audio)//所有实例加入全局变量 效果如下: [图片]
2022-05-06 - 小程序背景音乐
js: const bgMusic = wx.getBackgroundAudioManager();//背景音频 Page({ /** * 页面的初始数据 */ data: { musicArr:[], // 音乐播放器 bgAudio:{ index:0, isOpen: false,//播放开关 starttime: '00:00', //正在播放时长 duration: '00:00', //总时长 src:"", title:"", }, }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let that=this; that.data.musicArr=[{ id:1, name:"红色基因绿色源泉", src:"/store/activity/audio/mpeg/41FFCFBD5494DFE67FE7E22AC54EEB282021092926031664", duration:"04:20" },{ id:2, name:"我和我的祖国", src:"/store/activity/audio/mpeg/D342C12632FC462D142FEA8A80677D872021092941031658", duration:"03:08" }]; that.setData({ musicArr:that.data.musicArr, }) that.getMusic(0); }, getMusic(index){ this.data.bgAudio.index=index; this.data.bgAudio.duration=this.data.musicArr[index].duration; this.data.bgAudio.src=this.data.musicArr[index].src; this.data.bgAudio.title=this.data.musicArr[index].name; this.setData({ bgAudio:this.data.bgAudio }) }, // 播放 ButtonPlay: function () { // wx.showLoading({ // title: '加载中...', // }) var that = this; //bug ios 播放时必须加title 不然会报错导致音乐不播放 bgMusic.title = that.data.bgAudio.title; bgMusic.epname = that.data.bgAudio.title; bgMusic.src = that.data.bgAudio.src; that.data.bgAudio.isOpen=true; bgMusic.onTimeUpdate(() => { //bgMusic.duration总时长 bgMusic.currentTime当前进度 var duration = bgMusic.duration; var offset = bgMusic.currentTime; var currentTime = parseInt(offset); var min = "0" + parseInt(currentTime / 60); var max = parseInt(duration); var sec = currentTime % 60; if (sec < 10) { sec = "0" + sec; }; var starttime = min + ':' + sec; /* 00:00 */ that.data.bgAudio.offset=currentTime; that.data.bgAudio.starttime=starttime; that.data.bgAudio.max=max; that.setData({ bgAudio:that.data.bgAudio }) console.log("index.js",starttime) }) //播放结束 bgMusic.onEnded(() => { that.data.bgAudio.starttime='00:00'; that.data.bgAudio.isOpen=false; that.data.bgAudio.offset=0; that.setData({ bgAudio:that.data.bgAudio }) bgMusic.stop(); // 循环播放 播放完最后一条循环播放 if(that.data.bgAudio.index { console.log("播放中index.js") that.getHits(that.data.musicArr[that.data.bgAudio.index].id); that.data.bgAudio.isOpen=true; that.setData({ bgAudio:that.data.bgAudio }) }) }, //暂停播放 ButtonPause(){ var that = this bgMusic.pause(); that.data.bgAudio.isOpen=false; that.setData({ bgAudio:that.data.bgAudio }) }, // 进度条拖拽 sliderChangeBj(e) { var that = this var offset = parseInt(e.detail.value); bgMusic.play(); bgMusic.seek(offset); that.data.bgAudio.isOpen=true; that.setData({ bgAudio:that.data.bgAudio }) }, }) wxss: /* 音频播放器 */ .width{ width:92%; margin: auto; } .flex{ display: flex; align-items: center; flex-wrap: nowrap; } .flex1{ flex:1; } .audio-box{ height:190rpx; background: #fff; padding:30rpx; margin-top:30rpx; border-radius: 20rpx; } .audio-left{ width:64rpx; height:64rpx; } .audio-right{ padding-left:30rpx; } .audio-title{ font-size: 30rpx; font-weight: 400; color: #333333; } .audio-box slider{ padding:0; margin:0; margin-top:10rpx; } wx-slider .wx-slider-handle-wrapper{ height:10rpx; border-radius: 10rpx; } .audio-time{ font-size: 24rpx; font-weight: 400; color: #999999; } wxml <!-- 音频播放器 --> <view class="audio-box width flex"> <text catchtap="{{bgAudio.isOpen? 'ButtonPause':'ButtonPlay'}}">{{bgAudio.isOpen? '暂停':'播放'}}</text> <!-- <image class="audio-left" src="{{bgAudio.isOpen? imagesSrc.icon33:imagesSrc.icon13}}" catchtap="{{bgAudio.isOpen? 'ButtonPause':'ButtonPlay'}}"></image> --> <view class="audio-right flex1"> <view class="audio-title line1">{{bgAudio.title}}</view> <slider bindchange="sliderChangeBj" block-size="14" block-color="#E0C999" step="1" value="{{bgAudio.offset}}" max="{{bgAudio.max}}" activeColor="#E0C999" /> <view class="audio-time flex"> <view class="flex1">{{bgAudio.starttime}}</view> <view>{{bgAudio.duration}}</view> </view> </view> </view> 效果图: [图片]
2023-07-03 - 线上小程序userNickName和userAvatarUrl都拿不到,云函数中openId拿不到?
线上小程序问题: [图片] [图片] 本地开发环境好着 [图片] 线上云函数调用日志0更新,没操作数据库 [图片] 本地调用完全ok [图片] 线上和本地前端代码、云函数全都一模一样
2022-02-22 - 关于微信安卓端网页字体适配的通知
为了提供给用户更好的阅读体验,微信安卓版 7.0.10 版本起,网页的字体会跟随微信设置里的字体大小更改而变化。 若调整字体变大或变小后,部分未适配网页的排版会出现显示错乱,建议未进行适配的开发者尽快完成对“ 字体大小” 的适配。 查看网页在字体不同大小下展示效果的方法: 方法1:"设置">"通用">“字体大小">进行字体大小修改后查看对应网页显示效果。 方法2:在微信内访问对应网页右上角”…">底部菜单栏选择调整字体">进行字体大小修改后查看对应网页显示效果。 另外,对于现有的显示问题,我们提供以下方案让开发者临时将字体还原标准大小。同时,开发者可以在页面中提示用户在右上角”…”更多菜单中修改字体到合适的大小。 下列方案可以将字体还原标准大小,但我们仍然建议后续做字体适配来提高用户的阅读体验。 『字体还原标准大小』方案: 我们提供了一个 JSAPI 用于设置字体大小,只需将字体大小等级设置为 2 (标准)即可,代码示例如下: document.addEventListener("WeixinJSBridgeReady", function () { WeixinJSBridge.invoke("setFontSizeCallback", { fontSize: '2' }); }, false); 此外,若页面是用 rem 单位进行排版的(目前该做法更容易导致页面不可用),可以反向重置 font-size 的数值达到还原字体标准大小的目的,此方法在效果上也比较理想。代码示例如下: // 以下代码思路来源网络。同时代码放在 body 标签开头位置效果最佳 var $dom = document.createElement('div'); $dom.style = 'font-size: 10px'; document.body.appendChild($dom); // 计算出放大后的字体 var scaledFontSize = parseInt(window.getComputedStyle($dom, null).getPropertyValue('font-size')); document.body.appendChild($dom); // 计算原字体和放大后字体的比例 var scaleFactor = 10 / scaledFontSize; // 取 html 元素的字体大小 var originRootFontSize = parseInt(window.getComputedStyle(document.documentElement, null).getPropertyValue('font-size')); // 由于设置 font-size 后实际会变大,故 font-size 需设置为更小一级 document.documentElement.style.fontSize = originRootFontSize * scaleFactor * scaleFactor + 'px';
2020-01-14