
苹果APP上架App Store被拒常见问题4.2、4.2等条款及解决思路
苹果APP的审核是一道大难关,遇见被拒是很正常的事情,如果被拒就根据反馈问题,和下面提供的思路去寻求解决方案。
苹果审核大体分为三部分,预审、机审和人工审核。
ipa包上传后首先进入的是预审,会被扫描API等,预审通过后会在https://itunesconnect.apple.com/后台活动那出现构建版本,然后才可以提交审核(如果没通过,会有反馈邮件,查看原因,很多上传ipa成功了,但后台没看到ipa构建版本,就是预审都没过。)
在 提交审核开始显示是(等待审核)这个阶段一般是机审,机审主要是对代码进行机器审核,排查APP是否重复应用,“2.1苹果狗年大礼包”事件就更多地依赖机器自动审核,减少人工成本;
通过后会显示为(审核)这个阶段,即人工审核阶段,这个阶段主要看的是App的元数据,例如APP封面、功能、体验等等,注重用户体验,到了这步很快就会有结果了。
目前机审机制越来越完善了,而且也越来越受重视,相比前几个月,近期的苹果审核时间逐渐缩短,平均审核时间为23.9 小时。
2.1 App 完成度
主要有应用出现崩溃、加载失败等非常明显的Bug、应用不支持 IPv6网络下使用、测试账号、隐藏开关等。
解决方法:提前测试产品是否有bug、在IPV6网络下是否能使用等,根据反馈邮件,一个个审查自身产品信息是否符合,适当情况下可以发送截图视频给苹果官方以证明自己的清白。
2.3 准确的元数据
主要是应用标题、描述、截图等与应用功能严重不符。如用安卓手机截图,浏览器截图!
解决方法:重新更换截图,保证整个APP功能、流程看起来是一致的。去除隐藏功能模块代码或将需要隐藏功能的代码及定向跳转链接网址做混淆处理,适当增加逻辑复杂度。
3.2.1 可接受的商业模式
主要是没有资质。
解决方法:最佳方案是拿到资质,如果实在没有资质,建议大家尽可能多的把自己公司合规的证据资料发给苹果,而套壳、换新账号碰运气上架等操作,不得已的话可以尝试。
5.1.1 数据收集和存储
主要是App 强制用户注册,且基于不需要用户信息的功能之上、暗中采集/共享用户的个人信息。
解决方法:先与用户协商,让用户同意后注册,有“强登陆”功能的一定要修改为提示登陆的版本。
4.3 重复 App
主要针对的是重复App,意思就是你的App跟别人上架的APP功能或者代码很相似,通常就是苹果认为是马甲包。
解决办法:可通过修改名字、icon、主色调、代码等解决,并且注意相同的APP包提交至少间隔一天以上。
4.2 最低功能要求
主要问题在于苹果认为部分开发者上传的App功能不够,或者没有自己的核心功能,比如直接打包一个网页上架的很容易触发这个问题。
解决办法:可以添加一些功能丰富产品(导航栏,下拉刷新,推送通知等功能),如果觉得功能已经全了,还没有通过审核,可以向苹果解释产品解决的用户需求,以及具体功能的展现。
3.1.1 购买项目
主要是接入第三方支付,支付宝、微信等。
解决方法:老老实实地走苹果支付的支付方式,用内购。如果隐藏虚拟产品或者通过后更改支付方式,都是有一定风险的。
2.5 软件要求
主要是产品加入违规代码
解决方法:很可能是三方库中含有SDK,可以更新所有三方库,或者反编译提交的ipa,检查文档中是否有违规字符串,有的话删掉。
5.1.5 定位服务
主要是 App 未得到允许,与第三方共享收集的用户数据,且并未说明使用目的等,例:位置、账号……
解决方法:如果要采取用户数据信息,需要给予用户提示,并得到用户的允许,或设置为可选,并且明确告知苹果采集用户数据信息的使用目的。总的来说就是要弹出提示说明使用这个权限做什么用,写清楚。
5.2 知识产权
主要是未经授权,使用受版权保护的第三方材料、App不得与苹果现有产品类似等。
解决方法:确保 app 只包含由您创建或拥有使用许可的内容,提交产品时使用受版权保护的第三方的书面证据或者将产品中包含的未经第三方授权的部分隐藏。
审核还会遇到各种各样的问题,根据反馈来进行相应的修改。
苹果APP的审核是一道大难关,遇见被拒是很正常的事情,如果被拒就根据反馈问题,和下面提供的思路去寻求解决方案。
苹果审核大体分为三部分,预审、机审和人工审核。
ipa包上传后首先进入的是预审,会被扫描API等,预审通过后会在https://itunesconnect.apple.com/后台活动那出现构建版本,然后才可以提交审核(如果没通过,会有反馈邮件,查看原因,很多上传ipa成功了,但后台没看到ipa构建版本,就是预审都没过。)
在 提交审核开始显示是(等待审核)这个阶段一般是机审,机审主要是对代码进行机器审核,排查APP是否重复应用,“2.1苹果狗年大礼包”事件就更多地依赖机器自动审核,减少人工成本;
通过后会显示为(审核)这个阶段,即人工审核阶段,这个阶段主要看的是App的元数据,例如APP封面、功能、体验等等,注重用户体验,到了这步很快就会有结果了。
目前机审机制越来越完善了,而且也越来越受重视,相比前几个月,近期的苹果审核时间逐渐缩短,平均审核时间为23.9 小时。
2.1 App 完成度
主要有应用出现崩溃、加载失败等非常明显的Bug、应用不支持 IPv6网络下使用、测试账号、隐藏开关等。
解决方法:提前测试产品是否有bug、在IPV6网络下是否能使用等,根据反馈邮件,一个个审查自身产品信息是否符合,适当情况下可以发送截图视频给苹果官方以证明自己的清白。
2.3 准确的元数据
主要是应用标题、描述、截图等与应用功能严重不符。如用安卓手机截图,浏览器截图!
解决方法:重新更换截图,保证整个APP功能、流程看起来是一致的。去除隐藏功能模块代码或将需要隐藏功能的代码及定向跳转链接网址做混淆处理,适当增加逻辑复杂度。
3.2.1 可接受的商业模式
主要是没有资质。
解决方法:最佳方案是拿到资质,如果实在没有资质,建议大家尽可能多的把自己公司合规的证据资料发给苹果,而套壳、换新账号碰运气上架等操作,不得已的话可以尝试。
5.1.1 数据收集和存储
主要是App 强制用户注册,且基于不需要用户信息的功能之上、暗中采集/共享用户的个人信息。
解决方法:先与用户协商,让用户同意后注册,有“强登陆”功能的一定要修改为提示登陆的版本。
4.3 重复 App
主要针对的是重复App,意思就是你的App跟别人上架的APP功能或者代码很相似,通常就是苹果认为是马甲包。
解决办法:可通过修改名字、icon、主色调、代码等解决,并且注意相同的APP包提交至少间隔一天以上。
4.2 最低功能要求
主要问题在于苹果认为部分开发者上传的App功能不够,或者没有自己的核心功能,比如直接打包一个网页上架的很容易触发这个问题。
解决办法:可以添加一些功能丰富产品(导航栏,下拉刷新,推送通知等功能),如果觉得功能已经全了,还没有通过审核,可以向苹果解释产品解决的用户需求,以及具体功能的展现。
3.1.1 购买项目
主要是接入第三方支付,支付宝、微信等。
解决方法:老老实实地走苹果支付的支付方式,用内购。如果隐藏虚拟产品或者通过后更改支付方式,都是有一定风险的。
2.5 软件要求
主要是产品加入违规代码
解决方法:很可能是三方库中含有SDK,可以更新所有三方库,或者反编译提交的ipa,检查文档中是否有违规字符串,有的话删掉。
5.1.5 定位服务
主要是 App 未得到允许,与第三方共享收集的用户数据,且并未说明使用目的等,例:位置、账号……
解决方法:如果要采取用户数据信息,需要给予用户提示,并得到用户的允许,或设置为可选,并且明确告知苹果采集用户数据信息的使用目的。总的来说就是要弹出提示说明使用这个权限做什么用,写清楚。
5.2 知识产权
主要是未经授权,使用受版权保护的第三方材料、App不得与苹果现有产品类似等。
解决方法:确保 app 只包含由您创建或拥有使用许可的内容,提交产品时使用受版权保护的第三方的书面证据或者将产品中包含的未经第三方授权的部分隐藏。
审核还会遇到各种各样的问题,根据反馈来进行相应的修改。
收起阅读 »
素与简科技:水果店小程序门店小程序开发?如何借力微信小程序?
门店经营最需要考虑的就是获得客户,在线下实体门店经营中,因为租金和人工成本的不断上涨,导致获客成本也随之不断上涨,仅靠线下门店获取客户,门店难以生存。
纯靠线下卖水果,就是看天吃饭,因为租金和人工成本的不断上涨,导致获客成本也随之不断上涨,仅靠线下门店获取客户,门店难以生存。小程序通过二维码即可进入,线下门店通过小程序作为线上渠道进行营销和会员管理行之有效。
一.生鲜水果店如何借力微信小程序?
1、线上线下会员沉淀
生鲜水果店可以通过微信小程序实现会员功能,包括会员积分,会员充值、会员等级,借助微信的用户数据,为用户加上会员标签、特征分组、从而实现精准营销。
2、新鲜到家,快速送达
当前社会,90后已经成为了新的消费群体,90后中最流行的购物方式是网购。很多人都在家里买过水果,价格实惠,还省去了到店挑选的时间。如果附近小区或者办公室有对应的生鲜店铺,并且品质可靠,我相信很多人都会选择在线购买水果。外卖配送的形式,还能够解决店铺高峰拥挤的问题,提高效率。
二.借力微信小程序,生鲜水果店如何运营?
微信小程序上线以来,给实体店面水果店等一个新的出路,来店消费的基本都是周边社区住户,在社区内推广店家的微信小程序也比较容易,节日营销:生日送祝福、消费奖励、优惠券赠送,提高到店人流;促销工具:秒杀、限时抢购、团购、满额返、分享红包等,提高店铺销量。水果店可以通过微信小程序累计会员积分、会员等级,从而达到自动化高效运营会员;借助微信的用户数据,为用户加上会员标签、特征分组,进而精准营销。
通过生鲜水果小程序吸引附近的用户,为线下店铺引流比如利用消费奖励、优惠券赠送等活动,增加店内的客流量。打开小程序,首先进入眼球的就是领取会员卡的提示,非常显眼,包括门店地址、营业时间、联系方式和门店照片。信息简单而全面,界面主题突出,进来的用户都会自然而然的点击领取会员卡……等等。
小程序开发推荐深圳素与简科技有限公司(www.suyujane.com)多年软件开发经验,海量的开发案例可供参考,看得见的开发经验,让客户更加的省心省力。技术团队都是10年开发工程师,完善的售后服务体系,保障项目开发顺利进行。
门店经营最需要考虑的就是获得客户,在线下实体门店经营中,因为租金和人工成本的不断上涨,导致获客成本也随之不断上涨,仅靠线下门店获取客户,门店难以生存。
纯靠线下卖水果,就是看天吃饭,因为租金和人工成本的不断上涨,导致获客成本也随之不断上涨,仅靠线下门店获取客户,门店难以生存。小程序通过二维码即可进入,线下门店通过小程序作为线上渠道进行营销和会员管理行之有效。
一.生鲜水果店如何借力微信小程序?
1、线上线下会员沉淀
生鲜水果店可以通过微信小程序实现会员功能,包括会员积分,会员充值、会员等级,借助微信的用户数据,为用户加上会员标签、特征分组、从而实现精准营销。
2、新鲜到家,快速送达
当前社会,90后已经成为了新的消费群体,90后中最流行的购物方式是网购。很多人都在家里买过水果,价格实惠,还省去了到店挑选的时间。如果附近小区或者办公室有对应的生鲜店铺,并且品质可靠,我相信很多人都会选择在线购买水果。外卖配送的形式,还能够解决店铺高峰拥挤的问题,提高效率。
二.借力微信小程序,生鲜水果店如何运营?
微信小程序上线以来,给实体店面水果店等一个新的出路,来店消费的基本都是周边社区住户,在社区内推广店家的微信小程序也比较容易,节日营销:生日送祝福、消费奖励、优惠券赠送,提高到店人流;促销工具:秒杀、限时抢购、团购、满额返、分享红包等,提高店铺销量。水果店可以通过微信小程序累计会员积分、会员等级,从而达到自动化高效运营会员;借助微信的用户数据,为用户加上会员标签、特征分组,进而精准营销。
通过生鲜水果小程序吸引附近的用户,为线下店铺引流比如利用消费奖励、优惠券赠送等活动,增加店内的客流量。打开小程序,首先进入眼球的就是领取会员卡的提示,非常显眼,包括门店地址、营业时间、联系方式和门店照片。信息简单而全面,界面主题突出,进来的用户都会自然而然的点击领取会员卡……等等。
小程序开发推荐深圳素与简科技有限公司(www.suyujane.com)多年软件开发经验,海量的开发案例可供参考,看得见的开发经验,让客户更加的省心省力。技术团队都是10年开发工程师,完善的售后服务体系,保障项目开发顺利进行。
收起阅读 »
素与简科技:餐饮外卖小程序功能营销
餐饮行业属于典型的高频+刚需,外卖将线下餐饮搬到了线上,并通过配送实现了线上线下的连接和商户和用户的连接,极大的方便的我们的生活。
小程序对于餐饮行业的商家来说,是降低了运营的成本,提高了效率,实现线上线下的融合,整合双向流量,并且商家可以自主实现客流量的精细化运营的能力,成为本地商户提升竞争力的关键。
餐饮外卖小程序,为帮助餐饮外卖商户更好地利用移动互联网触达和管理客户,以强大的会员系统和丰富多元的营销方式,帮助餐厅搭建属于自己的外卖平台,实现自主运营和高效管理。
1、为什么餐饮外卖小程序?
近几年,越来越多餐企通过接入外卖平台开展外卖业务。外卖业务的开展,帮助商家扩展了经营能力,提升了门店营收。但通过第三方平台获客无法掌握核心的用户数据且需缴纳平台佣金,导致商户失去营销自主性,外卖利润越摊越薄。
为解决商家在外卖业务上的现实难题,小编推出餐饮外卖小程序解决方案,基于小程序,帮助商户搭建属于自己的外卖平台。餐饮外卖小程序打通“点餐-支付-出票-配送”等各个环节,实现一体化的营销管理。商户可自主创建外卖菜单,配置营业时间、配送范围、配送费用等参数,顾客在微信上就能完成下单支付,商户则可通过系统后台接收顾客订单,实现便捷的订单管理。
2、餐饮外卖小程序有哪些营销功能?
在会员营销方面,餐饮外卖小程序,提供了强大的会员营销功能,比如积分商城和优惠买单等,帮助商户深化会员运营,提升会员复购。
比如商户可借助餐饮外卖小程序的会员能力实现会员等级、会员管理、会员社交营销等,进行精准的拓客留存。同时,餐饮外卖小程序还上线了“积分商城”,商户可运用“积分奖励”刺激会员消费,通过积分商城有效沉淀会员,提升用户忠诚度。
另外,餐饮外卖小程序上线了“优惠买单”功能,通过买单场景的“支付即关注”,助力商户沉淀线上线下流量,同时也为外卖顾客提供更加全面的服务。
小程序开发推荐深圳素与简科技有限公司(www.suyujane.com)多年软件开发经验,海量的开发案例可供参考,看得见的开发经验,让客户更加的省心省力。技术团队都是10年开发工程师,完善的售后服务体系,保障项目开发顺利进行。
餐饮行业属于典型的高频+刚需,外卖将线下餐饮搬到了线上,并通过配送实现了线上线下的连接和商户和用户的连接,极大的方便的我们的生活。
小程序对于餐饮行业的商家来说,是降低了运营的成本,提高了效率,实现线上线下的融合,整合双向流量,并且商家可以自主实现客流量的精细化运营的能力,成为本地商户提升竞争力的关键。
餐饮外卖小程序,为帮助餐饮外卖商户更好地利用移动互联网触达和管理客户,以强大的会员系统和丰富多元的营销方式,帮助餐厅搭建属于自己的外卖平台,实现自主运营和高效管理。
1、为什么餐饮外卖小程序?
近几年,越来越多餐企通过接入外卖平台开展外卖业务。外卖业务的开展,帮助商家扩展了经营能力,提升了门店营收。但通过第三方平台获客无法掌握核心的用户数据且需缴纳平台佣金,导致商户失去营销自主性,外卖利润越摊越薄。
为解决商家在外卖业务上的现实难题,小编推出餐饮外卖小程序解决方案,基于小程序,帮助商户搭建属于自己的外卖平台。餐饮外卖小程序打通“点餐-支付-出票-配送”等各个环节,实现一体化的营销管理。商户可自主创建外卖菜单,配置营业时间、配送范围、配送费用等参数,顾客在微信上就能完成下单支付,商户则可通过系统后台接收顾客订单,实现便捷的订单管理。
2、餐饮外卖小程序有哪些营销功能?
在会员营销方面,餐饮外卖小程序,提供了强大的会员营销功能,比如积分商城和优惠买单等,帮助商户深化会员运营,提升会员复购。
比如商户可借助餐饮外卖小程序的会员能力实现会员等级、会员管理、会员社交营销等,进行精准的拓客留存。同时,餐饮外卖小程序还上线了“积分商城”,商户可运用“积分奖励”刺激会员消费,通过积分商城有效沉淀会员,提升用户忠诚度。
另外,餐饮外卖小程序上线了“优惠买单”功能,通过买单场景的“支付即关注”,助力商户沉淀线上线下流量,同时也为外卖顾客提供更加全面的服务。
小程序开发推荐深圳素与简科技有限公司(www.suyujane.com)多年软件开发经验,海量的开发案例可供参考,看得见的开发经验,让客户更加的省心省力。技术团队都是10年开发工程师,完善的售后服务体系,保障项目开发顺利进行。
收起阅读 »
关于uniapp获取应用版本号
昨天要写app的版本升级,没有找到获取versionCode的方法,也是钻了牛角尖,找了半天发现根本没有这个方法,那怎么办呢。
其实可以这样,手动把版本号与版本名称对应,比如,应用版本名称是1.0.0,版本号就写成100,1.0.1就对应101,这样,用plus.runtime.version就可以获取到版本名称,格式是1.1.1这样,然后(plus.runtime.version).split('.').join('');就是对应的版本号了。
昨天要写app的版本升级,没有找到获取versionCode的方法,也是钻了牛角尖,找了半天发现根本没有这个方法,那怎么办呢。
其实可以这样,手动把版本号与版本名称对应,比如,应用版本名称是1.0.0,版本号就写成100,1.0.1就对应101,这样,用plus.runtime.version就可以获取到版本名称,格式是1.1.1这样,然后(plus.runtime.version).split('.').join('');就是对应的版本号了。

