关于apicloud:使用APICloud-AVM多端框架开发课程表功能

一、成果展现 二、性能实现的思路本我的项目基于APICloud的AVM多端框架编写,因而须要想方法去结构特定数据、而后再扭转数据,本我的项目外围业务就是课程数据的解决,难点就是课表的增加。 我的项目次要针对大学课表进行设计,课程很多中央存在不确定性,如课程周次数可能间断也可能不间断、上课工夫可能1-2节也可能一整天、上课教室也可能不一样,因而课程的数据结构如下图。 后端须要提供以后周、以后周课程数据、增加课程等接口,当然课程数据查问是比较复杂的,这里就不讲。前端次要是将课表信息显示在指定地位,数据比较简单。 1、课程列表页面 (1)以后周课程原始数据构造 这个数据须要再重组,因为须要将课程摆放到指定地位,必须晓得间隔顶部间隔以及本身高度。能够通过上课工夫jie这个参数获取height,top。 let data = [{ 'name': '大数据可视化技术', 'room': '机房C414', 'weekday': '3', 'bg': '2', 'jie': '3-4', 'top': '140px', 'height': '140px' }] 横向分为8份,每份宽度12.5%,高度70px,默认能够显示13节课。课程背景默认有7种款式,星期对应的是left参数也有7种款式,上课节次对应top参数有12种款式具体css如下: .bg-1 { background: linear-gradient(#facea8, #fe8979)}.bg-2 { background: linear-gradient(#dfc3fe, #90c5fb)}.bg-3 { background: linear-gradient(#9deef5, #68e1b5)}.bg-4 { background: linear-gradient(#eeba93, #dd65c7)}.bg-5 { background: linear-gradient(#e6f6c9, #68e1b5)}.bg-6 { background: linear-gradient(#dfc3fe, #dd65c7)}.bg-7 { background: linear-gradient(#c8e65f, #7abafb)}.week-1 {left: 12.5%;}.week-2 {left: 25%;}.week-3 {left: 37.5%;}.week-4 {left: 50%;}.week-5 {left: 62.5%;}.week-6 {left: 75%;}.week-0 {left: 87.5%;}每一门课程都是用相对定位,宽度雷同,依据上课工夫决定高度、地位代码示意如下 ...

June 7, 2022 · 6 min · jiezi

关于apicloud:使用APICloud-AVM框架实现App导航栏菜单

成果展现 APICloud的AVM官网框架中有一个 frame-group的组件,在此组件的根底上,将栏目导航中view标签换成了 scroll-view标签,并设置成容许横向滚动。 1、批改了标签的款式,以满足我的项目须要,其余开发者可依据我的项目具体要求进行款式的批改。 2、计算向右滚动的间隔,实现流动frame-group中滑动页面的同时,导航栏也跟着向右滑动。 要点: 1、每个栏目的宽度要用百分比,因为不同手机屏幕的尺寸不统一,为了计算的准确和适配,最好应用百分比。用百分比的益处是,页面栏目能显示进去的数量是能够确定的,15% 的话就是7个(最初一个5%的局部被遮挡),20%的话就是5个,不必再去计算了。 2、如果在款式中有margin或者padding,在计算的时候须要把这些属性设置的值思考进去。 目录构造  代码源码  <template> <view class="page"> <safe-area></safe-area> <scroll-view id="navView" class="item-group" scroll-x scroll-y="false" show-scrollbar="false"> <view class="item" onclick={this.fnSetFrameGroupIndex} data-index={index} v-for="(item,index) in menuNameList"> <text class={this.data.selectedIndex==index?'item-title-active':'item-title'}>{item}</text> </view> </scroll-view> <frame-group class="framegroup" id="frameGroup" preload="0" onchange={this.onchange} scrollEnabled="true"></frame-group> </view></template><script> export default { name: 'index', apiready(){ // console.log(api.winWidth); var frames = []; for (var i=0;i<this.data.menuList.length;i++) { var name = this.data.menuList[i]; var title = this.data.menuNameList[i]; frames.push({ name: title, url: name + '.stml' }); } var frameGroup = document.getElementById('frameGroup'); frameGroup.load({ frames: frames }); }, data() { return{ menuList: ['page1', 'page2', 'page3', 'page4', 'page5', 'page6', 'page7', 'page8', 'page9'], menuNameList:['举荐', '法律', '法规', '生产', '平安', '环保', '机构', '新闻', '征询'], selectedIndex: 0, itemWith:(api.winWidth-20)*0.15 } }, methods: { fnSetFrameGroupIndex(e) { //计算scroll-view 向右滑动的间隔,来实现流动页面时 顶部的导航也跟着滑动 var navView = document.getElementById('navView'); var index = e.target.dataset.index; if(index>6){ navView.scrollTo({ x:(index-6)*this.data.itemWith+10 }) } else if(index==6){ navView.scrollTo({ x:10 }) } else{ if(this.data.selectedIndex>index){ navView.scrollTo({ x:0 }) } } if (this.data.selectedIndex != index) { this.data.selectedIndex = index; var frameGroup = document.getElementById('frameGroup'); frameGroup.setIndex({ index: index, scroll: true }); } }, onchange(e){ //计算scroll-view 向右滑动的间隔,来实现流动页面时 顶部的导航也跟着滑动 var navView = document.getElementById('navView'); var index = e.detail.index; if(index>6){ navView.scrollTo({ x:(index-6)*this.data.itemWith+10 }) } else if(index==6){ navView.scrollTo({ x:10 }) } else{ if(this.data.selectedIndex>index){ navView.scrollTo({ x:0 }) } } //确认跳转以后页面 if (this.data.selectedIndex != index) { this.data.selectedIndex = index; } } } }</script><style> .page { height: 100%; } .item-group { width: 100%; height: 50px; padding: 10px; } .item { width: 15%; align-items: center; } .item-title-active{ border-bottom: 2px solid #3c40c6; color: #000000; padding-bottom: 3px; } .item-title{ color: #666666; padding-bottom: 3px; border-bottom: 0px solid #3c40c6; } .framegroup{ margin: 10px; }</style>

May 5, 2022 · 2 min · jiezi

关于apicloud:APICloud-App开发上手经验分享之模块调用

继上次简略分享了应用APICloud开发APP的全流程后,明天来分享一下如何应用模块。APICloud提供了很多不便好用的模块,只有学习本人想要应用的模块的文档,而后调用模块就能够应用了。应用模块能够大大减少本人须要写的代码量,而且对于老手来说,在本人开发经验不足的状况下,兴许并不能胜任一些性能的开发,这时候应用模块就能够让本人的APP也领有这些性能了,看到本人的APP也具备了丰盛的性能会比拟有成就感,不会使咱们的学习感到干燥,也不容易感觉学习太难而因而止步。 这篇文章应用了一个简略的收费模块PersonalCenter,首先咱们关上APICloud官网的控制台创立一个我的项目,创立我的项目的办法置信大家都曾经相熟了,这里就不再赘述。创立好我的项目之后,点击上方导航栏的模块Store,而后搜寻个人信息,之后就看到了PersonalCenter模块。点进去之后再点立刻应用,而后抉择本人的利用就好了,肯定要抉择本人当初要开发的我的项目,不要选错哦。 点进去之后再点立刻应用,而后抉择本人的利用就好了,肯定要抉择本人当初要开发的我的项目,不要选错哦。模块增加胜利之后,咱们返回来这个页面,点击上面的小字“查看模块文档”,把这个文档始终开着,一会回来还会用到。模块文档外面具体介绍了这个模块的用法。 之后咱们就能够创立证书,编译自定义Loader了,这次咱们仍然抉择Android版,具体操作置信大家曾经会了,如果有不理解的敌人能够看一下上篇文章: 把下载好的自定义Loader拖入逍遥模拟器装置好,关上咱们的开发工具APICloud Studio3,把我的项目用WIFI同步到模拟器后,咱们进行一个设置,点击开发工具左下角的齿轮,而后点击设置,在设置界面里点击扩大。而后勾选Auto Sync这个选项,这样咱们每次保留后,我的项目就会主动同步到模拟器中,更改完代码后不必再每次都手动的进行同步了,十分不便的小性能。 在应用模块之前,咱们找到入口页面main.html的apiready = function ()办法,把外面的内容清空。这个办法外面的属性内容就是最后页面上显示的那些属性,咱们把外面的属性内容清空,之后把body里的Hello APP删除或者正文一下,而后保留。当初发现模拟器中的利用曾经是空白了。 而后咱们找到方才的模块文档,能够看到这个模块别离有六个办法,别离是关上、更新、敞开、设置选中按钮、显示和暗藏。 咱们先试着应用一下open办法,open办法中介绍了许多属性,这时咱们为了疾速展示成绩,先不论这些属性是什么,间接往下看,找到open办法上面的事例代码,间接用事例代码来做一个演示。 这时咱们把文档中open办法下方的示例代码粘贴进这个办法里,肯定要找准哦。粘贴进来之后咱们能够鼠标右键,点击格式化文档,让代码看着条理更分明一些。再次强调一下是粘贴到main.html页面的apiready = function ()办法中的大括号里。 示例代码var personalCenter = api.require('personalCenter');var btnArray = [{ 'bgImg': 'widget://res/personalCenter/personal_btn_nor.png', 'selectedImg': 'widget://res/personalCenter/personal_btn_sele.png', 'lightImg': 'widget://res/personalCenter/personal_btn_light.png', 'title': '好友', 'count': '5'}, { 'bgImg': 'widget://res/personalCenter/personal_btn_nor.png', 'selectedImg': 'widget://res/personalCenter/personal_btn_sele.png', 'lightImg': 'widget://res/personalCenter/personal_btn_light.png', 'title': '回贴', 'count': '240'}, { 'bgImg': 'widget://res/personalCenter/personal_btn_nor.png', 'selectedImg': 'widget://res/personalCenter/personal_btn_sele.png', 'lightImg': 'widget://res/personalCenter/personal_btn_light.png', 'title': '主题', 'count': '27'}];var count = 382;var y = 44;personalCenter.open({ 'y': y, 'imgPath': 'widget://res/personalCenter/d7d1d308fe165b984c09728e7118e9f1.jpg', 'placeholderImg': 'widget://res/common/placeHolder.png', 'userName': 'APICloud', 'count': count, 'modButton': { 'bgImg': 'widget://res/personalCenter/mod_normal.png', 'lightImg': 'widget://res/personalCenter/mod_click.png' }, fixedOn: api.frameName, 'btnArray': btnArray}, function(ret, err) { /* 头像批改按钮. */ if (btnArray.length === ret.click) { api.confirm({ title: '聊天盒子', msg: '您想要从哪里选取图片 ?', buttons: ['优雅自拍', '相册珍藏', '勾销'] }, function(ret, err) { var sourceType = 'album'; if (3 == ret.buttonIndex) { // 勾销 return; } if (1 == ret.buttonIndex) { // 关上相机 sourceType = 'camera'; } api.getPicture({ sourceType: sourceType, encodingType: 'png', mediaValue: 'pic' }, function(ret, err) { if (ret) { personalCenter.updateValue({ imgPath: ret.data, count: count }); } }); }); return; } var msg; /* 批改按钮. */ if (btnArray.length + 1 == ret.click) { msg = '您没有批改权限!'; } if (btnArray.length + 2 == ret.click) { msg = '您没有设置权限!' } if (btnArray.length == ret.click) { btn = btnArray[ret.click]; msg = btn.title + ' 数量为 ' + btn.count } api.toast({ msg: msg, duration: 1000, location: 'top' });});保留一下主动同步,能够看到模拟器中利用呈现了这个界面,界面的大体轮廓进去了,然而并没有图片,这是因为代码中的图片咱们本地里并没有,咱们须要给代码里加一张咱们本地的图片。 ...

May 5, 2022 · 2 min · jiezi

关于apicloud:使用APICloud-MobTech-SDK-快速实现分享到社交平台功能

做挪动端开发的同学对分享性能应该很理解了,比方很多APP都有分享到微信、微博的性能,能够分享文本、图片、链接、音乐等。本文将为大家解说如何应用APICloud & MobTech SDK 疾速实现分享到社交平台的性能。 筹备工作 1、注册MobTech账号 开发者应用本模块之前须要先到Mob官网申请开发者账号,并在账号内填写相应信息创立本人的 APP,从而获取AppKey和AppSecret。 详情参考: https://www.mob.com/wiki/detailed?wiki=306&id=172 2、创立APICloud利用 APICloud提供了两种创立利用的形式,开发者可在云端或APICloud Studio中创立利用。具体步骤可参见文档https://docs.apicloud.com/APICloud/creating-first-app 疾速开始------第一阶段,增加模块 1、在 APICloud 的我的项目中增加 shareSDKPlus 模块,如下图: 在模块库搜寻模块名 ,搜寻进去后 ,点击加号增加。下图因为曾经增加上了,显示已增加。 2、仔细阅读模块文档:https://docs.apicloud.com/Client-API/Open-SDK/shareSDKPlus 3、通过浏览模块文档,咱们晓得还须要增加依赖模块 mobcommonlib ,这个模块也是在APICloud 模块库搜寻增加。 4、Android 平台还须要增加各个对应平台的模块包,须要到 github 下载 。这样做的益处是能够依据所需加不同的模块,比方你只需分享到微信、微博平台,只需下载微信、微博对应的模块包即可。这样编译后的安装包较少。如果默认蕴含十多个平台,安装包会比拟大。 5、将下载下来的对应分享平台的模块包,上传到APICloud 自定义模块处,并增加至我的项目。如下图: 增加后: 第二阶段,配置利用key 1、在微信平台创立利用,获取微信的 appid。可参考文档: https://docs.apicloud.com/Others/Open-SDK-Integration-Guide/weChat  在 APICloud  我的项目的 config.xml 中配置 mob 平台的 AppKey 、AppSecret 和 微信平台的 key 、(即微信AppID)和 AppSecret ,如下: <feature name="shareSDKPlus"> <param name="Mob-AppKey" value="35b704c55****" /> <param name="Mob-AppSecret" value="99ed58d9c720e418eedb5e1abed6****" /> <param name="WeChat-AppId" value="wxedd229a2c545****" /> <param name="WeChat-AppSecret" value="bc0d875592da9c869548b7225a5f****" /> <param name="WeChat-WithShareTicket" value="true" /> <param name="WeChat-BypassApproval" value="false" /></feature> ...

April 28, 2022 · 1 min · jiezi

关于apicloud:APICloud数据云30使用教程

数据云3.0是一个全新的服务端开发运维平台,提供从后端开发、接口联调到上线经营保护等一整套计划。开发者无需思考数据库和服务器等基础设施,无需关怀服务器测试环境的搭建,数据的备份及服务扩容等与业务无关的工作,只需关怀逻辑自身。通过云引擎,云数据库,云函数,内置模型、等功能模块不便用户疾速实现罕用的后端性能。 次要操作界面在APICloud开发平台开发控制台界面: 云设置界面提供了一些全局设置的入口,这些全局设置在正式环境和测试环境中同时失效。能够进行接口验证设置和服务设置。数据模型次要是能够创立数据表和定义一些函数,并对外提供接口,API剖析能够统计数据和文件存储,数据流量和API申请次数等。API接口调试,在函数编辑的中央有联调按钮,点击联调后将关上接口联调的界面,接口联调通过swagger实现。只有测试环境提供联调性能。正式环境出于平安思考不凋谢联调性能。 各个界面的具体操作流程能够参考APICloud开发平台官网文档:https://docs.apicloud.com/Clo... 应用APICloud开发平台数据云3.0.能够轻松实现我的项目的后端局部,不须要后端语言根底就能够轻松构建。 为了不便开发者疾速动手,数据云预置了demo,阿里短信,微信领取等,开发使用率绝对较高的模型。能够在程序中间接引入模型库中的模型,引入后相当于引入了本地模型,能够基于引入模型进行二次开发。上面咱们演示一下应用数据云3.0实现表单的增删查改性能。重点介绍查问性能,其余性能相似。 首先创一个模型staff,并增加相干的字段, 手动插入三条数据: 在API接口调试局部,会默认生成局部接口;也能够依据业务需要,开发云函数,自定义接口: 下图为获取员工列表的近程函数,公布后能够间接调用: 创立后,须要公布到测试环境才能够调试;而后关上API调试:能够间接进行调试。调试界面有url地址,也能够拿到内部拜访。 App端用APICloud开发平台创立的MX利用,并在stml页面中写好表单,将安卓包依照到逍遥模拟器上,如图所示:能够在App上间接申请接口,并返回数据,渲染到页面上; 同时,为不便用户应用,咱们内置了治理后盾模块,用户开启服务后可通过 "https://appid-dev.apicloud-saas.com/admin/" 在测试环境进行拜访。 此性能须要全局配置开启session服务以及开明文件存储,请在全局配置进行相干操作。 治理后盾具体阐明见:https://gitlab.apicloud.com/apicloud/sentosa_doc/blob/master/docs/admin.md

April 27, 2022 · 1 min · jiezi

关于apicloud:使用APICloud-科大讯飞SDK快速实现语音识别功能

语音辨认性能曾经是一个很遍及的性能,在特定情境下,能带给人们不便的交互的体验,比方驾驶时应用语音进行唤醒手机,各类智能音响产品,语音管制智能电视等。本文次要介绍在APICloud平台应用科大讯飞的SDK疾速实现语音辨认性能。 一、成果预览 二、性能实现 在注册好APICloud账号后,进入控制台,增加iflyRecognition模块。iflyRecognition模块封装了科大讯飞的SDK 的语音听写、语音在线合成性能。 应用流程: 1、注册讯飞开放平台账号 2、在讯飞开放平台创立利用,并增加语音听写、在线语音合成服务。 3、参考模块文档(docs.apicloud.com/Client-API/Open-SDK/iflyRecognition)相干形容,制作Android自定义模块。 从讯飞下载的合成SDK,如下图:    依据文档提醒,制作的自定义模块如下图:    从新压缩后,上传到自定义模块处,增加到我的项目。 依据模块文档,调用接口: 1、 createUtility创立科大讯飞引擎 createUtility({params}, callback(ret, err)) paramsandroid_appid: 类型:字符串形容:从科大讯飞开放平台失去的 appid(android端)ios_appid: 类型:字符串形容:从科大讯飞开放平台失去的 appid(iOS端)示例: var iflyRecognition = api.require('iflyRecognition'); iflyRecognition.createUtility({ ios_appid: '6041****', // 填写讯飞平台上取得的appid android_appid: '6041****' // 填写讯飞平台上取得的appid }, function (ret, err) { if (ret.status) { api.alert({ msg: '创立胜利' }); } else { api.alert({ msg: "创立失败" }); } });2、 record辨认语音返回文字 record({params}, callback(ret, err)) paramsvadbos: 类型:数字形容:(可选项)前断点工夫(静音工夫,即用户多长时间不谈话做超时解决),范畴是0-10000单位ms默认值:5000vadeos: 类型:数字形容:(可选项)后断点工夫(静音工夫,即用户多长时间不谈话做超时解决),单位ms,范畴是0-10000默认值:5000rate: 类型:数字形容:(可选项)采样率(反对16000,8000)默认值:16000asrptt: ...

April 20, 2022 · 2 min · jiezi

关于apicloud:在APICloud开发平台使用友盟统计功能教程

APICloud开发平台模块库中的umAnalytics模块封装了友盟APP统计SDK。实现了友盟统计性能,包含启动次数、事件、页面等app数据的统计。模块的应用步骤次要如下: 1、注册账号,开发者到友盟官网注册本人的账号 2、进入官网点击挪动统计创立利用并获取AppKey 3、如果须要自定义事件统计,需进入利用,而后点击 设置 => 事件 =\> 增加事件 4、配置 config.xml 文件 一个 App 须要同时反对 iOS 和 Android 平台,则必须独自申请各自的 appKey,并同时配置在 config 文件中,Android渠道和iOS渠道别离标注 <feature name="umAnalytics"> // ios_appkey:通过友盟挪动统计网站取得iOS零碎的key <param name="ios_appkey" value="*************"/> // iOS渠道号 <param name="ios_channel" value="******"/> // 通过友盟挪动统计网站取得Android零碎的key <param name="android_appkey" value="***********"/> // Android的渠道号 <param name="android_channel" value="******"/></feature>5、常见问题的索引  https://community.umeng.com/ 6、留神 在APICloud开发平台应用时不能与umengAnalytics、umengTJ模块独特应用,同时因为Google Play 及国内的一些app store审查的起因,自模块版本 1.0.5 后,新增接口 config、onResume、onPause,在原先初始化(init)之前须要调用config 接口, 并且须要在监听到app主页面启动后调用onResume、onPause接口 引入的代码也比较简单,示例如下: apiready = function () { var umAnalytics = api.require('umAnalytics'); if (systemType == 'android') { umAnalytics.config(); } umAnalytics.init(); api.addEventListener({ name: 'resume' }, function (ret, err) { umAnalytics.onResume(); }); api.addEventListener({ name: 'pause' }, function (ret, err) { umAnalytics.onPause(); });}引入后编译正式包,客户下载安装,在友盟后盾就能够统计到用户的相干信息 ...

April 8, 2022 · 2 min · jiezi

关于apicloud:使用APICloud开发多端短视频应用

近期看到网上有一个APICloud的教程,蕴含AVM多端开发框架教程和APICloud的云数据开发,并用APICloud开发了一个短视频的多端利用。 本文节选了案例实战的局部,重点介绍几个性能的前端实现。 一、成果预览首先咱们先来看一下实现成果 二、我的项目前端实现本我的项目中前端采纳APICloud AVM多端开发技术进行开发,要点包含 swiper 轮播图、网络申请封装等。应用 APICloud 多端技术进行开发,实现一套代码多端运行,反对编译成 Android & iOS App 以及微信小程序。 1、APICloud应用步骤:(1)下载 APICloud Studio 3 作为开发工具。下载地址:www.apicloud.com/studio3 (2)注册账号后在控制台创立app,控制台地址:www.apicloud.com/console 能够在控制台创立 也能够在APICloud Studio 3间接创立我的项目 2、编写首页轮播图设置stml模板轮播内容 <swiper class="swiper" :circular="false" :vertical="true" @change="onchange"> <swiper-item class="swiper-item" v-for="item,index in videoList"> <video :src="item.src" :controls="false" :id="'video'+index" onclick="togglePause" onpause="onpause" onplay="onplay" onended="onended"></video> </swiper-item> </swiper>编写script数据和办法 import '../../components/tabbar.stml'export default { name: "tpl", apiready() { api.setStatusBarStyle({ style: "light", color: "-" }); }, data() { return { isShow: "none", videoContext: null, current: 0, page: 1, videoList: [ { id: "000", nickname: "老陈打码", content: "新年快乐,万事如意!", like: "3.5w", share: "3821", collect: "2988", comment: "3475", isLike: false, pubtime: "2022-01-10 01:30", headimg: "https://a415432669.github.io/shortvideo/000.jpg", src: 'https://a415432669.github.io/shortvideo/000.mp4' }, { id: "001", nickname: "学习告诉", content: "高兴学习APICloud多端利用开发", like: "3.5w", share: "3821", collect: "2988", comment: "3475", isLike: false, pubtime: "2022-01-10 01:30", headimg: "https://a415432669.github.io/shortvideo/001.jpg", src: 'https://a415432669.github.io/shortvideo/001.mp4' }, ] }; }, methods: { handleClick(e) { api.toast({ msg: this.data.text, location: "middle" }); }, onchange(event) { // console.log(event.detail.current) this.current = event.detail.current; if (this.current === this.videoList.length - 1) { this.page++; api.ajax({ url: "https://a6197037785854-dev.apicloud-saas.com/api/videos/getVideoList?obj=" + JSON.stringify({ page: this.page, limit: 2 }) }, (ret, err) => { // console.log(ret) // this.videoList = this.videoList.concat(ret.data) ret.data.forEach(item => this.videoList.push(item)) if (ret.data.length == 0) { api.toast({ msg: '劳动一下,视频很快会更新!' }) } }) } this.videoContext && this.videoContext.pause() document.querySelector('#video' + this.current).$$getContext().then((context) => { this.videoContext = context; this.videoContext.play() }) }, togglePause() { this.videoContext.pause() }, togglePlay() { this.videoContext.play() }, onplay() { this.isShow = "none" }, onpause() { this.isShow = "flex" }, onended() { this.videoContext.play() }, likeFn() { this.videoList[this.current].isLike = !this.videoList[this.current].isLike; }, shareFn() { this.videoList[this.current].share++; } }, apiready() { document.querySelector('#video' + this.current).$$getContext().then((context) => { this.videoContext = context; this.videoContext.play() }) }};轮播局部设计款式内容 ...

April 7, 2022 · 4 min · jiezi

关于apicloud:使用APICloud-AVM框架封装app日历组件

实现的日历效果图 话不多说,上代码! <template> <view class="page"> <safe-area></safe-area> <view class="calendar-wrapper"> <view class="calendar-toolbar"> <text class="prev" onclick="prevMonth">〈</text> <text class="current">{{ currentDateStr }}</text> <text class="next" onclick="nextMonth">〉</text> </view> <view class="calendar-week"> <text class="week-item" v-for="item of weekList" :key="item">{{ item }}</text> </view> <view class="calendar-inner"> <text class="calendar-item" v-for="(item, index) of calendarList" :key="index" :class="this.changestyle(item.disable,item.value)" onclick="selDate" :data-val="item.value" :data-status="item.disable" :data-num="item.date">{{ item.date }}</text> </view> </view> </view></template><script> export default { name: 'calendar', installed(){ this.setCurrent(); this.calendarCreator(); }, data() { return{ current:{}, weekList:['周日','周一','周二','周三','周四','周五','周六'], shareDate: new Date(), calendarList: [], seldate:'点击抉择日期', selweek:'待定', } }, computed: { // 显示以后工夫 currentDateStr() { let { year, month } = this.current; return `${year}年${this.pad(month + 1)}月`; } }, methods: { selDate (e){ // console.log(JSON.stringify(e.currentTarget.dataset.val)); let status = e.currentTarget.dataset.status; let num = e.currentTarget.dataset.num; if(status){ this.data.seldate = e.currentTarget.dataset.val; this.getWeek(); if(num>7){ this.prevMonth(); } else{ this.nextMonth(); } } else{ this.data.seldate = e.currentTarget.dataset.val; this.getWeek(); //从新加载一次日历 扭转款式 this.calendarCreator(); } this.fire('clickDate', this.data.seldate); }, changestyle(status,date){ if(status){ return 'calendar-item-disabled'; } else{ if(date == this.data.seldate){ return 'calendar-item-checked'; } else{ return 'calendar-item'; } } }, // 判断以后月有多少天 getDaysByMonth(year, month) { // console.log("本月多少天:"+new Date(year, month + 1, 0).getDate()); return new Date(year, month + 1, 0).getDate(); }, getFirstDayByMonths(year, month) { // console.log("本月第一天周几:"+new Date(year, month, 1).getDay()); return new Date(year, month, 1).getDay(); }, getLastDayByMonth(year, month) { // console.log("本月最初一天周几:"+new Date(year, month + 1, 0).getDay()); return new Date(year, month + 1, 0).getDay(); }, // 对小于 10 的数字,后面补 0 pad(str) { return str < 10 ? `0${str}` : str; }, // 点击上一月 prevMonth() { this.current.month--; // 因为 month的变动 会超出 0-11 的范畴, 所以须要从新计算 this.correctCurrent(); // 生成新日期 this.calendarCreator(); }, // 点击下一月 nextMonth() { this.current.month++; // 因为 month的变动 会超出 0-11 的范畴, 所以须要从新计算 this.correctCurrent(); // 生成新日期 this.calendarCreator(); }, // 格式化工夫,与主逻辑无关 stringify(year, month, date) { let str = [year, this.pad(month + 1), this.pad(date)].join('-'); return str; }, // 设置或初始化 current setCurrent(d = new Date()) { let year = d.getFullYear(); let month = d.getMonth(); let date = d.getDate(); this.current = { year, month, date } }, // 修改 current correctCurrent() { let { year, month, date } = this.data.current; let maxDate = this.getDaysByMonth(year, month); // 预防其余月跳转到2月,2月最多只有29天,没有30-31 date = Math.min(maxDate, date); let instance = new Date(year, month, date); this.setCurrent(instance); }, // 生成日期 calendarCreator() { // 一天有多少毫秒 const oneDayMS = 24 * 60 * 60 * 1000; let list = []; let { year, month } = this.data.current; // 以后月份第一天是星期几, 0-6 let firstDay = this.getFirstDayByMonths(year, month); // 填充多少天 let prefixDaysLen = firstDay === 0 ? 7 : firstDay; // 毫秒数 let begin = new Date(year, month, 1).getTime() - oneDayMS * prefixDaysLen; // 以后月份最初一天是星期几, 0-6 let lastDay = this.getLastDayByMonth(year, month); // 填充多少天, 和星期的排放程序无关 let suffixDaysLen = lastDay === 0 ? 6 : 6 - lastDay; // 毫秒数 let end = new Date(year, month + 1, 0).getTime() + oneDayMS * suffixDaysLen; while (begin <= end) { // 享元模式,防止反复 new Date this.data.shareDate.setTime(begin); let year = this.data.shareDate.getFullYear(); let curMonth = this.data.shareDate.getMonth(); let date = this.data.shareDate.getDate(); list.push({ year: year, month: curMonth, date: date, disable: curMonth !== month, value: this.stringify(year, curMonth, date) }); begin += oneDayMS; } this.data.calendarList = list; // console.log(JSON.stringify(this.data.calendarList)); }, //获取选中日期的周几 getWeek(){ let index =new Date(this.data.seldate).getDay(); let weekArr = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五','星期六']; let week = weekArr[index]; this.data.selweek = week; }, } }</script><style> .page { height: 100%; } .calendar-wrapper { margin: 10px 10px 0 10px; background-color:#3c40c6; border-top-left-radius: 10px; border-top-right-radius: 10px; max-height: 400px; } .calendar-toolbar { padding: 10px 10px; flex-flow: row nowrap; justify-content: space-between; align-items: center; border-bottom: 1px solid #fff; } .prev{ flex: 1; text-align: center; color: #fff; } .current { flex: 1; text-align: center; color: #fff; } .next{ flex: 1; text-align: center; color: #fff; } .calendar-week { padding: 5px 10px; flex-flow: row nowrap; justify-content: space-around; align-items: center; } .week-item { padding: 5px; font-weight: bolder; font-size: 12px; color: #fff; } .calendar-inner{ padding: 10px 10px; flex-flow: row wrap; justify-content: space-around; align-items: center; } .calendar-item { width:14%; font-weight: bolder; text-align: center; font-size: 15px; color: #fff; padding: 5px; background-color: #3c40c6; } .calendar-item-disabled { width:14%; font-weight: bolder; text-align: center; font-size: 15px; color: #999; } .calendar-item-checked { width:14%; font-weight: bolder; text-align: center; font-size: 15px; color: #000000; background-color: #ffffff; border-radius: 5px; }</style>其余页面援用 ...

April 6, 2022 · 4 min · jiezi

关于apicloud:极光推送在APICloud平台的使用教程

推送服务是app利用中十分重要的一个服务,尤其对于app开发者而言,没有什么路径比音讯推送更能间接、即时地涉及到指标用户群体。依据相干数据显示,通过推送服务能够显著晋升app的用户粘性和活跃度。 上面咱们就为大家解说一下,如何在APICloud开发平台应用推送性能。 jpushVip模块封装了极光推送平台的SDK,应用此模块可实现接管推送告诉和透传音讯性能。和APICloud平台的推送性能类似,都反对在线推送,然而如果要反对离线推送,须要集成极光厂商通道。 应用极光推送根本流程阐明: 1、在极光推送网站(https://www.jiguang.cn )注册帐号,并创立利用,获取APP_KEY;利用包名填写APICloud开发平台的包名。 2、在config.xml中配置meta-data,填写JPUSH\_APPKEY及JPUSH\_CHANNEL参数,JPUSH_APPKEY在利用信息中获取。 3、若是集成极光厂商通道,在config.xml中配置meta-data,小米平台,魅族平台,oppo平台,vivo平台,华为平台推送信息, 各平台申请形式如下, 厂商通道相干参数申请教程: https://go48pg.yuque.com/docs/share/5cc561e9-b103-47a3-93c5-e91a0e4b2402?# 厂商集成设置界面如下: 4、前端调用jpushVip模块办法,初始化和监听推送音讯。 应用此模块之前需先配置config文件 ,办法如下:( "MI-" "MZ-" "appid=" 等前缀不能省略) //极光配置 <meta-data name="JPUSH_CHANNEL" value="渠道号"/> <meta-data name="JPUSH_APPKEY" value="通过极光推送网站取得appkey" />// <!—xiaomi start--> <meta-data name="XIAOMI_APPKEY" value="MI-您的利用对应的小米的APPKEY" /> <meta-data name="XIAOMI_APPID" value="MI-您的利用对应的小米的APPID" /> // <!—xiaomi end --> // <!-- meizu start --> <meta-data name="MEIZU_APPKEY" value="MZ-您的利用对应的魅族的APPKEY" /> <meta-data name="MEIZU_APPID" value="MZ-您的利用对应的魅族的APPID" /> // <!-- meizhu end --> // <!-- oppo start --> <meta-data name="OPPO_APPKEY" value="OP-您的利用对应的OPPO的APPKEY" /> <meta-data name="OPPO_APPID" value="OP-您的利用对应的OPPO的APPID" /> <meta-data name="OPPO_APPSECRET" value="OP-您的利用对应的OPPO的APPSECRET" /> // <!-- oppo end --> // <!-- vivo start --> <meta-data name="com.vivo.push.api_key" value="您的利用对应的VIVO的APPKEY" /> <meta-data name="com.vivo.push.app_id" value="您的利用对应的VIVO的APPID" /> // <!-- vivo end --> // <!-- huawei start --> <meta-data name="com.huawei.hms.client.appid" value="appid=您的利用对应华为的appID"></meta-data> // <!-- huawei end --> // <!-- iOS start --> <feature name="jpushVip"> <param name="app_key" value="123456789" /> <param name="channel" value="your channel" /> </feature> // <!-- iOS end -->极光后盾操作界面如下: ...

March 23, 2022 · 1 min · jiezi

关于apicloud:APICloud-App开发教程之云修复功能

应用APICloud开发平台的云修复性能能够实现疾速版本迭代,疾速修复bug。不必公布新的apk或者ipa版本既可对你的app进行更新,即增量更新。在我的项目迭代过程中,如果批改了其中某几个文件,那么只须要更新这几个文件即可。 应用前须要将config.xml配置smartUpdate,autoUpdate为true,而且app必须是编译的正式版,并须要增加mam模块。目前在APICloud平台编译的安装包,自带man模块,不须要独自增加。 配置文件可参考文档: https://docs.apicloud.com/Dev-Guide/app-config-manualhttps://docs.apicloud.com/Dev-Guide/app-config-manual 操作步骤如下: 1、筹备更新的zip文件包。原我的项目文件构造如图: 例如须要更新html文件夹下的 main.html 文件。 那么您能够新建一个widget文件夹, 把新的main.html 文件放入widget 下的 html 目录。更新包构造如图: 2、在控制台->云修复->增加云修复页面上传widget.zip 文件 首先点击导航进入云修复页面, 如图: 而后点击“增加云修复”, 如图: 云修复是指定版本进行修复的。首先要抉择要修复的版本。有两种修复形式能够抉择,提醒修复 和 静默修复。 提醒修复会有弹出框,提醒用户下载更新包、重启app。 静默修复不会有提示信息,下次重启,主动失效。选中“上传更新文件”, 点击“抉择zip包”按钮上传制作好的widget.zip 更新包。 最初点击“更新”按钮即可。如下图: 提醒修复可能因AppStore审核政策调整而带来潜在影响,APICloud建议您应用静默修复。同时应防止在AppStore审核期间公布修复包。 具体介绍能够查看YonDeveloper开发者社区介绍:https://developer.yonyou.com/forum.php?mod=viewthread&tid=53893 如果有本人的服务器,也可将制作好的widget.zip 更新包,上传到您本人 的服务器。选中“输出更新地址”,而后将文件下载地址填入, 如图: 最初,点击“更新”按钮。 3、应用提醒修复时,在手机上关上app, 即可收到更新提醒。 点击确定更新后,App主动重启,即可看到更新成果。 4、对于静默修复,也可利用smartupdatefinish事件,和rebootApp()办法,实现热更新成果,无需用户手动重启App。 事件和办法能够参照文档: https://docs.apicloud.com/Client-API/api#92 AVM 开发方式注意事项 STML文件云修复办法: 间接用原始的STML文件没用,须要用STML编译后对应的JS文件。在 Studio顶部菜单中 我的项目-编译我的项目,而后在我的项目文件目录下有个 .bin 暗藏文件夹,外面有STML页面对应编译好的 .js 文件。在js文件中对应批改本人的性能,能力失效。

March 22, 2022 · 1 min · jiezi

关于apicloud:使用APICloud-AVM多端框架开发app通讯录功能

一、成果展现 二、我的项目结构图 三、数据结构图 1、服务端的原始好友数据结构 2、按字母分类排序后的好友数据结构 3、字母导航数据结构 四、性能实现的思路 本我的项目基于APICloud AVM框架编写,因而思路要转变下比方标签的用法、CSS样式表的写法、我的项目的目录构造、dom的操作等都不一样了,齐全是Vue、React的编程思维。 微信通讯录性能是将所有联系人依据字母首字拼音排序分类,单击左边字母滑动到相应字母分组编。本我的项目的外围性能是对数据按首字母进行排序,页面布局能够依照微信的布局进行设计,因为波及到页面滚动以及、滚动到指定地位,因而咱们能够选用scroll-view组件。 本我的项目的页面布局结构图如下 留神scroll-view组建必须设置高度否者不能失常显示,高度计算公式如下: 高度=页面窗口高度--状态栏高度--顶部导航高度--自定义tab-bar高度 代码如下 let top = 0;if (api.safeArea) { top = api.safeArea.top;} else { let res = wx.getSystemInfoSync(); top = res.statusBarHeight;}this.list_h = api.winHeight - top - 44 - 53;nav-bar和tab-bar是自定义的所以晓得它的高度别离是44和53px scroll-view 组件残缺属性如下 <scroll-view id="list" :show-scrollbar='false' :bounces='true' style={'height:'+list_h+'px'}>接下来解说外围性能好友数据结构的转换,从服务端拿到的好友数据个别是没有按字母排序和分类的格局如下 [{ "id": "1", "nick_name": "杨洋", "avatar": "../../res/avatar/tx7.jpg" }, { "id": "2", "nick_name": "666", "avatar": "../../res/avatar/tx8.jpg"}]转换后的数据格式如下 [{ "letter": "A", "hasData": true, "users": [{ "name": "abc1209", "unicode": 97, "avatar": "../../res/avatar/tx14.jpg", "id": "14" }]}, { "letter": "B", "hasData": false, "users": [] }, { "letter": "#", "hasData": true, "users": [{ "name": "17115719973", "unicode": 49, "avatar": "../../res/avatar/tx1.jpg", "id": "1" }]}]转换的原理就是提取nick_name字段第一个字符串获取拼音字母以及unicode码而后分组排序须要参照pinyin码表,网上能够下载,我这里从新封装了一下。 ...

March 22, 2022 · 3 min · jiezi

关于apicloud:使用APICloud开发物流仓储app项目实践

一、前端思维导图 二、我的项目原型图(UI图) 初版原型地址墨刀原型链接 《外贸类》 ,波及的页面大略有20+,有趣味能够去招人做一下UI。 三、前端app我的项目创立 1、前端APICloud后盾(www.apicloud.com/console)创立app,创立混合的开发的app。 2、下载调试工具自定义loader安装包 自定义loader是一个安卓或iOS的安装包,能够装到收集端,从而进行js开发,将代码同步到原生app外面来,从而进行疾速的开发。 3、APICloud Studio3拉取代码  APICloud Studio3是APICloud的开发工具,用来开发代码从而和手机端的app进行同步,咱们也能够用来治理代码,能够同步到云端,能够装置git插件,能够装置断点调试等等,是一个全方位的工具。下载地址:https://www.apicloud.com/studio3 点击我的项目,导出云端检出。 4、创立证书 一键创立安卓证书,这个小技巧能够用在别的安卓或者其余的证书开发,这样节俭了,创立证书的工夫,让咱们领有一个百年的安卓证书。 5、真机同步性能 该性能是第2步和第3步的汇合,通过自定义loader和APICloud Studio3,将手机和电脑至于同一个WIFI上面,这样他们就在同一个波段上面了,通过IP地址和端号将两个连在一起,能够同步代码。(留神可能遇到问题,有些须要给app设施读取存储的权限) 6、我的项目开发应用框架 该我的项目是应用Vue Cli来开发,Vue Cli创立的单页面的我的项目,将APICloud外面的API的办法集成到Vue的框架外面,其中window.apiready = () => { createApp(App).use(router).use(Vant).mount('#app') }这样API的办法每个页面都能够应用,还有就是关上页面的openwin的办法,api.openWin({ name: "index",url: "./index",});这样将index路由的页面能够关上。通过页面引入let api = window.api;将APICloud所有的API的办法引入到页面当中。 四、App性能解说 1、App的多语言开发 次要的思路是,将一个页面的所有元素进行多语言话,例如tip,对应着英文,对应着中文,对应着韩文,有三个文件,tip中文文件,tip中文文件,tip韩文文件,当咱们抉择中文时候,就是抉择的tip的中文文件,所有对应的都是中文。如果咱们抉择韩文,就是对应的抉择的韩文文件,所有对应的都是韩文。 请看码云的源码Chan/vue多语言例子。 中文 const cn = { selsct:{ title:'请抉择物流', con: ' 威海可达鸭中韩物流', han: 'one world 韩中物流' }}export default cn;韩文 const han = { selsct:{ title:'물류를 선택하십시오.',//这里的韩文也是请抉择物流 con: '중국에서 한국에 도착',//威海可达鸭中韩物流 han: '한국에서 중국으로'//这里的韩文也是one world 韩中物流 }}export default han; ...

March 17, 2022 · 4 min · jiezi

关于apicloud:使用APICloud平台实现朋友圈功能

一、成果展现 二、我的项目结构图以及用到的模块 三、次要性能 1、下拉刷新上啦加载更多(mescroll.js) 2、点赞评论 3、导航背景通明突变成果 4、图像预览(UIPhotoViewer) 5、图像压缩 6、定位左近地点(aMap) 7、图像批量上传 四、性能点详解 1、下拉刷新和上拉加载我用的是 mescroll.js [](http://www.mescroll.com/) (自带图像懒加载,官方网站有具体应用阐明文档) 实现的思路是自定义下啦款式,当下拉的时候图像不停旋转同时向下挪动,几秒后向上挪动隐没在顶部。 下拉刷新成果须要自定义,更改下拉刷新的布局容器款式 warpClass: 'refresh' 。 <div class="refresh"></div>   //下拉刷新容器 css 款式如下 .refresh { position: fixed; top: 0; width: 100%}<div class="laoding"><img src="../res/icon.png" class="img"></div>旋转动画 成果 css 款式如下 .laoding { position: fixed; top: -1.5rem; left: 2rem; width: 1.5rem; height: 1.5rem; z-index: 1;}.to_bottom { -webkit-animation: to_bottom 2s; animation: to_bottom 2s;}.laoding .img { width: 1.3rem; height: 1.3rem; animation: rotating 0.2s linear infinite; -webkit-animation: rotating 0.2s infinite;}@keyframes to_bottom { 0% { top: -4rem; } 4% { top: 3rem; } 8% { top: 4rem; } 10% { top: 5rem; } 50% { top: 5rem; } 75% { top: 5rem; } 100% { top: -1.5rem; }}@keyframes rotating { to { transform: rotate(1turn); }}2、点赞评论这个性能次要是款式的设计难度很小然而须要留神当屏幕滚动时须要暗藏评论框以及相干按钮。 ...

March 16, 2022 · 4 min · jiezi

关于apicloud:零基础如何上手APICloud-App小程序多端开发

业务需要变动快、开发人员老本高是当初企业面临的次要问题。多端开发技术则能够很好的解决这些问题,开发一次能够生成iOS、Android、小程序、Web等多端利用。APICloud凭借多年的挪动开发技术积攒,为开发者提供了一套高性能的多端开发技术,能够高效的开发企业级应用程序。 本文分为建设前端编程根底和应用APICloud实现开发两局部,为大家简略介绍零根底用户应用APICloud开发的过程。如果你曾经有前端根底但不理解APICloud的应用办法,能够间接跳转至第二局部哦~ 一、 前端根底 万丈高楼平地起,想要研发一款APP首先须要把握根底的编程技术。作为一个多端开发平台,APICloud次要是通过前端的编程实现APP开发,因而这里只简略介绍前端三剑客:HTML、CSS、JS的学习办法。 1、 HTML和CSS HTML负责网页的内容,相当于网页的骨架,是一种超文本标记语言,由各种标签组成,是实现前端开发的根底。而CSS负责网页的款式,通过对网页元素的色彩、大小、地位等外观款式进行设置,让网页变得更加丑化。 HTML和CSS相对而言比较简单,学习难度不大,初学者能够在w3cschool(www.w3cschool.cn/)和菜鸟教程(www.runoob.com/)中学习,在学习的同时还能够在网页中进行相应的调试练习,加深对于常识的了解。在初步把握HTML和CSS之后,就能够摸索着实现对现有网页或者UI设计稿的还原复制了。 2、 JavaScript JavaScript是前端编程语言学习中的重中之重,绝对HTML和CSS而言学习难度更高一些。JS次要是负责交互成果的实现,也就是让页面中的元素动起来,是前端的外围技能。 首次接触JS能够先跟着网上的教学视频进行第一次简略的学习,对概念有一个总体的理解,实现疾速入门。之后再找相应的专业书籍进行钻研,造成零碎的常识体系,进一步了解JS的设计原理和思维,把握更简单的js技术,如原型对象、闭包、同步异步、沙箱等。 参考视频:www.imooc.com/learn/36 参考书籍:《Javascript高级程序设计 第四版》《JavaScript 语言精粹》 3、 罕用框架 在理解前端的根底技术之后,还须要把握前端的根底框架。目前前端应用比拟宽泛的框架有两种:React和Vue。 React框架是Facebook推出的一个用来构建用户界面的 JavaScript 库。 React次要用于构建UI,领有较高的性能,代码逻辑非常简单,能够疾速便捷的实现大型项目。 参考视频:/www.bilibili.com/video/BV1wy4y1D7JT 参考资料:React官网文档: https://react.docschina.org/d... Vue框架是用于构建交互式的web界面的库。它提供了MVVM数据绑定和一个可组合的组件零碎,具备简略、灵便的API。 参考视频:www.bilibili.com/video/BV1Zy4y1K7SH 参考资料:《Vue.js权威指南》,Vue官网文档: https://cn.vuejs.org/v2/guide/ 二者相比各有劣势,Vue更易上手,而React的绝对自由度更高,开发人员能够依据本身须要抉择框架进行学习。 二、 APICloud开发 在有了肯定的前端根底后,用户就能够应用APICloud进行开发了。在APICloud中应用根底的HTML,CSS,JS技术进行开发与应用惯例编译器的步骤是统一的,批改代码,提交代码,编译代码,进行相应的调试。不同的是APICloud引入了本人的API、模块、框架等,因而在每一步的具体操作上存在肯定的差别。 1、API和模块 首先APICloud提供了本人封装的API对象和模块,开发人员能够间接进行调用,疾速实现本人的需要。 API对象提供了构建应用程序所须要的一些根本的办法,如窗口操作、相册和网络数据拜访等;以及一些常见的属性,如屏幕宽度,零碎类型等;还有一些罕用事件,如电量低事件、利用进入后盾事件。API对象不须要 require 援用,能够间接在JS中应用。 参考资料:https://docs.APICloud.com/Cli... 而模块是在API对象之外的一种扩大,APICloud提供了1000+成熟的app功能模块,涵盖领取、 IM、 直播、辨认、地图等丰盛性能,满足各类app的开发需要。在开发app时,可一键调用无需独自开发,从而大幅缩短开发周期。 代码中应用模块时需先在开发控制台模块页面进行增加,或者通过config.xml中的feature字段增加模块,参考feature配置(https://docs.APICloud.com/Dev...)。并通过api.require办法进行援用,如: var fs = api.require('fs');fs.exist({path: 'fs://file.txt'}, function(ret, err) {});在调用模块时如果有疑难能够在开发者文档(https://docs.APICloud.com/)中间接搜寻对应的模块名称,找到模块的阐明文档进行查看。 如果平台模块不能满足我的项目需要,开发者也能够扩大自定义模块,开发实现后将模块包上传到“自定义模块”外面,而后增加应用。 参考资料 模块开发指南_iOS:https://docs.APICloud.com/Mod... 模块开发指南_Android_Eclipse:https://docs.APICloud.com/Mod... 模块开发指南_Android_Studio:https://docs.APICloud.com/Mod... 2、编译 其次在编译时,有两种编译办法。如果开发时只调用了官网模块,那么能够间接应用官网公布的AppLoader进行编译。 而如果在开发时退出了本人封装的模块,付费模块、第三方SDK模块等,那么根底的云编译可能就无奈实现编译的需要。这种状况下须要开发人员自定义AppLoader实现利用的编译。 参考资料:https://docs.APICloud.com/Dev... 3、调试 最初在调试时,APICloud提供了真机同步调试的办法。只有确保手机和编译器位于同一网段局域网下,就能够通过扫码下载生成的软件到手机,实现同步调试。 参考资料:https://docs.APICloud.com/Dev... 4、AVM框架 ...

January 20, 2022 · 1 min · jiezi

关于apicloud:APICloud-原生模块H5模块多端组件使用教程

应用APICloud平台,能够应用前端技术疾速开发iOS、Android App、小程序、Web等多端利用。在开发过程中,调用模块能够极大的晋升开发效率。本文分为三个局部,通知大家如何应用APICloud 的原生模块、H5模块以及多端组件,疾速实现性能开发。 一、原生模块应用教程 原生模块是指应用 Android 和 iOS原生开发语言封装的功能模块。封装好的模块能够应用js调用。 1、增加模块 进入 APICloud 控制台,找到模块库,搜寻要应用的模块。 点击”+“进行增加 2、编译自定义loader ,并下载安装到手机 自定义loader是Android或iOS安装包,也是咱们进行开发调试的运行环境。代码批改后,应用开发工具 Studio 3 的 wifi 同步性能,把代码同步到自定义loader中,能够查看批改代码的运行成果。 如下图,点击自定义loader 导航, 点击【编译android 自定义loader】按钮或 【编译iOS自定义loader】按钮,进行编译。编译实现后,应用手机扫描二维码,下载安装到手机。 3、依据模块文档,编写调用模块的代码。 应用模块前肯定要仔细阅读模块文档,尤其是反对平台,是否Android、iOS都反对,不要写完代码才发现只反对某一平台,做无用功。某些模块封装第三方平台的SDK, 如极光推送模块,在应用这类模块时,不仅要浏览模块文档,还要浏览极光官网的文档。 以UIButton 模块为例:https://docs.apicloud.com/Cli... 关上编辑器,在页面编写代码,以调用UIButton模块的open 接口为例: 如何应用 Studio 3 编辑器检出我的项目,新建我的项目,提交或更新代码,本文不做介绍,可参考以下Studio 3文档进行学习。 https://docs.apicloud.com/api... 4、应用 Studio 3 wifi 同步性能,将代码同步到自定义loader 查看代码运行成果。 如下图,点击真机同步快捷键 , 点击 【通过wi-fi 连贯新的设施】, 弹出二维码和ip地址、端口号。 关上手机上的自定义loader,点击浅灰色圆圈,弹出如下界面,点击扫一扫,能够扫描上图的二维码,主动连贯。或者手动输出ip 地址和端口号,而后点连贯。连贯胜利后,灰色圆圈变绿色。 在开发工具我的项目根目录上右键 - 抉择 WiFi 同步全量 命令,就能够把代码同步到自定义loader。( 留神手机上自定义loader 要处于关上状态,不能退到后盾。) 运行成果如下图:能够看到按钮模块的成果曾经显示在页面上。 其余注意事项: (1)如果应用须要在config.xml 中配置appkey , 或res 目录下须要配置文件。这两种情景,要配置代码后,先提交代码,再编译自定义loader,这样这些配置项能力失效。 ...

January 17, 2022 · 1 min · jiezi

关于apicloud:使用APICloud开发app的性能提升实践

一、为什么说这个问题?首先我是一名前端开发者,应用过的开发方式有,APICloud、原生开发、本人混合打包开发。这些都是依据不同的业务需要,用不同的开发方式,有的只须要安卓开发的需要,有须要安卓和iOS开发的需要,还有一些要h5和安卓等等。依据这些就做了相应的钻研。 二、性能剖析两个平台上代码,安卓原生代码。本次测试所用机型是XiaoMi Redmi K30 (1)安卓代码MainActivity.java package com.example.demo2;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListView;import android.widget.SimpleAdapter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class MainActivity extends AppCompatActivity { List<String> list; List<String> list1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) this.findViewById(R.id.listView); //名字列表,之后能够动静退出数据即可,这里只是数据例子 list = new ArrayList<>(); for(int i = 0; i < 1000; i++){ list.add("小明"); } list1 = new ArrayList<>(); for(int i = 0; i < 1000; i++){ list1.add("18"); } List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>(); for(int i = 0; i < list .size(); i++){ HashMap<String, Object> item = new HashMap<String, Object>(); item.put("name", list.get(i)); item.put("sex", list1.get(i)); data.add(item); } //创立SimpleAdapter适配器将数据绑定到item显示控件上 SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, data, R.layout.item, new String[]{"name", "sex"}, new int[]{R.id.name, R.id.sex}); //实现列表的显示 listView.setAdapter(adapter); }}activity_main.xml ...

January 4, 2022 · 2 min · jiezi

WiFi模块Demo新手教程图文详解模块使用教程

第一步我们需要在开发控制台创建一个Native App应用以及添模块的准备工作: 按照下图步骤 输入完点创建完成之后 最好点击添加按钮之后返回看看你是否添加了需要的模块,添加完模块之后在点击自定义的 然后云端操作就完成 接下来我们把云端代码拉取到本地 通过svn拉取本地 使用开发工具直接打开拉取到本地的代码进行开发; 如果你们使用的是官网工具apicloud-studio-2.exe那么请看下面的链接教程把代码拉取到本地: https://docs.apicloud.com/Dev... 拉取代码成功之后在工具的结构: 然后我们再打开Wi-Fi文档 https://docs.apicloud.com/Cli... 这个路径其实直接在模块对应点击模块名字就能进入到模块文档的 ,每个模块都有这个; ios需要特别注意文档里面提示需要添加的文件: <!DOCTYPE HTML><html><head> <meta charset="UTF-8"><meta name="viewport" content="maximum-scale=1.0, minimum-scale=1.0, user-scalable=0, initial-scale=1.0, width=device-width" /><meta name="format-detection" content="telephone=no, email=no, date=no, address=no"><title>wifi_frm</title><link rel="stylesheet" type="text/css" href="../css/api.css" /><link rel="stylesheet" type="text/css" href="../css/box.css" /><style media="screen"> <style>html, body { background-color: #ededed; } .list-item { margin-top: 1px; padding: 15px 10px; font-size: 14px; line-height: 180%; position: relative; background-color: #fff; } .list-item:after { content: " "; position: absolute; z-index: 77; left: 0; top: 0; width: 200%; height: 200%; border-bottom: 1px solid #d4d4d4; -webkit-transform-origin: 0 0; transform-origin: 0 0; -webkit-transform: scale(.5, .5); transform: scale(.5, .5); } .left { padding: 0px 10px; line-height: 220%; color: #333; } .list-item .title { padding: 0px 10px; line-height: 220%; color: #333; position: relative; z-index: 88; } .list-item .right { position: relative; z-index: 99; } .list-item .right .state { display: inline-block; vertical-align: middle; border-radius: 20px; width: 38px; height: 21px; text-align: center; line-height: 20px; font-size: 12px; color: #fff; } .list-item .right .open { background-color: #00acff; } .list-item .right .open::after { content: " "; float: right; margin-top: 1px; margin-right: 1px; width: 19px; height: 19px; border-radius: 50%; background-color: #fff; box-shadow: 0px 0px 1px 1px #d4d4d4; -webkit-transition: all 0.2s linear; transition: all 0.2s linear; } .list-item .right .close { background-color: #ededed; } .list-item .right .close::after { content: " "; float: left; margin-top: 1px; margin-left: 1px; width: 19px; height: 19px; border-radius: 50%; background-color: #fff; box-shadow: 0px 0px 1px 1px #d4d4d4; -webkit-transition: all 0.2s linear; transition: all 0.2s linear; } .center { text-align: center; } .list-item .active { color: #00acff }</style></head><body> ...

May 13, 2019 · 3 min · jiezi

移动APP-微信支付完整过程wxPay-方案一

前两天开始做移动端APP的微信支付,过程中遇到了一些问题,比如支付的过程中返回值总是:-1 {status:false},这些问题已经得到了解决。前人栽树,后人尽管乘凉,那么分享一下整个支付过程(wxPay 方案一): 1、申请微信开发平台的账号、创建移动应用、申请开发者资质认证(整个过程APICLOUD官方网站已经给出了相当明确的操作步骤,与实际操作没有差异,按照文档一步一步来,是没有问题的),附带链接地址:http://docs.apicloud.com/Othe... 2、配置移动应用中 config.xml 文件 <feature name="wxPay"> <param name="urlScheme" value="***"/><param name="apiKey" value="***"/><param name="apiSecret" value="***"/></feature>复制代码 配置获取方式说明以及截图:从微信开发平台获取,登录微信开发平台 —>管理中心—>移动应用—>查看(urlScheme的值和apiKey相同)(微信开发平台链接:https://open.weixin.qq.com/) 3、getOrderId(),将获取预支付订单号,建议将获取预支付订单号放置服务器端执行。(服务端代码如下:) $dataArr = array( 'appid' => $appId,'mch_id' => $mchId,'nonce_str' => getNonceStr(),'body' => $body,'attach' => $attach,'out_trade_no' => getNonceStr(),'total_fee' => $totalFee,'spbill_create_ip' => $cIp,'notify_url' => $url,'trade_type' => 'APP'); //转XML格式 function createXML($rootNode, $arr) { //创建一个文档,文档时xml的,版本号为1.0,编码格式utf-8$xmlObj = new DOMDocument('1.0', 'UTF-8');//创建根节点$Node = $xmlObj->createElement($rootNode);//把创建好的节点加到文档中$root = $xmlObj->appendChild($Node);//开始把数组中的数据加入文档foreach ($arr as $key => $value) { //如果是$value是一个数组 if (is_array($value)) { //先创建一个节点 $childNode = $xmlObj->createElement($key); //将节点添加到$root中 $root->appendChild($childNode); //循环添加数据 foreach ($value as $key2 => $val2) { //创建节点的同时添加数据 $childNode2 = $xmlObj->createElement($key2, $val2); //将节点添加到$childNode $childNode->appendChild($childNode2); } } else { //创建一个节点,根据键和值 $childNode = $xmlObj->createElement($key, $value); //把节点加到根节点 $root->appendChild($childNode); }}//把创建好的xml保存到本地$xmlObj->save('xml/log.xml');$str = $xmlObj->saveXML();// echo $str; ...

April 30, 2019 · 2 min · jiezi

txLive模块(直播类)试用分享

txLive 模块封装了腾讯云直播服务 https://docs.apicloud.com/Cli...经过试用,这个模块堪称最简单最快速能使用起来的直播模块。界面上的按钮,根据自己的需要,可以显示和隐藏。带有各种美颜功能(美白、瘦脸、V形脸)。推流的码率和清晰度可以设置。 使用流程: 注册腾讯云平台进行实名认证开通直播服务生成推流地址(https://cloud.tencent.com/doc...) 推流界面截图: <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" /> <title>title</title> <link rel="stylesheet" type="text/css" href="../css/api.css" /> <style> body { padding-top: 160px; height: 1000px; } .content { margin-top: 350px; } button { margin: 10px; } </style></head><body> <div class="content"> <button tapmode type="button" onclick="openPusher()" name="button">openPusher</button> <button tapmode type="button" onclick="openPlayer()" name="button">openPlayer</button> <button tapmode type="button" onclick="setLiveBtnsVisibility()" name="button">setLiveBtnsVisibility</button> </div></body><script type="text/javascript" src="../script/api.js"></script><script type="text/javascript"> apiready = function() { }; function openPusher() { var txLive = api.require('txLive'); txLive.openPusher({ x: 0, y: 50, h: 350, w: api.winWidth, fixedOn: api.frameName, fixed: false, url: "" //填写腾讯云平台上生成的推流地址 }); }//播放接口,播放端使用 function openPlayer() { var txLive = api.require('txLive'); txLive.openPlayer({ x: 0, y: 0, url: "" //填写腾讯云平台上生成的播放地址 }); } function setLiveBtnsVisibility() { var txLive = api.require('txLive'); txLive.setLiveBtnsVisibility({ "btnid": "btnLog", "show": 0 }); }</script></html>复制代码 ...

April 22, 2019 · 1 min · jiezi