Windows: sass/scss插件安装问题的解决方案
如果您不会npm,最省事的解决办法:直接看本文第三节
sass、scss插件在windows下的国内环境,有时会因为连不上npm服务器导致下载失败。解决方案如下:
1. sass安装失败
有的小伙伴安装sass
插件,提示如下;

不要着急,根据提示来。
解决方法1:
如果您本机安装了npm,那就执行此步骤。否则参考解决方法2
。打开命令行,进入HBuilderX\plugins\compile-node-sass
目录
npm install
如果还报错,查看报错日志
,有可能是网络原因,也有可能是npm版本
的问题。那就试试解决方法2
解决方法2:
在HBuilderX中,按下alt + C
,打开终端,进入plugins\compile-node-sass
目录,执行npm install
如果还安装不上,有可能是npm
版本的问题, 使用HBuilderX 自带的npm
试试。直接在compile-node-sass
目录输入如下命令
..\npm\npm install
2. 安装sass插件后,报错,提示:编译scss文件提示:\node-sass-china\vendor\win32-x64-64\binding.node缺失
近来,有部分用户反馈sass/scss插件安装后,编译scss文件提示:\node-sass-china\vendor\win32-x64-64\binding.node缺失。
问题截图:
解决方法1:
打开命令行,进入HBuilderX\plugins\compile-node-sass
目录,删除node_modules,执行npm install
重新安装
注意: npm不要使用淘宝源,npm淘宝源,安装有问题。
> npm config set registry https://registry.npmjs.org
> npm install
解决办法2:
- 在HBuilderX安装目录下,进入\plugins\compile-node-sass\node_modules\node-sass-china\vendor目录
- 手动创建目录
- 然后到github node-sass https://github.com/sass/node-sass/releases 手动下载相关版本
binding.node
- 把下载的文件放到相关目录,然后重命名为:binding.node
- 重启hx
3. windows Sass安装终极解决方案:
如果上面的两个解决方案还不行,小编已经将本机安装好的sass插件,打包成压缩包了。下载解压即可。
见附件的zip压缩包: sass压缩包下载地址
将压缩包里的compile-node-sass目录解压到HBuilderX安装目录下的\plugins目录。比如C:\HBuilderX\plugins下。
4. 卸载sass失败
还有小伙伴反应,在插件安装中,卸载sass插件
,提示卸载失败
。
那有可能是node
被占用了,关闭HBuilderX,并关闭掉HBuilderX所有相关的进程
,特别是node进程
。然后重启HBuilderX再试
uni-app cli项目的sass/scss安装
cli项目的编译器是安装在项目下的,不是HBuilderX的插件。
所以cli项目安装scss等插件需要在项目下npm手动安装。这个插件npm安装时确实经常连不上,可能需要翻墙。如果实在搞不定,建议换为HBuilderX创建项目,或把cli项目的src拖入HBuilderX,使用HBuilderX的插件来编译。
如果您不会npm,最省事的解决办法:直接看本文第三节
sass、scss插件在windows下的国内环境,有时会因为连不上npm服务器导致下载失败。解决方案如下:
1. sass安装失败
有的小伙伴安装sass
插件,提示如下;
不要着急,根据提示来。
解决方法1:
如果您本机安装了npm,那就执行此步骤。否则参考解决方法2
。打开命令行,进入HBuilderX\plugins\compile-node-sass
目录
npm install
如果还报错,查看报错日志
,有可能是网络原因,也有可能是npm版本
的问题。那就试试解决方法2
解决方法2:
在HBuilderX中,按下alt + C
,打开终端,进入plugins\compile-node-sass
目录,执行npm install
如果还安装不上,有可能是npm
版本的问题, 使用HBuilderX 自带的npm
试试。直接在compile-node-sass
目录输入如下命令
..\npm\npm install
2. 安装sass插件后,报错,提示:编译scss文件提示:\node-sass-china\vendor\win32-x64-64\binding.node缺失
近来,有部分用户反馈sass/scss插件安装后,编译scss文件提示:\node-sass-china\vendor\win32-x64-64\binding.node缺失。
问题截图:
解决方法1:
打开命令行,进入HBuilderX\plugins\compile-node-sass
目录,删除node_modules,执行npm install
重新安装
注意: npm不要使用淘宝源,npm淘宝源,安装有问题。
> npm config set registry https://registry.npmjs.org
> npm install
解决办法2:
- 在HBuilderX安装目录下,进入\plugins\compile-node-sass\node_modules\node-sass-china\vendor目录
- 手动创建目录
- 然后到github node-sass https://github.com/sass/node-sass/releases 手动下载相关版本
binding.node
- 把下载的文件放到相关目录,然后重命名为:binding.node
- 重启hx
3. windows Sass安装终极解决方案:
如果上面的两个解决方案还不行,小编已经将本机安装好的sass插件,打包成压缩包了。下载解压即可。
见附件的zip压缩包: sass压缩包下载地址
将压缩包里的compile-node-sass目录解压到HBuilderX安装目录下的\plugins目录。比如C:\HBuilderX\plugins下。
4. 卸载sass失败
还有小伙伴反应,在插件安装中,卸载sass插件
,提示卸载失败
。
那有可能是node
被占用了,关闭HBuilderX,并关闭掉HBuilderX所有相关的进程
,特别是node进程
。然后重启HBuilderX再试
uni-app cli项目的sass/scss安装
cli项目的编译器是安装在项目下的,不是HBuilderX的插件。
所以cli项目安装scss等插件需要在项目下npm手动安装。这个插件npm安装时确实经常连不上,可能需要翻墙。如果实在搞不定,建议换为HBuilderX创建项目,或把cli项目的src拖入HBuilderX,使用HBuilderX的插件来编译。
收起阅读 »
素与简科技:分享三种不常见的小程序商城系统功能
小程序商城系统作为一个线上商城系统,商品展示、购买下单、微信支付、后台管理等线上商城的基本功能,这些功能只是基础功能,想要运营好小程序商城这些功能肯定是不够的,而运营商城那我们需要的功能就要有很多了,例如会员管理,分销,积分,砍价,拼团等都是商城运营需要的功能,当然,线下的支持也是少不了的,这里小编要介绍的是小程序商城的其它不常见却极其适用的功能。
1、定位功能
大家都知道小程序开发者开发了“附近的小程序”,而其是在地理位置定位的技术支撑下实现的。
小程序商城系统当然也该有着这种技术来支持,用LBS定位的技术提供最后一公里的服务,会员根据这个定位可以选择周边门店的购物服务,门店就可以提供配送自提或者预约的服务,这种模式就将小程序商城的线上线下定位体现得淋漓尽致。
2、特殊推广功能
各种商城系统都有自己的推广模式,不过大多会存在相同或相似的情况。
而小程序商城系统拥有自己的线上营销推广与营销活动模式,其营销中心除了拥有商品满额或者满件促销、优惠券促销等基本促销模式,还能根据会员等级分级促销、支持店铺推送营销等特别功能,线上的推广渠道较宽,能较好提升用户成单率与回购率。
3、打通供销平台
微信小程序商城系统打造的是采购与销售一体化的平台。
除了供应商与门店资源进行整合之外,还能想消费者推荐附近门店服务,将商家的供应链条与商家跟消费者之间的信息链条打通,用提供服务来获得效益,让信息更能及时传送,商品流通环节减少,为商家以及消费者都带来利益。
小程序开发推荐深圳素与简科技有限公司(www.suyujane.com)多年软件开发经验,海量的开发案例可供参考,看得见的开发经验,让客户更加的省心省力。技术团队都是10年开发工程师,完善的售后服务体系,保障项目开发顺利进行。
小程序商城系统作为一个线上商城系统,商品展示、购买下单、微信支付、后台管理等线上商城的基本功能,这些功能只是基础功能,想要运营好小程序商城这些功能肯定是不够的,而运营商城那我们需要的功能就要有很多了,例如会员管理,分销,积分,砍价,拼团等都是商城运营需要的功能,当然,线下的支持也是少不了的,这里小编要介绍的是小程序商城的其它不常见却极其适用的功能。
1、定位功能
大家都知道小程序开发者开发了“附近的小程序”,而其是在地理位置定位的技术支撑下实现的。
小程序商城系统当然也该有着这种技术来支持,用LBS定位的技术提供最后一公里的服务,会员根据这个定位可以选择周边门店的购物服务,门店就可以提供配送自提或者预约的服务,这种模式就将小程序商城的线上线下定位体现得淋漓尽致。
2、特殊推广功能
各种商城系统都有自己的推广模式,不过大多会存在相同或相似的情况。
而小程序商城系统拥有自己的线上营销推广与营销活动模式,其营销中心除了拥有商品满额或者满件促销、优惠券促销等基本促销模式,还能根据会员等级分级促销、支持店铺推送营销等特别功能,线上的推广渠道较宽,能较好提升用户成单率与回购率。
3、打通供销平台
微信小程序商城系统打造的是采购与销售一体化的平台。
除了供应商与门店资源进行整合之外,还能想消费者推荐附近门店服务,将商家的供应链条与商家跟消费者之间的信息链条打通,用提供服务来获得效益,让信息更能及时传送,商品流通环节减少,为商家以及消费者都带来利益。
小程序开发推荐深圳素与简科技有限公司(www.suyujane.com)多年软件开发经验,海量的开发案例可供参考,看得见的开发经验,让客户更加的省心省力。技术团队都是10年开发工程师,完善的售后服务体系,保障项目开发顺利进行。
收起阅读 »
监听状态栏通知代码,android
new Vue({
el: '#app',
data(){
return{
auth: false,
listening: false,
main:'',
msg: {},
callBackUrl:''
}
},
created() {
// 初始化
this.init()
},
methods: {
init(){
var that = this
document.addEventListener('plusready', function(){
// 导入android类对象
var Intent = plus.android.importClass("android.content.Intent");
var context = plus.android.importClass("android.content.Context");//获取上下文
var ComponentName = plus.android.importClass("android.content.ComponentName");
var PackageManager = plus.android.importClass("android.content.pm.PackageManager");
var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
var IntentFilter = plus.android.importClass('android.content.IntentFilter'); //引入过滤器
var Intent = plus.android.importClass('android.content.Intent');
var ActivityManager = plus.android.importClass("android.app.ActivityManager");
plus.android.importClass("java.util.List");
plus.android.importClass("java.util.Set");
// 获取主Activity对象的实例
that.main = plus.android.runtimeMainActivity();
var filter = new IntentFilter();
var intent = new Intent();
//启动短信监听
intent.setClassName(that.main, "com.cnupai.listen.server.WeChatNotificationListenerService");
that.main.startService(intent);
//检测通知权限是否打开
function isNotificationListenerServiceEnabled(){
var packageNames = NotificationManagerCompat.getEnabledListenerPackages(that.main);
if (packageNames.contains(that.main.getPackageName())) {
console.log(1);
that.auth = true;
}else{
console.log(0);
that.auth = false;
var Intent = plus.android.importClass('android.content.Intent');
that.main.startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
}
};
//重新绑定 reBind
var thisComponent = new ComponentName(that.main, "com.cnupai.listen.server.WeChatNotificationListenerService" )
var pm = that.main.getPackageManager();
pm.setComponentEnabledSetting(thisComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(thisComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
var receiver = plus.android.implements("io.dcloud.feature.internal.reflect.BroadcastReceiver",{
onReceive:function(context,intent){
plus.android.importClass(intent);
//console.log(intent.getExtra("notificationInfo"));
that.msg = JSON.parse(intent.getExtra("notificationInfo"));
axios.post(that.callBackUrl, that.msg).then(res=>{
console.log(res);
}).catch(e=>{
console.log(e);
});
//that.msgList = [JSON.parse(intent.getExtra("notificationInfo"))].concat(that.msgList);
}
});
filter.addAction('location.reportsucc') //监听扫码广播
that.main.registerReceiver(receiver, filter); //注册监听
//检测是否在运行
function isServiceRunning(){
var activityManager=that.main.getSystemService(context.ACTIVITY_SERVICE);
that.listening = plus.android.invoke('com.cnupai.listen.server.Util', 'isServiceRunning', activityManager, 'com.cnupai.listen.server.WeChatNotificationListenerService');
if(that.listening){
console.log('监听中');
}else{
console.log('未监听,重新绑定');
//that.main.startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
intent.setClassName(that.main, "com.cnupai.listen.server.WeChatNotificationListenerService");
/** 退出Activity是,停止服务 */
//main.stopService(intent);
that.main.startService(intent);
}
};
setInterval(isServiceRunning, 3000);
setInterval(isNotificationListenerServiceEnabled, 3000);
});
},
openAuth(){
var Intent = plus.android.importClass('android.content.Intent');
this.main.startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
}
}
})
new Vue({
el: '#app',
data(){
return{
auth: false,
listening: false,
main:'',
msg: {},
callBackUrl:''
}
},
created() {
// 初始化
this.init()
},
methods: {
init(){
var that = this
document.addEventListener('plusready', function(){
// 导入android类对象
var Intent = plus.android.importClass("android.content.Intent");
var context = plus.android.importClass("android.content.Context");//获取上下文
var ComponentName = plus.android.importClass("android.content.ComponentName");
var PackageManager = plus.android.importClass("android.content.pm.PackageManager");
var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
var IntentFilter = plus.android.importClass('android.content.IntentFilter'); //引入过滤器
var Intent = plus.android.importClass('android.content.Intent');
var ActivityManager = plus.android.importClass("android.app.ActivityManager");
plus.android.importClass("java.util.List");
plus.android.importClass("java.util.Set");
// 获取主Activity对象的实例
that.main = plus.android.runtimeMainActivity();
var filter = new IntentFilter();
var intent = new Intent();
//启动短信监听
intent.setClassName(that.main, "com.cnupai.listen.server.WeChatNotificationListenerService");
that.main.startService(intent);
//检测通知权限是否打开
function isNotificationListenerServiceEnabled(){
var packageNames = NotificationManagerCompat.getEnabledListenerPackages(that.main);
if (packageNames.contains(that.main.getPackageName())) {
console.log(1);
that.auth = true;
}else{
console.log(0);
that.auth = false;
var Intent = plus.android.importClass('android.content.Intent');
that.main.startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
}
};
//重新绑定 reBind
var thisComponent = new ComponentName(that.main, "com.cnupai.listen.server.WeChatNotificationListenerService" )
var pm = that.main.getPackageManager();
pm.setComponentEnabledSetting(thisComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(thisComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
var receiver = plus.android.implements("io.dcloud.feature.internal.reflect.BroadcastReceiver",{
onReceive:function(context,intent){
plus.android.importClass(intent);
//console.log(intent.getExtra("notificationInfo"));
that.msg = JSON.parse(intent.getExtra("notificationInfo"));
axios.post(that.callBackUrl, that.msg).then(res=>{
console.log(res);
}).catch(e=>{
console.log(e);
});
//that.msgList = [JSON.parse(intent.getExtra("notificationInfo"))].concat(that.msgList);
}
});
filter.addAction('location.reportsucc') //监听扫码广播
that.main.registerReceiver(receiver, filter); //注册监听
//检测是否在运行
function isServiceRunning(){
var activityManager=that.main.getSystemService(context.ACTIVITY_SERVICE);
that.listening = plus.android.invoke('com.cnupai.listen.server.Util', 'isServiceRunning', activityManager, 'com.cnupai.listen.server.WeChatNotificationListenerService');
if(that.listening){
console.log('监听中');
}else{
console.log('未监听,重新绑定');
//that.main.startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
intent.setClassName(that.main, "com.cnupai.listen.server.WeChatNotificationListenerService");
/** 退出Activity是,停止服务 */
//main.stopService(intent);
that.main.startService(intent);
}
};
setInterval(isServiceRunning, 3000);
setInterval(isNotificationListenerServiceEnabled, 3000);
});
},
openAuth(){
var Intent = plus.android.importClass('android.content.Intent');
this.main.startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
}
}
})
收起阅读 »

素与简科技:微信小程序商城开发,必须开发哪些功能模块?
业内很多企业都希望进入小程序市场发展,并结合行业特点,很多人会考虑以小程序商城的形式进入。因此,微信小程序商城的发展已成为他们进入这个市场的第一步。但是,在开发之前,我们仍然需要了解必须在商场中开发哪些功能模块?
在小型程序商城中可以实现哪些功能模块?在了解了功能实现的一般情况后,进行商城开发计划相对容易。
1、微信小程序商城必须开发哪些功能模块?
当微信小程序商城被定制用于开发时,必须开发一些不容错过的功能。根据完整的在线购物交易流程分析,我们可以知道必须用于完成整个交易过程的功能是:产品管理、购物结算、订单管理、在线支付、售后管理。只有当这些功能全部可用时,才能实现整个事务处理,因此它们是必须开发的功能。此外,商场管理和会员管理也是必要的。商城的一些基础设施建设需要开发商城管理功能来支持,而用户管理也需要会员管理功能来支持。因此,它们也需要开发和应用。
2、微信小程序商城开发可以实现功能模块吗?
除了必须开发的上述功能之外,还可以开发和实现微信小程序商城开发项目。例如,可以在商场中嵌入能够支持三级分发的分发系统;标签管理功能、数据管理功能、营销管理功能、点管理、权限管理等也是可实现的功能模块,可以自行选择,按需定制将更符合实际需要。
总之,在决定定制微信小程序商城的开发之后,最好首先了解它可以实现哪些功能,需要哪些功能,哪些功能不需要自己,然后根据这些可能分析小程序商城制定发展计划,并制定小规模发展的具体方向。
微信小程序开发推荐深圳素与简科技有限公司(www.suyujane.com)多年软件开发经验,海量的开发案例可供参考,看得见的开发经验,让客户更加的省心省力。技术团队都是10年开发工程师,完善的售后服务体系,保障项目开发顺利进行。
业内很多企业都希望进入小程序市场发展,并结合行业特点,很多人会考虑以小程序商城的形式进入。因此,微信小程序商城的发展已成为他们进入这个市场的第一步。但是,在开发之前,我们仍然需要了解必须在商场中开发哪些功能模块?
在小型程序商城中可以实现哪些功能模块?在了解了功能实现的一般情况后,进行商城开发计划相对容易。
1、微信小程序商城必须开发哪些功能模块?
当微信小程序商城被定制用于开发时,必须开发一些不容错过的功能。根据完整的在线购物交易流程分析,我们可以知道必须用于完成整个交易过程的功能是:产品管理、购物结算、订单管理、在线支付、售后管理。只有当这些功能全部可用时,才能实现整个事务处理,因此它们是必须开发的功能。此外,商场管理和会员管理也是必要的。商城的一些基础设施建设需要开发商城管理功能来支持,而用户管理也需要会员管理功能来支持。因此,它们也需要开发和应用。
2、微信小程序商城开发可以实现功能模块吗?
除了必须开发的上述功能之外,还可以开发和实现微信小程序商城开发项目。例如,可以在商场中嵌入能够支持三级分发的分发系统;标签管理功能、数据管理功能、营销管理功能、点管理、权限管理等也是可实现的功能模块,可以自行选择,按需定制将更符合实际需要。
总之,在决定定制微信小程序商城的开发之后,最好首先了解它可以实现哪些功能,需要哪些功能,哪些功能不需要自己,然后根据这些可能分析小程序商城制定发展计划,并制定小规模发展的具体方向。
微信小程序开发推荐深圳素与简科技有限公司(www.suyujane.com)多年软件开发经验,海量的开发案例可供参考,看得见的开发经验,让客户更加的省心省力。技术团队都是10年开发工程师,完善的售后服务体系,保障项目开发顺利进行。
收起阅读 »
如何快速开发属于自己的app?|力谱云
“定制一个App,费用好高啊!”
“定制App,周期好长啊”
“我们要组建一个APP开发团队,但是现在的人力成本好高啊!”
条条都在诉说着APP制作的艰难性。
过去开发App门槛高,几十万上百万,伤不起
这几年,移动互联网发展得如火如荼,开发一款APP成为大部分公司所需。然而,技术要求太高、开发人员稀缺、制作成本高、进度太慢、门槛太多等因素,这些问题正是很多中小型企业现阶段的痛点,APP开发并非易事。
几年前,企业制作一款App是土豪和移动开发者的专利。在移动互联网快速发展的这几年,越来越多的开发者努力学习java、C++这些热门开发工具,将一行行代码变成用户青睐的App应用。
而随着移动互联网的快速发展,更多的创业者对App开发要求越来越高,拥有一款属于自己的手机App,是抢占创业先机的重要一步!然而,原生App开发难度大,周期长,成本高,还没上线市场已经被占领了。
市场发展催生App快速制作平台
那么有没有一个平台,可以花很短时间更少预算,制作出一款适合企业的App,并且不断更新版本,后期维护成本也低呢?
回答是肯定的。市场的发展必然会引起新兴产品的诞生,云服务提供商也不断的发展。国内外的SaaS企业纷纷推出了在线制作App的功能,功能强大,操作步骤也比较简单。
快、好、省快速打造企业App
力谱云是由上海力谱宿云信息科技有限公司旗下的一款强大的APP制作平台> 。“无需编程知识,快速制作您的App”这是力谱云(LeapCloud)打出的企业口号。其彻底打破了以往的技术限制,强大之处在于可以让一个不具备编程能力、UI设计能力的人在很短的时间内就能开发出原生的App,最终提交到苹果或Android的应用程序商店。力谱云拥有丰富的应用模块,满足电商、服务、教育、咨询和社交等行业的需求。同时,力谱云还整合微官网、小程序,让商家全面覆盖移动互联网。
力谱云同时为开发者带来了更好的开发解决办法,平台中多种开发工具、全类别的第三方服务商使App开发变得简便、快速。后期的运维费用也相对较低,这也使得企业将精力放在商业模式的制定与运营上,提高了整体效率。
“定制一个App,费用好高啊!”
“定制App,周期好长啊”
“我们要组建一个APP开发团队,但是现在的人力成本好高啊!”
条条都在诉说着APP制作的艰难性。
过去开发App门槛高,几十万上百万,伤不起
这几年,移动互联网发展得如火如荼,开发一款APP成为大部分公司所需。然而,技术要求太高、开发人员稀缺、制作成本高、进度太慢、门槛太多等因素,这些问题正是很多中小型企业现阶段的痛点,APP开发并非易事。
几年前,企业制作一款App是土豪和移动开发者的专利。在移动互联网快速发展的这几年,越来越多的开发者努力学习java、C++这些热门开发工具,将一行行代码变成用户青睐的App应用。
而随着移动互联网的快速发展,更多的创业者对App开发要求越来越高,拥有一款属于自己的手机App,是抢占创业先机的重要一步!然而,原生App开发难度大,周期长,成本高,还没上线市场已经被占领了。
市场发展催生App快速制作平台
那么有没有一个平台,可以花很短时间更少预算,制作出一款适合企业的App,并且不断更新版本,后期维护成本也低呢?
回答是肯定的。市场的发展必然会引起新兴产品的诞生,云服务提供商也不断的发展。国内外的SaaS企业纷纷推出了在线制作App的功能,功能强大,操作步骤也比较简单。
快、好、省快速打造企业App
力谱云是由上海力谱宿云信息科技有限公司旗下的一款强大的APP制作平台> 。“无需编程知识,快速制作您的App”这是力谱云(LeapCloud)打出的企业口号。其彻底打破了以往的技术限制,强大之处在于可以让一个不具备编程能力、UI设计能力的人在很短的时间内就能开发出原生的App,最终提交到苹果或Android的应用程序商店。力谱云拥有丰富的应用模块,满足电商、服务、教育、咨询和社交等行业的需求。同时,力谱云还整合微官网、小程序,让商家全面覆盖移动互联网。
力谱云同时为开发者带来了更好的开发解决办法,平台中多种开发工具、全类别的第三方服务商使App开发变得简便、快速。后期的运维费用也相对较低,这也使得企业将精力放在商业模式的制定与运营上,提高了整体效率。
收起阅读 »
HBuliderX html闭合标签
1.写html标签或者自定义标签时希望添加自动闭合;
- 比如写class名称,后面输入‘=’,自动带出“”号
这些是个人优化建议
1.写html标签或者自定义标签时希望添加自动闭合;
- 比如写class名称,后面输入‘=’,自动带出“”号
这些是个人优化建议

HBuilderX技巧:利用外部命令,可以做哪些事?
本帖文档已集成到: hx产品文档
外部命令能干什么呢?
外部命令可以让您在HBuilderX中通过菜单、快捷键等方式调用外部程序或命令行
使用场景
- 压缩文件与解压
- 压缩图片
- 文档转换(比如markdown转pdf)
- 调用python、shell脚本
- 打开本地的某个程序
- 传输文件到服务器
- 操作服务器的某些服务(如启动、停止、重启nginx)
- 下载文件
- 安装apk到手机
- 上传应用到应用分发网站(比如蒲公英)
- 批量压缩
- 其它的自动化操作
- 上传文件到七牛云、阿里云等
外部命令在哪里?
菜单【工具】-->【外部命令】-->【自定义外部命令】
如下图,您可以看到几个例子
外部命令怎么用?
最后再介绍吧,先看几个例子。
例子1:压缩、解压
windows例子:
注意: windows的软件大部分安装在
Program Files
目录,需要注意空格与斜杠。如下例子
[{
"name": "文件: 压缩7z格式",
"command": "\"C:/Program\ Files/7-Zip/7z.exe\" a ${file}.7z ${file}",
"type": "process",
"key": ""
},
{
"name": "文件: 压缩zip格式",
"command": [
"C:/Program Files/7-Zip/7z.exe",
"a",
"${file}.zip",
"${file}"
],
"type": "process",
"key": ""
},
{
"name": "文件: 解压",
"command": "\"C:/Program Files/7-Zip/7z.exe\" x ${file}",
"type": "shell",
"key": ""
}
]
Mac例子:
[
{
"name": "压缩目录为bz2",
"command": "cd ${fileDir} && tar -jcvf ${fileBasename}.tar.bz2 ${fileBasename}",
"type": "terminal",
"key": "alt+shift+e"
},
{
"name": "解压zip包",
"command": "unzip ${file}",
"type": "terminal",
"key": "alt+shift+e"
}
]
例子2:调用外部python、shell等脚本
[{
"name":"调用python脚本",
"command":"python script.py",
"type" : "terminal",
"key":"alt+shift+p"
}]
例子3: 调用TinyPNG无损压缩图片
大部分情况下, 图片都是需要压缩的,为了 更快的打开网页,节省流量
推荐:TinyPNGg官网 无损压缩,良心网站,每月500张免费。
如下所示:YOUR_API_KEY
是你申请的key, --output 可以指定目录文件名,注意如果和当前图片路径一致,会覆盖原先图片
[{
"name":"调用TinyPNG无损压缩图片",
"command":"curl --user api:YOUR_API_KEY --data-binary @${file} -i https://api.tinify.com/shrink --output ${file}",
"type" : "terminal",
"key":"alt+shift+m"
}]
注意:curl是mac自带的命令,windows上如需使用curl,请下载curl 安装
例子4:下载文件
mac上下载文件的命令有:wget、curl
windows上下载文件的命令是:bitsadmin.exe
[{
"name":"下载文件",
"command":"wget -c ${userInput:输入要下载的地址url}",
"type" : "terminal",
"key":"alt+shift+m"
}]
注意: ${userInput:弹框说明}
会在当前屏幕弹框,可以输入内容
例子5: Mac: 复制项目到远程linux服务器
scp是linux和mac上才能用的命令,windows上不可以使用哦
[{
"name":"scp传输项目到服务器",
"command":"scp -r ${projectDir} 用户名@ip:服务器目录路径",
"type" : "terminal",
"key":"alt+shift+m"
}]
例子6: 远程linux服务器 重启/启动nginx服务
[{
"name":"远程服务器重启nginx",
"command":"ssh 用户@ip '/opt/nginx/sbin/nginx -s reload'",
"type" : "terminal",
"key":""
},
{
"name":"远程服务器重启nginx",
"command":"ssh 用户@ip '/opt/nginx/sbin/nginx'",
"type" : "terminal",
"key":""
}]
例子7: 使用pandoc转markdown为pdf、doc、html
pandoc是什么?
pandoc是一个软件,是一个能把千奇百怪的文档格式互相转换的神器,是一把文档转换的瑞士军刀。
安装后,可以通过命令调用。pandoc官网
pandoc结合外部命令的例子
[{
"name": "Pandoc转md为pdf",
"command": "pandoc ${file} -o ${fileBasename}.pdf",
"type": "terminal",
"key": ""
},
{
"name": "Pandoc转md为doc",
"command": "pandoc ${file} -o ${fileBasename}.docx",
"type": "terminal",
"key": ""
},
{
"name": "Pandoc转md为html",
"command": "pandoc ${file} -o ${fileBasename}.html",
"type": "terminal",
"key": ""
}
]
例子8: 安装apk到Android手机
[
{
"name": "安装apk到android手机",
"command": "adb install ${file}",
"type": "terminal",
"key": ""
}
]
例子9: 【蒲公英】内测应用上传
[
{
"name": "【蒲公英】内测应用上传",
"command": "curl -F 'file=@${file}' -F 'uKey=xxxxxxx' -F '_api_key=xxxxxx' https://upload.pgyer.com/apiv1/app/upload",
"type": "terminal",
"key": "alt+shift+m"
}
]
说明:uKey
、_api_key
需要自己申请。 网址:https://www.pgyer.com/doc/api
例子10:使用ftp
参考网友贡献http://ask.dcloud.net.cn/article/35459
例子11:使用颜色选择器
该插件目前无需外部命令配置,具体见其文档:http://ext.dcloud.net.cn/plugin?id=146
例子12: 批量压缩js文件
find是mac上的命令。windows请自行编写批处理
[{
"name": "js批量压缩",
"command": "for i in `find ${projectDir} -path ${projectDir}'/unpackage' -prune -o -name '*.js' -and ! -iname '*.min.js'`;do `/Applications/HBuilderX-Alpha.app/Contents/HBuilderX/plugins/compress-babel-minify/node_modules/.bin/minify ${i} --out-file ${i%.js*}.min.js 2>/dev/null`;[ $? -ne 0 ] && echo && echo '压缩错误的文件:'${i}; done",
"type": "shell",
"key": "alt+shift+e"
}]
外部命令通过key配置快捷键
如上的例子,key,可以配置快捷键哦
{
"name":"scp传输项目到服务器",
"command":"scp -r ${projectDir} 用户名@ip:服务器目录路径",
"type" : "terminal",
"key":"alt+shift+m"
}
外部命令简介
点击菜单【工具】-->【外部命令】-->【自定义外部命令】,就可以自定义外部命令
官方已经提供了非常详细的说明,赶快去探索吧
使用外部命令注意事项
因为变量和快捷键,所以外部命令强大。
//------------外部命令 变量说明------------//
"command"、"workingDir"中可使用预定义的变量来获取当前文件的路径信息
${file} 当前文件的完整路径,比如 D:\files\test.txt
${fileName} 当前文件的文件名,比如 test.txt
${fileExtension} 当前文件的扩展名,比如 txt
${fileBasename} 当前文件仅包含文件名的部分,比如 test
${fileDir} 当前文件所在目录的完整路径,比如 D:\files
${projectDir} 当前文件所在项目的完整路径,只有当前文件是项目管理器中某个项目下的文件时才起作用
示例传送门
示例传送门,github
复制粘贴即可使用
本帖文档已集成到: hx产品文档
外部命令能干什么呢?
外部命令可以让您在HBuilderX中通过菜单、快捷键等方式调用外部程序或命令行
使用场景
- 压缩文件与解压
- 压缩图片
- 文档转换(比如markdown转pdf)
- 调用python、shell脚本
- 打开本地的某个程序
- 传输文件到服务器
- 操作服务器的某些服务(如启动、停止、重启nginx)
- 下载文件
- 安装apk到手机
- 上传应用到应用分发网站(比如蒲公英)
- 批量压缩
- 其它的自动化操作
- 上传文件到七牛云、阿里云等
外部命令在哪里?
菜单【工具】-->【外部命令】-->【自定义外部命令】
如下图,您可以看到几个例子
外部命令怎么用?
最后再介绍吧,先看几个例子。
例子1:压缩、解压
windows例子:
注意: windows的软件大部分安装在
Program Files
目录,需要注意空格与斜杠。如下例子
[{
"name": "文件: 压缩7z格式",
"command": "\"C:/Program\ Files/7-Zip/7z.exe\" a ${file}.7z ${file}",
"type": "process",
"key": ""
},
{
"name": "文件: 压缩zip格式",
"command": [
"C:/Program Files/7-Zip/7z.exe",
"a",
"${file}.zip",
"${file}"
],
"type": "process",
"key": ""
},
{
"name": "文件: 解压",
"command": "\"C:/Program Files/7-Zip/7z.exe\" x ${file}",
"type": "shell",
"key": ""
}
]
Mac例子:
[
{
"name": "压缩目录为bz2",
"command": "cd ${fileDir} && tar -jcvf ${fileBasename}.tar.bz2 ${fileBasename}",
"type": "terminal",
"key": "alt+shift+e"
},
{
"name": "解压zip包",
"command": "unzip ${file}",
"type": "terminal",
"key": "alt+shift+e"
}
]
例子2:调用外部python、shell等脚本
[{
"name":"调用python脚本",
"command":"python script.py",
"type" : "terminal",
"key":"alt+shift+p"
}]
例子3: 调用TinyPNG无损压缩图片
大部分情况下, 图片都是需要压缩的,为了 更快的打开网页,节省流量
推荐:TinyPNGg官网 无损压缩,良心网站,每月500张免费。
如下所示:YOUR_API_KEY
是你申请的key, --output 可以指定目录文件名,注意如果和当前图片路径一致,会覆盖原先图片
[{
"name":"调用TinyPNG无损压缩图片",
"command":"curl --user api:YOUR_API_KEY --data-binary @${file} -i https://api.tinify.com/shrink --output ${file}",
"type" : "terminal",
"key":"alt+shift+m"
}]
注意:curl是mac自带的命令,windows上如需使用curl,请下载curl 安装
例子4:下载文件
mac上下载文件的命令有:wget、curl
windows上下载文件的命令是:bitsadmin.exe
[{
"name":"下载文件",
"command":"wget -c ${userInput:输入要下载的地址url}",
"type" : "terminal",
"key":"alt+shift+m"
}]
注意: ${userInput:弹框说明}
会在当前屏幕弹框,可以输入内容
例子5: Mac: 复制项目到远程linux服务器
scp是linux和mac上才能用的命令,windows上不可以使用哦
[{
"name":"scp传输项目到服务器",
"command":"scp -r ${projectDir} 用户名@ip:服务器目录路径",
"type" : "terminal",
"key":"alt+shift+m"
}]
例子6: 远程linux服务器 重启/启动nginx服务
[{
"name":"远程服务器重启nginx",
"command":"ssh 用户@ip '/opt/nginx/sbin/nginx -s reload'",
"type" : "terminal",
"key":""
},
{
"name":"远程服务器重启nginx",
"command":"ssh 用户@ip '/opt/nginx/sbin/nginx'",
"type" : "terminal",
"key":""
}]
例子7: 使用pandoc转markdown为pdf、doc、html
pandoc是什么?
pandoc是一个软件,是一个能把千奇百怪的文档格式互相转换的神器,是一把文档转换的瑞士军刀。
安装后,可以通过命令调用。pandoc官网
pandoc结合外部命令的例子
[{
"name": "Pandoc转md为pdf",
"command": "pandoc ${file} -o ${fileBasename}.pdf",
"type": "terminal",
"key": ""
},
{
"name": "Pandoc转md为doc",
"command": "pandoc ${file} -o ${fileBasename}.docx",
"type": "terminal",
"key": ""
},
{
"name": "Pandoc转md为html",
"command": "pandoc ${file} -o ${fileBasename}.html",
"type": "terminal",
"key": ""
}
]
例子8: 安装apk到Android手机
[
{
"name": "安装apk到android手机",
"command": "adb install ${file}",
"type": "terminal",
"key": ""
}
]
例子9: 【蒲公英】内测应用上传
[
{
"name": "【蒲公英】内测应用上传",
"command": "curl -F 'file=@${file}' -F 'uKey=xxxxxxx' -F '_api_key=xxxxxx' https://upload.pgyer.com/apiv1/app/upload",
"type": "terminal",
"key": "alt+shift+m"
}
]
说明:uKey
、_api_key
需要自己申请。 网址:https://www.pgyer.com/doc/api
例子10:使用ftp
参考网友贡献http://ask.dcloud.net.cn/article/35459
例子11:使用颜色选择器
该插件目前无需外部命令配置,具体见其文档:http://ext.dcloud.net.cn/plugin?id=146
例子12: 批量压缩js文件
find是mac上的命令。windows请自行编写批处理
[{
"name": "js批量压缩",
"command": "for i in `find ${projectDir} -path ${projectDir}'/unpackage' -prune -o -name '*.js' -and ! -iname '*.min.js'`;do `/Applications/HBuilderX-Alpha.app/Contents/HBuilderX/plugins/compress-babel-minify/node_modules/.bin/minify ${i} --out-file ${i%.js*}.min.js 2>/dev/null`;[ $? -ne 0 ] && echo && echo '压缩错误的文件:'${i}; done",
"type": "shell",
"key": "alt+shift+e"
}]
外部命令通过key配置快捷键
如上的例子,key,可以配置快捷键哦
{
"name":"scp传输项目到服务器",
"command":"scp -r ${projectDir} 用户名@ip:服务器目录路径",
"type" : "terminal",
"key":"alt+shift+m"
}
外部命令简介
点击菜单【工具】-->【外部命令】-->【自定义外部命令】,就可以自定义外部命令
官方已经提供了非常详细的说明,赶快去探索吧
使用外部命令注意事项
因为变量和快捷键,所以外部命令强大。
//------------外部命令 变量说明------------//
"command"、"workingDir"中可使用预定义的变量来获取当前文件的路径信息
${file} 当前文件的完整路径,比如 D:\files\test.txt
${fileName} 当前文件的文件名,比如 test.txt
${fileExtension} 当前文件的扩展名,比如 txt
${fileBasename} 当前文件仅包含文件名的部分,比如 test
${fileDir} 当前文件所在目录的完整路径,比如 D:\files
${projectDir} 当前文件所在项目的完整路径,只有当前文件是项目管理器中某个项目下的文件时才起作用
示例传送门
示例传送门,github
复制粘贴即可使用
收起阅读 »