HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

{"message":"HBuilder mainifest.json中配置的支付appid和生成订单使用的appid不一致

{"message":"HBuilder mainifest.json中配置的支付appid和生成订单使用的appid不一致,如果是HB调试请在线打包,http://ask.dcloud.net.cn/article/282","code":9}

继续阅读 »

{"message":"HBuilder mainifest.json中配置的支付appid和生成订单使用的appid不一致,如果是HB调试请在线打包,http://ask.dcloud.net.cn/article/282","code":9}

收起阅读 »

Some App Tech Support

一、软件介绍
名称:客户培训平台
类型:软件工具

二、功能
客户培训平台APP是万华为外来承包商人员打造的在线培训平台,以安全告知、培训为中心,以学习、了解为向导,配套丰富的课件、题库资源等体系,助力培训学习,使承包商员工了解万华的安全文化,更便捷、高效的安全工作。

三、Getting Support:

邮箱: disanfang@qingsuyun.com

继续阅读 »

一、软件介绍
名称:客户培训平台
类型:软件工具

二、功能
客户培训平台APP是万华为外来承包商人员打造的在线培训平台,以安全告知、培训为中心,以学习、了解为向导,配套丰富的课件、题库资源等体系,助力培训学习,使承包商员工了解万华的安全文化,更便捷、高效的安全工作。

三、Getting Support:

邮箱: disanfang@qingsuyun.com

收起阅读 »

安卓app上架流程

iOS离线打包 iOS打包


上传APP的时候,遇到了问题,一直卡在Authenticating with the iTunes store提示这里,
解决办法:在Application Loader里面登录需要上传APP的开发者帐号就可以了

​​
证书我们这边可以借助辅助工具appuploader
Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到App Store,最方便在Windows开发上架没有苹果Mac电脑的开发者!配合本教程使用,可以快速掌握如何真机测试及上架!
点击苹果证书按钮



点击新增



输入证书密码,名称
这个密码不是账号密码,而是一个保护证书的密码,是p12文件的密码,此密码设置后没有其他地方可以找到,忘记了只能删除证书重新制作,所以请务必记住密码。还有为了安全起见,密码不要太简单。 证书名称是你为了在证书列表里面便于区别的一个字符,自己好辨识就可以,尽量是是字母和数字之类
选择证书类型
带distribution的是发布类型,带development的是开发类型。
apple类型=ios+mac,所以开发时选择ios app development和apple development 类型都是可以的
选择bundle id
只有部分类型的证书需要选择bundle id,例如推送证书。因为大部分证书是不和app关联的。而是通过描述文件profile文件关联app。
使用appuploader同步服务
如果期望制作好证书后在其他电脑上同样可以下载到这个证书,或者和你同事同步此证书,则需要勾选使用appuploader服务同步。否则您需要手动管理p12文件在不同电脑之间的传输,并且一但创建下载后,无法在其他电脑下载,只能手动复制文件过去。一般情况下,推荐使用appuploader服务同步。
证书类型说明
IOS开发选择apple development或者ios app development 类型 ios 发布选择 apple distribution或者 ios distribution (app store and ad hoc) 开发推送证书选择 apple push notification service ssl (sandbox) 发布推送证书选择 apple push notification service ssl (sandbox & production)
其他证书不是很常用,可以自行百度各种证书说明

添加图片注释,不超过 140 字(可选)

继续阅读 »


上传APP的时候,遇到了问题,一直卡在Authenticating with the iTunes store提示这里,
解决办法:在Application Loader里面登录需要上传APP的开发者帐号就可以了

​​
证书我们这边可以借助辅助工具appuploader
Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到App Store,最方便在Windows开发上架没有苹果Mac电脑的开发者!配合本教程使用,可以快速掌握如何真机测试及上架!
点击苹果证书按钮



点击新增



输入证书密码,名称
这个密码不是账号密码,而是一个保护证书的密码,是p12文件的密码,此密码设置后没有其他地方可以找到,忘记了只能删除证书重新制作,所以请务必记住密码。还有为了安全起见,密码不要太简单。 证书名称是你为了在证书列表里面便于区别的一个字符,自己好辨识就可以,尽量是是字母和数字之类
选择证书类型
带distribution的是发布类型,带development的是开发类型。
apple类型=ios+mac,所以开发时选择ios app development和apple development 类型都是可以的
选择bundle id
只有部分类型的证书需要选择bundle id,例如推送证书。因为大部分证书是不和app关联的。而是通过描述文件profile文件关联app。
使用appuploader同步服务
如果期望制作好证书后在其他电脑上同样可以下载到这个证书,或者和你同事同步此证书,则需要勾选使用appuploader服务同步。否则您需要手动管理p12文件在不同电脑之间的传输,并且一但创建下载后,无法在其他电脑下载,只能手动复制文件过去。一般情况下,推荐使用appuploader服务同步。
证书类型说明
IOS开发选择apple development或者ios app development 类型 ios 发布选择 apple distribution或者 ios distribution (app store and ad hoc) 开发推送证书选择 apple push notification service ssl (sandbox) 发布推送证书选择 apple push notification service ssl (sandbox & production)
其他证书不是很常用,可以自行百度各种证书说明

添加图片注释,不超过 140 字(可选)

收起阅读 »

iOS怎么安装/

iOS打包

当我们开发完app后,需要将ipa/apk提交给测试人员测试,然后才能上线。下面就来看一下如何打包ipa文件,并上传托管平台。
做过ios开发的童鞋都知道,ios为开发者提供了描述文件有2类,有说是3种(说的是iOS App):在Development类下就一种,用于真机调试Debug模式的描述文件;然而在Distribution类下,有2种描述文件。正常情况下,我们会使用App Store——Create a distribution provisioning profile to submit your app to the App Store,来上传包文件到应用市场。另一种是用Ad Hoc——Create a distribution provisioning profile to install your app on a limited number of registered devices。看意思就很清楚,前者用于提交你的APP到APPstore时使用,而后者用于安装你的应用到有限数量的已注册的设备上。而本文要讲的就是第二种了。
Ad Hoc打包
1、创建描述文件
首先,你要是一个开发者,并且有相关证书,然后就可以创建一个Ad Hoc 的描述文件了。然后按照下面的步骤依次选择选择Provisioning Profiles ->All->点击 号。
选择想要安装的测试设备:
然后取个名字,以示区分。
然后下载描述文件。
找到下载文件,双击安装到Xcode ,双击时看到闪一下就说明安装成功了。如果Xcode 是打开的,界面会跳转到Xcode界面。
2、证书签名
在Xcode7之前,真机调试和打包ipa是必须要签名的,但是Xcode7之后,真机调试不需要签名了。但是如果要在其他的机子上安装还是要打签名包的。 签名打包就是在编译的过程中加入证书签名,那肯定是需要去Xcode中配置的,目前网上有方法能实现企业级证书打包签名不需要在编译时,而在编译之后。因此现在打包有两种方式: a、在Xcode中配置code sign,实现签名打包ipa。适用于企业级账号证书、个人账号证书。
在Build Setting下,在code signing里,Code signing Identity依然按照Debug时使用开发证书,Release时使用发布证书;对于描述文件,Provisioning Profile按照Debug时使用开发证书生成的描述文件,而Release使用发布证书生成的描述文件,只是当你选择Distribution时,一定要选测Ad Hoc.
当然,Xcode 9 是可以选择自动配置描述文件的。
b、第二种方式是,在Xcode中无证书打包ipa,使用他人的账号签名ipa。

证书我们这边可以借助辅助工具appuploader
Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到App Store,最方便在Windows开发上架没有苹果Mac电脑的开发者!配合本教程使用,可以快速掌握如何真机测试及上架!
点击苹果证书按钮




点击新增



输入证书密码,名称
这个密码不是账号密码,而是一个保护证书的密码,是p12文件的密码,此密码设置后没有其他地方可以找到,忘记了只能删除证书重新制作,所以请务必记住密码。还有为了安全起见,密码不要太简单。 证书名称是你为了在证书列表里面便于区别的一个字符,自己好辨识就可以,尽量是是字母和数字之类
选择证书类型
带distribution的是发布类型,带development的是开发类型。
apple类型=ios mac,所以开发时选择ios app development和apple development 类型都是可以的
选择bundle id
只有部分类型的证书需要选择bundle id,例如推送证书。因为大部分证书是不和app关联的。而是通过描述文件profile文件关联app。
使用appuploader同步服务
如果期望制作好证书后在其他电脑上同样可以下载到这个证书,或者和你同事同步此证书,则需要勾选使用appuploader服务同步。否则您需要手动管理p12文件在不同电脑之间的传输,并且一但创建下载后,无法在其他电脑下载,只能手动复制文件过去。一般情况下,推荐使用appuploader服务同步。
证书类型说明
IOS开发选择apple development或者ios app development 类型 ios 发布选择 apple distribution或者 ios distribution (app store and ad hoc) 开发推送证书选择 apple push notification service ssl (sandbox) 发布推送证书选择 apple push notification service ssl (sandbox

继续阅读 »

当我们开发完app后,需要将ipa/apk提交给测试人员测试,然后才能上线。下面就来看一下如何打包ipa文件,并上传托管平台。
做过ios开发的童鞋都知道,ios为开发者提供了描述文件有2类,有说是3种(说的是iOS App):在Development类下就一种,用于真机调试Debug模式的描述文件;然而在Distribution类下,有2种描述文件。正常情况下,我们会使用App Store——Create a distribution provisioning profile to submit your app to the App Store,来上传包文件到应用市场。另一种是用Ad Hoc——Create a distribution provisioning profile to install your app on a limited number of registered devices。看意思就很清楚,前者用于提交你的APP到APPstore时使用,而后者用于安装你的应用到有限数量的已注册的设备上。而本文要讲的就是第二种了。
Ad Hoc打包
1、创建描述文件
首先,你要是一个开发者,并且有相关证书,然后就可以创建一个Ad Hoc 的描述文件了。然后按照下面的步骤依次选择选择Provisioning Profiles ->All->点击 号。
选择想要安装的测试设备:
然后取个名字,以示区分。
然后下载描述文件。
找到下载文件,双击安装到Xcode ,双击时看到闪一下就说明安装成功了。如果Xcode 是打开的,界面会跳转到Xcode界面。
2、证书签名
在Xcode7之前,真机调试和打包ipa是必须要签名的,但是Xcode7之后,真机调试不需要签名了。但是如果要在其他的机子上安装还是要打签名包的。 签名打包就是在编译的过程中加入证书签名,那肯定是需要去Xcode中配置的,目前网上有方法能实现企业级证书打包签名不需要在编译时,而在编译之后。因此现在打包有两种方式: a、在Xcode中配置code sign,实现签名打包ipa。适用于企业级账号证书、个人账号证书。
在Build Setting下,在code signing里,Code signing Identity依然按照Debug时使用开发证书,Release时使用发布证书;对于描述文件,Provisioning Profile按照Debug时使用开发证书生成的描述文件,而Release使用发布证书生成的描述文件,只是当你选择Distribution时,一定要选测Ad Hoc.
当然,Xcode 9 是可以选择自动配置描述文件的。
b、第二种方式是,在Xcode中无证书打包ipa,使用他人的账号签名ipa。

证书我们这边可以借助辅助工具appuploader
Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到App Store,最方便在Windows开发上架没有苹果Mac电脑的开发者!配合本教程使用,可以快速掌握如何真机测试及上架!
点击苹果证书按钮




点击新增



输入证书密码,名称
这个密码不是账号密码,而是一个保护证书的密码,是p12文件的密码,此密码设置后没有其他地方可以找到,忘记了只能删除证书重新制作,所以请务必记住密码。还有为了安全起见,密码不要太简单。 证书名称是你为了在证书列表里面便于区别的一个字符,自己好辨识就可以,尽量是是字母和数字之类
选择证书类型
带distribution的是发布类型,带development的是开发类型。
apple类型=ios mac,所以开发时选择ios app development和apple development 类型都是可以的
选择bundle id
只有部分类型的证书需要选择bundle id,例如推送证书。因为大部分证书是不和app关联的。而是通过描述文件profile文件关联app。
使用appuploader同步服务
如果期望制作好证书后在其他电脑上同样可以下载到这个证书,或者和你同事同步此证书,则需要勾选使用appuploader服务同步。否则您需要手动管理p12文件在不同电脑之间的传输,并且一但创建下载后,无法在其他电脑下载,只能手动复制文件过去。一般情况下,推荐使用appuploader服务同步。
证书类型说明
IOS开发选择apple development或者ios app development 类型 ios 发布选择 apple distribution或者 ios distribution (app store and ad hoc) 开发推送证书选择 apple push notification service ssl (sandbox) 发布推送证书选择 apple push notification service ssl (sandbox

收起阅读 »

UniAPP车牌实时离线扫描识别

插件说明

UniAPP车牌实时离线扫描识别(Android平台)

标签:车牌实时识别 车牌离线识别 车牌实时扫描 车牌离线扫描 车牌实时离线识别 车牌实时离线扫描

特点:

  • 1、使用方便,引入即可;
  • 2、响应快速,原生体验;
  • 3、完全离线,无需联网;
  • 4、插件包体积小,不占用云打包资源(参考后边压缩体积教程);
  • 5、完全独立,不依赖任何第三方SDK(目前发现很多依赖百度等第三方SDK,需要单独进行购买第三方服务或者授权,此插件承诺终身使用);
  • 6、返回结果内容丰富,支持:车牌号车牌颜色车牌抓拍图片
  • 7、支持车牌类型齐全;
  • 8、支持离线打包;
  • 9、可进行定制;

效果:

车牌实时识别
车牌实时识别-结果

支持车牌:

序号 车牌类型 是否支持
1 单行蓝牌
2 单行黄牌
3 新能源车牌
4 白色警用车牌
5 教练车牌
6 武警车牌
7 双层黄牌
8 双层武警
9 使馆车牌
10 港澳牌车
11 双层农用车牌
12 民航车牌
13 摩托车牌
14 危险品车牌

平台兼容性

平台 是否支持 支持版本 支持CPU类型
Android 5.0 - 13.0 + armeabi-v7a、arm64-v8a、x86
iOS ×

原生插件通用使用流程:

  • 1、购买插件,选择该插件绑定的项目;
  • 2、在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加;
  • 3、根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能;
  • 4、打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试;
  • 5、开发完毕后正式云打包;

目前插件市场所有付费原生插件均不支持离线打包,此插件支持离线打包!!!

  • Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
  • iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择;

使用说明

参考官网原生插件使用:
https://nativesupport.dcloud.net.cn/NativePlugin/use/use.html

使用步骤

  • 1、解压插件:

    解压插件zip包到uniapp项目目录nativePlugins中;

  • 2、引用插件:

    1) 点击manifest.json 进行配置;
    2) 选择指定的本地插件(自动识别):

  • 3、使用插件:

// 一行代码引用  
var plateModule = uni.requireNativePlugin("PlateModule")  

// 调用识别程序  
plateModule.startPlate(  
    {  
        'accuracy': 0.80, // 识别准确率(取值范围:0.0-1.0。准确率大于该值才返回结果,值越大识别越准确但也会越慢,需要测试出来最适合自己的准确率)  
        'quality': 80, // 图像压缩率(取值范围:0-100。 0:压缩100%,100:不压缩)  
        'showText': true // 是否显示提示文字  
    },  
    (ret) => {  
        console.log("showLPR result : ", ret);  
        modal.toast({  
            message: ret,  
            duration: 1.5  
        });  
        //解析  
        this.success = true;  
        if (ret.number) {  
            this.number = ret.number;  
        }  
        if (ret.color) {  
            this.color = ret.color;  
        }  
        if (ret.image) {  
            this.image = ret.image;  
            this.imagePath = "file:///" + ret.image;  
        }  

    }  
);  
  • 3、压缩体积教程:

将插件目录中文件lib-lpr-release.aar使用压缩工具打开,根据自己使用的Android平台进行保留jni目录下.so文件,即删除掉多余的平台目录;

目录结构:

├─ package.json  
├─ android  
│  ├── res  
│  │── libs  
│  │── assets  
│  │── uniplugin_lpr-release.aar  
│  └── lib-lpr-release.aar  
└─ ios

lib-lpr-release.aar文件压缩包中目录结构:

├─ AndroidManifest.xml  
├─ classes.jar  
├─ res  
├─ assets  
├─ jni  
│  │── armeabi-v7a  
│  │── arm64-v8a  
│  └── x86  
└─ios

举例:如果当前平台为armeabi-v7a,则只需要保留armeabi-v7a目录即可,其他同级目录arm64-v8ax86均可删除;

完整代码示例

<template>  
    <view class="button-sp-area">  
        <button type="primary" plain="true" @click="showLPR()">点击识别车牌</button>  
        <view style="margin-top: 20px; padding: 20px;" v-show="this.success == true">  
            <view style="text-align: center;color: lightslategray;">  
                <text>车牌号:{{number}}</text>  
            </view>  
            <view style="text-align: center;color: lightslategray;">  
                <text>车牌颜色:{{color}}</text>  
            </view>  
            <view style="text-align: center;color: lightslategray;">  
                <text>图片地址:{{image}}</text>  
            </view>  
            <view style="text-align: center;color: lightslategray;">  
                <image :src="imagePath"></image>  
            </view>  
        </view>  
    </view>  
</template>  

<script>  
    const modal = uni.requireNativePlugin('modal');  
    // 获取 module  
    var plateModule = uni.requireNativePlugin("PlateModule")  
    export default {  
        data() {  
            return {  
                success: false,  
                number: "",  
                color: "",  
                image: "",  
                imagePath: ""  
            }  
        },  
        methods: {  
            showLPR() {  
                console.log('showLPR...')  

                //带参数  
                plateModule.startPlate(  
                    {  
                        'accuracy': 0.80, // 识别准确率(取值范围:0.0-1.0。准确率大于该值才返回结果,值越大识别越准确但也会越慢,需要测试出来最适合自己的准确率)  
                        'quality': 80, // 图像压缩率(取值范围:0-100。 0:压缩100%,100:不压缩)  
                        'showText': true // 是否显示提示文字  
                    },  
                    (ret) => {  
                        console.log("showLPR result : ", ret);  
                        modal.toast({  
                            message: ret,  
                            duration: 1.5  
                        });  
                        //解析  
                        this.success = true;  
                        if (ret.number) {  
                            this.number = ret.number;  
                        }  
                        if (ret.color) {  
                            this.color = ret.color;  
                        }  
                        if (ret.image) {  
                            this.image = ret.image;  
                            this.imagePath = "file:///" + ret.image;  
                        }  

                    }  
                );  
            }  
        }  
    }  
</script>  

<style>  

</style>  
继续阅读 »

插件说明

UniAPP车牌实时离线扫描识别(Android平台)

标签:车牌实时识别 车牌离线识别 车牌实时扫描 车牌离线扫描 车牌实时离线识别 车牌实时离线扫描

特点:

  • 1、使用方便,引入即可;
  • 2、响应快速,原生体验;
  • 3、完全离线,无需联网;
  • 4、插件包体积小,不占用云打包资源(参考后边压缩体积教程);
  • 5、完全独立,不依赖任何第三方SDK(目前发现很多依赖百度等第三方SDK,需要单独进行购买第三方服务或者授权,此插件承诺终身使用);
  • 6、返回结果内容丰富,支持:车牌号车牌颜色车牌抓拍图片
  • 7、支持车牌类型齐全;
  • 8、支持离线打包;
  • 9、可进行定制;

效果:

车牌实时识别
车牌实时识别-结果

支持车牌:

序号 车牌类型 是否支持
1 单行蓝牌
2 单行黄牌
3 新能源车牌
4 白色警用车牌
5 教练车牌
6 武警车牌
7 双层黄牌
8 双层武警
9 使馆车牌
10 港澳牌车
11 双层农用车牌
12 民航车牌
13 摩托车牌
14 危险品车牌

平台兼容性

平台 是否支持 支持版本 支持CPU类型
Android 5.0 - 13.0 + armeabi-v7a、arm64-v8a、x86
iOS ×

原生插件通用使用流程:

  • 1、购买插件,选择该插件绑定的项目;
  • 2、在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加;
  • 3、根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能;
  • 4、打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试;
  • 5、开发完毕后正式云打包;

目前插件市场所有付费原生插件均不支持离线打包,此插件支持离线打包!!!

  • Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
  • iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择;

使用说明

参考官网原生插件使用:
https://nativesupport.dcloud.net.cn/NativePlugin/use/use.html

使用步骤

  • 1、解压插件:

    解压插件zip包到uniapp项目目录nativePlugins中;

  • 2、引用插件:

    1) 点击manifest.json 进行配置;
    2) 选择指定的本地插件(自动识别):

  • 3、使用插件:

// 一行代码引用  
var plateModule = uni.requireNativePlugin("PlateModule")  

// 调用识别程序  
plateModule.startPlate(  
    {  
        'accuracy': 0.80, // 识别准确率(取值范围:0.0-1.0。准确率大于该值才返回结果,值越大识别越准确但也会越慢,需要测试出来最适合自己的准确率)  
        'quality': 80, // 图像压缩率(取值范围:0-100。 0:压缩100%,100:不压缩)  
        'showText': true // 是否显示提示文字  
    },  
    (ret) => {  
        console.log("showLPR result : ", ret);  
        modal.toast({  
            message: ret,  
            duration: 1.5  
        });  
        //解析  
        this.success = true;  
        if (ret.number) {  
            this.number = ret.number;  
        }  
        if (ret.color) {  
            this.color = ret.color;  
        }  
        if (ret.image) {  
            this.image = ret.image;  
            this.imagePath = "file:///" + ret.image;  
        }  

    }  
);  
  • 3、压缩体积教程:

将插件目录中文件lib-lpr-release.aar使用压缩工具打开,根据自己使用的Android平台进行保留jni目录下.so文件,即删除掉多余的平台目录;

目录结构:

├─ package.json  
├─ android  
│  ├── res  
│  │── libs  
│  │── assets  
│  │── uniplugin_lpr-release.aar  
│  └── lib-lpr-release.aar  
└─ ios

lib-lpr-release.aar文件压缩包中目录结构:

├─ AndroidManifest.xml  
├─ classes.jar  
├─ res  
├─ assets  
├─ jni  
│  │── armeabi-v7a  
│  │── arm64-v8a  
│  └── x86  
└─ios

举例:如果当前平台为armeabi-v7a,则只需要保留armeabi-v7a目录即可,其他同级目录arm64-v8ax86均可删除;

完整代码示例

<template>  
    <view class="button-sp-area">  
        <button type="primary" plain="true" @click="showLPR()">点击识别车牌</button>  
        <view style="margin-top: 20px; padding: 20px;" v-show="this.success == true">  
            <view style="text-align: center;color: lightslategray;">  
                <text>车牌号:{{number}}</text>  
            </view>  
            <view style="text-align: center;color: lightslategray;">  
                <text>车牌颜色:{{color}}</text>  
            </view>  
            <view style="text-align: center;color: lightslategray;">  
                <text>图片地址:{{image}}</text>  
            </view>  
            <view style="text-align: center;color: lightslategray;">  
                <image :src="imagePath"></image>  
            </view>  
        </view>  
    </view>  
</template>  

<script>  
    const modal = uni.requireNativePlugin('modal');  
    // 获取 module  
    var plateModule = uni.requireNativePlugin("PlateModule")  
    export default {  
        data() {  
            return {  
                success: false,  
                number: "",  
                color: "",  
                image: "",  
                imagePath: ""  
            }  
        },  
        methods: {  
            showLPR() {  
                console.log('showLPR...')  

                //带参数  
                plateModule.startPlate(  
                    {  
                        'accuracy': 0.80, // 识别准确率(取值范围:0.0-1.0。准确率大于该值才返回结果,值越大识别越准确但也会越慢,需要测试出来最适合自己的准确率)  
                        'quality': 80, // 图像压缩率(取值范围:0-100。 0:压缩100%,100:不压缩)  
                        'showText': true // 是否显示提示文字  
                    },  
                    (ret) => {  
                        console.log("showLPR result : ", ret);  
                        modal.toast({  
                            message: ret,  
                            duration: 1.5  
                        });  
                        //解析  
                        this.success = true;  
                        if (ret.number) {  
                            this.number = ret.number;  
                        }  
                        if (ret.color) {  
                            this.color = ret.color;  
                        }  
                        if (ret.image) {  
                            this.image = ret.image;  
                            this.imagePath = "file:///" + ret.image;  
                        }  

                    }  
                );  
            }  
        }  
    }  
</script>  

<style>  

</style>  
收起阅读 »

uni-upgrade-center升级中心性价比评测

uni_upgrade_center 升级中心 uniCloud

近期,uniCloud阿里云版开始正式商用,部分开发者对基于uniCloud的uni-upgrade-center等云端一体业务,开始纠结,不清楚这些业务预计会花费多少钱,不清楚相比传统服务器而言,何种方案性价比更好。

本文尝试算细账、算总账,以阿里云按量计费为例,详细预测uni-upgrade-center在不同用户规模下的资源消耗及对应费用,帮助大家明智选择,无忧开发。

本文主要分为三个部分:

  • uni-upgrade-center消耗的资源费用测算
  • uni-upgrade-center给你带来的收益
  • 综合考虑,你该如何选择

uni-upgrade-center 消耗的资源费用测算

uni-upgrade-center升级中心涉及费用的部分主要分为:

  • 云函数:uni-upgrade-center云函数,将客户端版本和服务端最新版本进行对比,返回是否需升级的逻辑
  • 云数据库:opendb-app-versions表,存储版本信息
  • 云存储:放置近期的升级包资源(apk/ipa/wgt)
  • 前端网站托管:部署uni-admin,管理员发布新版本

接下来,我们对不同资源,分别进行费用评估。

云函数

启用uni-upgrade-center升级中心后,你的App每次启动,会请求一次uni-upgrade-center云函数。

我们按照uniCloud官网列出的按量计费规则,计算一下云函数的资源消耗。

我们可以简单得出如下公式:

云函数费用 = 资源使用量 * 0.000110592 + 调用次数 * 0.0133 / 10000 + 出网流量 * 0.8

其中:

  • 资源使用量 = 云函数内存(单位为G) 云函数平均单次执行时长(单位为秒) 调用次数
  • 调用次数 = App日活 * 每日活用户平均每天启动App次数,因为App每次启动,均会执行检查更新逻辑

我们假设如下数据模型:

  • 云函数内存:256M,即0.25G;注意云函数内存默认为512M,uni-upgrade-center云函数建议设置为256M
  • 云函数平均单次执行时长:100毫秒,即0.1秒
  • 每日活用户平均每天启动App次数:2次
  • 出网流量:0,升级中心无需链接外网

按照如上公式,你的App若有100个日活用户,其升级中心云函数每天的费用为:

云函数费用(天) = 资源使用量 * 0.000110592  + 调用次数 * 0.0133 / 10000 + 出网流量 * 0.8  
              = 云函数内存(单位为G) * 云函数平均单次执行时长(单位为秒) * 调用次数 + 调用次数 * 0.0133 / 10000 + 出网流量 * 0.8  
              = 0.25G * 0.1S * 100 * 2 * 0.000110592 + 100 * 2 * 0.0133/10000 + 0   
              = 0.00081896(元)

即:你的App日活为100,使用uni-upgrade-center商业版后,对应云函数每天大概消耗0.00081896元。

据此,可计算其每月的费用为:0.00081896 * 30 = 0.0245688,即每月只需2分钱;

同理,我们可推导出日活为1000、10000、10万的App,其升级中心云函数每月费用如下表:

日活 资源使用量计费 调用次数计费 出网流量计费 合计
100 0.0165888 0.00798 0 0.0245688
1000 0.165888 0.0798 0 0.245688
10000 1.65888 0.798 0 2.45688
100000 16.5888 7.98 0 24.5688

日活1000的App,月度消耗才2毛钱,真是毛毛雨了。

云数据库

按照uniCloud官网介绍,云数据库费用 = 容量费用 + 读操作次数费用 + 写操作次数费用,其中:

  • 容量费用:数据库存储容量(单位为G) * 0.07
  • 读操作次数费用:读操作次数(万次) * 0.015
  • 写操作次数:写操作次数(万次) * 0.015;

容量费用

我们以hello uni-app为例,opendb-app-versions数据表中共存储30条升级记录,容量大小为8K。
据此可计算出opendb-app-versions表的日存储费用为:8/1024/1024 * 0.07 = 0.000000534

容量计费单位是G,故需先将8K折算成M,再折算成G,故上述公式中连续除了两个1024

1月按30天算,则月存储费用为0.000000534 * 30 = 0.000016,还不到1分钱,可忽略。

注意:数据库容量仅跟发布版本多少有关系,跟日活用户无关。

读操作次数

在uni升级中心业务中,云函数uni-upgrade-center每次执行,仅调用一次数据库读取(读取一次opendb-app-versions表),故数据库的读操作次数等同于云函数的调用次数,前文有过公式,云函数调用次数 = App日活 * 每日活用户平均每天启动App次数,每日活用户平均每天启动App次数我们假设为2次。

我们即可推算,如果一个App的日活为100,则uni升级中心每日云数据库读操作次数费用计算如下:

读操作次数费用 = 读操作次数(万次) * 0.015  
            = 云函数调用次数(万次) * 0.015  
            = App日活 * 每日活用户平均每天启动App次数 / 10000 * 0.015  
            = 100 * 2 / 10000 * 0.015  
            = 0.0003

1月按30天算,则每月云数据库读操作次数费用为0.0003 * 30 = 0.009,还不到1分钱。

同理,我们可推导出日活为1000、10000的App,其uni升级中心每月云数据库读操作次数费用为9分钱、9毛钱。

写操作次数

uni-upgrade-center升级中心,写数据库操作很少;管理员仅在每次发布新版时,通过uni-adminopendb-app-versions表插入一条新版本信息;用户端App每次启动检查升级,无需数据表的写入操作,故写操作次数可忽略为0;

小结

因为容量费和写操作次数费用均可忽略为0,根据公式:

云数据库费用 = 容量费(忽略为0) + 读操作费用 + 写操作费用(忽略为0)   
           = 读操作费用

可推导,uni升级中心的云数据库计费主要是读操作次数计费,因此我们进一步得出如下预测:

日活 容量费 读操作次数费用 写操作次数费用 合计
100 0 0.009 0 0.009
1000 0 0.09 0 0.09
10000 0 0.9 0 0.9
100000 0 9 0 9

云存储

按照uniCloud官网介绍,云存储费用 = 容量费 + 下载操作次数计费点 + 上传操作次数计费点 + CDN流量费

如果您的应用每次均上架到apple store或安卓各应用商店,升级时从应用商店下载安装,则云存储费用为0,因为使用的是应用商店的存储和CDN下载流量,本计费点测评章节可直接跳过。

uni-upgrade-center 支持设置应用新版安装包下载地址为应用商店地址,这样就可以使用应用商店的存储和CDN,不消耗uniCloud的云存储资源。

现阶段,iOS平台均需上架apple store,我们可以忽略iOS平台的云存储消耗。

如果您的安卓apk安装包及wgt差量升级包全部托管在uniCloud云存储中,我们也可以算算这笔账。

容量费

容量费主要是存储费用,我们可以定期将过期版本删除,从而节省容量费。

假设我们在云存储中保留最近5个版本的文件,apk/wgt全部保留,大小假设分别为:40M、10M。

如前所言,ipa需上架apple store,不使用云存储,测评可忽略。

则每天容量费用为:5 * (40+10)/1024 * 0.0043 = 0.0010498

据此,可计算其每月30天的容量费用为:0.0010498 * 30 = 0.031494,即只需3分钱;

注意:云存储容量仅跟保留的历史升级包多少有关系,跟日活用户无关。

下载操作次数计费点

下载操作次数计费点:仅触发文件下载时会触发,若无新版本下载,则不会触发。

假设你的App日活为100、月活为1500,每月发一次版本;月活用户中,50%会选择升级到新版本,我们可计算下载次数为:1500*50% = 750次

而云存储的下载操作次数计费规则为:每万次0.01元,即每万次下载1分钱,750次下载远还不到1分钱,故下载操作计费点可直接忽略。

上传操作次数计费点

每次App发版,仅需管理员上传一次新的资源包,用户App端检查升级时,不涉及上传操作,故上传操作次数计费点亦可忽略。

CDN流量费

CDN流量费:我们假设50%概率启用wgt资源包升级(升级包为10M),50%概率为整包升级;而整包升级中,20%为苹果用户(使用apple store流量),80%为安卓用户(升级包为40M)。

则按照如上数据模型,日活为100的App,假期其月活为1500,而月活用户中,50%会选择升级到新版本,即750人选择升级,不同升级包消耗CDN流量如下:

  • wgt资源包CDN流量:750 50% 10 / 1024 = 3.662G
  • 苹果整包升级CDN流量:使用apple store流量,uniCloud云存储流量为0
  • 安卓整包升级CDN流量:750 50% 80% * 40 /1024 = 11.719G

即:日活为100的App,月度CDN流量为:3.662 + 0 + 11.719 = 15.381G,对应费用则为:15.381 * 0.18 = 2.76858 (元)

同理,我们可推导出日活为1000的App,其升级中心云存储每月的CDN费用为27.6858元。

和传统 OSS + CDN 对比

如果你不用uni-upgrade-center,选择如阿里云的传统OSS + CDN 方案,同样按量计费的情况下,1PB流量以内,传统CDN都没有价格优势;传统CDN每GB的起步价为0.24元,而uniCloud云存储CDN每GB的费用为0.18元。

详见:阿里云官网CDN定价详情

1PB流量是什么概念?我们以每个安卓安装包为40M为例,需要 1 * 1024 * 1024 * 1024 / 40 = 26843546,即需要2600万人次安装包下载才能达到1PB流量,你可以评估一下你的App何时可以达到这个量级。

具体解释一下:1PB = 1024TB,1TB = 1024G,1G = 1024M,故上面公式连乘3个1024

也有人说了,购买阿里云CDN资源包可以更便宜。确实,购买大额资源包会更便宜,但这个方案有两个缺点:

  • 这个资源包仅仅是CDN流量包,你还需要购买OSS回源流量包,而uniCloud直接将回源流量费用包在CDN费用之内了,无需额外购买回源流量。
  • 预付费,在业务发展不明朗的情况下,一次性投入太多钱;一旦业务失败,CDN资源包未消耗完毕,也不能退款,浪费资金;而按量计费则没有这个问题,真实用多少资源,就花多少钱;

综合来看,uniCloud云存储相比传统云厂商的OSS + CDN 方案:

  • 都选择按量计费,uniCloud版CDN默认0.18元更具价格优势;
  • 预付费方式,选购云厂商CDN资源包,需额外购买回源流量包,对普通开发者,特别是中小开发者,并不友好,此时依然是uniCloud按量计费的云存储更具性价比。

前端网页托管

uni-upgrade-center需要和uni-admin配合使用,uni-admin需要部署在前端网页托管中。uni-admin主要是管理员使用,使用频次较少,流量也较低。

按照uniCloud官网介绍,前端网页托管费用 = 容量费 + 流量费

容量费

uni-admin编译后为4.7M,按照官网每GB每天0.0043元的规则,uni-admin的月度容量费为:4.7 / 1024 * 0.0043 * 30 = 0.00059,不到1分钱,可忽略。

流量费

管理员登录uni-admin,到升级中心管理页面浏览并发布新版,所需流量不超过3M,即使每月发布2次更新,流量费预估为:3 / 1024 * 0.18 * 2 = 0.00105,也不到1分钱,也可忽略。

合并总结

细项对比完了,我们来合并看看,使用uniCloud升级中心,到底需要花多少钱,相比传统自己研发升级逻辑、搭建升级中心,哪些地方都需要花钱,差异点在哪里?

不管是开发者自研的升级方案,还是uni-upgrade-center,存储+CDN的费用都是必需的,前文也将传统OSS+CDN和uniCloud云存储的性价比进行了对比,均按量计费的模式下,uniCloud更具性价比;以资源包方式购买传统CDN模式下,各有优劣。

既然两个方案,都绕不开云存储,那我们暂时抛开云存储对比(更建议走应用商店下载,这样完全没有CDN流量费),将其他各项按照日活用户规模罗列一下,看看uni-upgrade-center在其他维度所需费用。

日活 云函数 云数据库 云存储 前端网页托管 合计
100 0.0245688 0.009 忽略 0 0.0335688
1000 0.245688 0.09 忽略 0 0.335688
10000 2.45688 0.9 忽略 0 3.35688
100000 24.5688 9 忽略 0 33.5688

uni-upgrade-center 给你带来的收益

使用uni-upgrade-center,免费获取、一键安装,你将获得:

  • 经受大量App验证的、完备的检查升级逻辑,同时支持整包/资源包升级,支持静默升级,支持强制升级;
  • 完备的管理功能,分平台发布新版、下线老版,关联应用商店,分渠道发布等。
  • 代码开源,随意定制

如上功能,如果你使用传统模式自研,需要前后端配合开发,后端使用php/java做接口,前端发起Ajax请求,处理服务端的各种响应和错误码,处理升级弹窗提醒,这些功能做完善至少需要4个工作日。

假设工程师月薪18K,社保等综合管理成本是薪资的1.4倍,则4个工作日的综合成本为:18*1000*1.4/22 * 4 = 4582元

总结

再次说回uni-upgrade-center,相比传统方式自研升级中心,存储+CDN的钱都是要花的,我们忽略它。

其它云函数、云数据库等,虽然看起来是额外增加的费用,但实际上你使用传统php/java自研升级逻辑,除了自研人力费用,后期也是需要消耗CPU、内存、带宽资源的,只是这些费用合并到虚拟机的整体租用成本中,你无法拆出来计算罢了。

再看回刚才的计算表,以1000日活用户来说,云函数、云数据库每月才多了0.34元,每年才多了4块钱(不考虑云存储CDN的情况下),一年多花4块钱,可以省掉自研的4500多元人工费用,可以让工程师将更多精力投入核心业务中。这5块钱的买卖,不划算吗?它不香吗?

日活 云函数 云数据库 云存储 前端网页托管 合计
100 0.0245688 0.009 忽略 0 0.0335688
1000 0.245688 0.09 忽略 0 0.335688
10000 2.45688 0.9 忽略 0 3.35688
100000 24.5688 9 忽略 0 33.5688

不重复制造轮子,聚焦业务,快速验证模式,实现商业增长,才应该是聪明工程师的追求。

本篇评测共大家参考。

继续阅读 »

近期,uniCloud阿里云版开始正式商用,部分开发者对基于uniCloud的uni-upgrade-center等云端一体业务,开始纠结,不清楚这些业务预计会花费多少钱,不清楚相比传统服务器而言,何种方案性价比更好。

本文尝试算细账、算总账,以阿里云按量计费为例,详细预测uni-upgrade-center在不同用户规模下的资源消耗及对应费用,帮助大家明智选择,无忧开发。

本文主要分为三个部分:

  • uni-upgrade-center消耗的资源费用测算
  • uni-upgrade-center给你带来的收益
  • 综合考虑,你该如何选择

uni-upgrade-center 消耗的资源费用测算

uni-upgrade-center升级中心涉及费用的部分主要分为:

  • 云函数:uni-upgrade-center云函数,将客户端版本和服务端最新版本进行对比,返回是否需升级的逻辑
  • 云数据库:opendb-app-versions表,存储版本信息
  • 云存储:放置近期的升级包资源(apk/ipa/wgt)
  • 前端网站托管:部署uni-admin,管理员发布新版本

接下来,我们对不同资源,分别进行费用评估。

云函数

启用uni-upgrade-center升级中心后,你的App每次启动,会请求一次uni-upgrade-center云函数。

我们按照uniCloud官网列出的按量计费规则,计算一下云函数的资源消耗。

我们可以简单得出如下公式:

云函数费用 = 资源使用量 * 0.000110592 + 调用次数 * 0.0133 / 10000 + 出网流量 * 0.8

其中:

  • 资源使用量 = 云函数内存(单位为G) 云函数平均单次执行时长(单位为秒) 调用次数
  • 调用次数 = App日活 * 每日活用户平均每天启动App次数,因为App每次启动,均会执行检查更新逻辑

我们假设如下数据模型:

  • 云函数内存:256M,即0.25G;注意云函数内存默认为512M,uni-upgrade-center云函数建议设置为256M
  • 云函数平均单次执行时长:100毫秒,即0.1秒
  • 每日活用户平均每天启动App次数:2次
  • 出网流量:0,升级中心无需链接外网

按照如上公式,你的App若有100个日活用户,其升级中心云函数每天的费用为:

云函数费用(天) = 资源使用量 * 0.000110592  + 调用次数 * 0.0133 / 10000 + 出网流量 * 0.8  
              = 云函数内存(单位为G) * 云函数平均单次执行时长(单位为秒) * 调用次数 + 调用次数 * 0.0133 / 10000 + 出网流量 * 0.8  
              = 0.25G * 0.1S * 100 * 2 * 0.000110592 + 100 * 2 * 0.0133/10000 + 0   
              = 0.00081896(元)

即:你的App日活为100,使用uni-upgrade-center商业版后,对应云函数每天大概消耗0.00081896元。

据此,可计算其每月的费用为:0.00081896 * 30 = 0.0245688,即每月只需2分钱;

同理,我们可推导出日活为1000、10000、10万的App,其升级中心云函数每月费用如下表:

日活 资源使用量计费 调用次数计费 出网流量计费 合计
100 0.0165888 0.00798 0 0.0245688
1000 0.165888 0.0798 0 0.245688
10000 1.65888 0.798 0 2.45688
100000 16.5888 7.98 0 24.5688

日活1000的App,月度消耗才2毛钱,真是毛毛雨了。

云数据库

按照uniCloud官网介绍,云数据库费用 = 容量费用 + 读操作次数费用 + 写操作次数费用,其中:

  • 容量费用:数据库存储容量(单位为G) * 0.07
  • 读操作次数费用:读操作次数(万次) * 0.015
  • 写操作次数:写操作次数(万次) * 0.015;

容量费用

我们以hello uni-app为例,opendb-app-versions数据表中共存储30条升级记录,容量大小为8K。
据此可计算出opendb-app-versions表的日存储费用为:8/1024/1024 * 0.07 = 0.000000534

容量计费单位是G,故需先将8K折算成M,再折算成G,故上述公式中连续除了两个1024

1月按30天算,则月存储费用为0.000000534 * 30 = 0.000016,还不到1分钱,可忽略。

注意:数据库容量仅跟发布版本多少有关系,跟日活用户无关。

读操作次数

在uni升级中心业务中,云函数uni-upgrade-center每次执行,仅调用一次数据库读取(读取一次opendb-app-versions表),故数据库的读操作次数等同于云函数的调用次数,前文有过公式,云函数调用次数 = App日活 * 每日活用户平均每天启动App次数,每日活用户平均每天启动App次数我们假设为2次。

我们即可推算,如果一个App的日活为100,则uni升级中心每日云数据库读操作次数费用计算如下:

读操作次数费用 = 读操作次数(万次) * 0.015  
            = 云函数调用次数(万次) * 0.015  
            = App日活 * 每日活用户平均每天启动App次数 / 10000 * 0.015  
            = 100 * 2 / 10000 * 0.015  
            = 0.0003

1月按30天算,则每月云数据库读操作次数费用为0.0003 * 30 = 0.009,还不到1分钱。

同理,我们可推导出日活为1000、10000的App,其uni升级中心每月云数据库读操作次数费用为9分钱、9毛钱。

写操作次数

uni-upgrade-center升级中心,写数据库操作很少;管理员仅在每次发布新版时,通过uni-adminopendb-app-versions表插入一条新版本信息;用户端App每次启动检查升级,无需数据表的写入操作,故写操作次数可忽略为0;

小结

因为容量费和写操作次数费用均可忽略为0,根据公式:

云数据库费用 = 容量费(忽略为0) + 读操作费用 + 写操作费用(忽略为0)   
           = 读操作费用

可推导,uni升级中心的云数据库计费主要是读操作次数计费,因此我们进一步得出如下预测:

日活 容量费 读操作次数费用 写操作次数费用 合计
100 0 0.009 0 0.009
1000 0 0.09 0 0.09
10000 0 0.9 0 0.9
100000 0 9 0 9

云存储

按照uniCloud官网介绍,云存储费用 = 容量费 + 下载操作次数计费点 + 上传操作次数计费点 + CDN流量费

如果您的应用每次均上架到apple store或安卓各应用商店,升级时从应用商店下载安装,则云存储费用为0,因为使用的是应用商店的存储和CDN下载流量,本计费点测评章节可直接跳过。

uni-upgrade-center 支持设置应用新版安装包下载地址为应用商店地址,这样就可以使用应用商店的存储和CDN,不消耗uniCloud的云存储资源。

现阶段,iOS平台均需上架apple store,我们可以忽略iOS平台的云存储消耗。

如果您的安卓apk安装包及wgt差量升级包全部托管在uniCloud云存储中,我们也可以算算这笔账。

容量费

容量费主要是存储费用,我们可以定期将过期版本删除,从而节省容量费。

假设我们在云存储中保留最近5个版本的文件,apk/wgt全部保留,大小假设分别为:40M、10M。

如前所言,ipa需上架apple store,不使用云存储,测评可忽略。

则每天容量费用为:5 * (40+10)/1024 * 0.0043 = 0.0010498

据此,可计算其每月30天的容量费用为:0.0010498 * 30 = 0.031494,即只需3分钱;

注意:云存储容量仅跟保留的历史升级包多少有关系,跟日活用户无关。

下载操作次数计费点

下载操作次数计费点:仅触发文件下载时会触发,若无新版本下载,则不会触发。

假设你的App日活为100、月活为1500,每月发一次版本;月活用户中,50%会选择升级到新版本,我们可计算下载次数为:1500*50% = 750次

而云存储的下载操作次数计费规则为:每万次0.01元,即每万次下载1分钱,750次下载远还不到1分钱,故下载操作计费点可直接忽略。

上传操作次数计费点

每次App发版,仅需管理员上传一次新的资源包,用户App端检查升级时,不涉及上传操作,故上传操作次数计费点亦可忽略。

CDN流量费

CDN流量费:我们假设50%概率启用wgt资源包升级(升级包为10M),50%概率为整包升级;而整包升级中,20%为苹果用户(使用apple store流量),80%为安卓用户(升级包为40M)。

则按照如上数据模型,日活为100的App,假期其月活为1500,而月活用户中,50%会选择升级到新版本,即750人选择升级,不同升级包消耗CDN流量如下:

  • wgt资源包CDN流量:750 50% 10 / 1024 = 3.662G
  • 苹果整包升级CDN流量:使用apple store流量,uniCloud云存储流量为0
  • 安卓整包升级CDN流量:750 50% 80% * 40 /1024 = 11.719G

即:日活为100的App,月度CDN流量为:3.662 + 0 + 11.719 = 15.381G,对应费用则为:15.381 * 0.18 = 2.76858 (元)

同理,我们可推导出日活为1000的App,其升级中心云存储每月的CDN费用为27.6858元。

和传统 OSS + CDN 对比

如果你不用uni-upgrade-center,选择如阿里云的传统OSS + CDN 方案,同样按量计费的情况下,1PB流量以内,传统CDN都没有价格优势;传统CDN每GB的起步价为0.24元,而uniCloud云存储CDN每GB的费用为0.18元。

详见:阿里云官网CDN定价详情

1PB流量是什么概念?我们以每个安卓安装包为40M为例,需要 1 * 1024 * 1024 * 1024 / 40 = 26843546,即需要2600万人次安装包下载才能达到1PB流量,你可以评估一下你的App何时可以达到这个量级。

具体解释一下:1PB = 1024TB,1TB = 1024G,1G = 1024M,故上面公式连乘3个1024

也有人说了,购买阿里云CDN资源包可以更便宜。确实,购买大额资源包会更便宜,但这个方案有两个缺点:

  • 这个资源包仅仅是CDN流量包,你还需要购买OSS回源流量包,而uniCloud直接将回源流量费用包在CDN费用之内了,无需额外购买回源流量。
  • 预付费,在业务发展不明朗的情况下,一次性投入太多钱;一旦业务失败,CDN资源包未消耗完毕,也不能退款,浪费资金;而按量计费则没有这个问题,真实用多少资源,就花多少钱;

综合来看,uniCloud云存储相比传统云厂商的OSS + CDN 方案:

  • 都选择按量计费,uniCloud版CDN默认0.18元更具价格优势;
  • 预付费方式,选购云厂商CDN资源包,需额外购买回源流量包,对普通开发者,特别是中小开发者,并不友好,此时依然是uniCloud按量计费的云存储更具性价比。

前端网页托管

uni-upgrade-center需要和uni-admin配合使用,uni-admin需要部署在前端网页托管中。uni-admin主要是管理员使用,使用频次较少,流量也较低。

按照uniCloud官网介绍,前端网页托管费用 = 容量费 + 流量费

容量费

uni-admin编译后为4.7M,按照官网每GB每天0.0043元的规则,uni-admin的月度容量费为:4.7 / 1024 * 0.0043 * 30 = 0.00059,不到1分钱,可忽略。

流量费

管理员登录uni-admin,到升级中心管理页面浏览并发布新版,所需流量不超过3M,即使每月发布2次更新,流量费预估为:3 / 1024 * 0.18 * 2 = 0.00105,也不到1分钱,也可忽略。

合并总结

细项对比完了,我们来合并看看,使用uniCloud升级中心,到底需要花多少钱,相比传统自己研发升级逻辑、搭建升级中心,哪些地方都需要花钱,差异点在哪里?

不管是开发者自研的升级方案,还是uni-upgrade-center,存储+CDN的费用都是必需的,前文也将传统OSS+CDN和uniCloud云存储的性价比进行了对比,均按量计费的模式下,uniCloud更具性价比;以资源包方式购买传统CDN模式下,各有优劣。

既然两个方案,都绕不开云存储,那我们暂时抛开云存储对比(更建议走应用商店下载,这样完全没有CDN流量费),将其他各项按照日活用户规模罗列一下,看看uni-upgrade-center在其他维度所需费用。

日活 云函数 云数据库 云存储 前端网页托管 合计
100 0.0245688 0.009 忽略 0 0.0335688
1000 0.245688 0.09 忽略 0 0.335688
10000 2.45688 0.9 忽略 0 3.35688
100000 24.5688 9 忽略 0 33.5688

uni-upgrade-center 给你带来的收益

使用uni-upgrade-center,免费获取、一键安装,你将获得:

  • 经受大量App验证的、完备的检查升级逻辑,同时支持整包/资源包升级,支持静默升级,支持强制升级;
  • 完备的管理功能,分平台发布新版、下线老版,关联应用商店,分渠道发布等。
  • 代码开源,随意定制

如上功能,如果你使用传统模式自研,需要前后端配合开发,后端使用php/java做接口,前端发起Ajax请求,处理服务端的各种响应和错误码,处理升级弹窗提醒,这些功能做完善至少需要4个工作日。

假设工程师月薪18K,社保等综合管理成本是薪资的1.4倍,则4个工作日的综合成本为:18*1000*1.4/22 * 4 = 4582元

总结

再次说回uni-upgrade-center,相比传统方式自研升级中心,存储+CDN的钱都是要花的,我们忽略它。

其它云函数、云数据库等,虽然看起来是额外增加的费用,但实际上你使用传统php/java自研升级逻辑,除了自研人力费用,后期也是需要消耗CPU、内存、带宽资源的,只是这些费用合并到虚拟机的整体租用成本中,你无法拆出来计算罢了。

再看回刚才的计算表,以1000日活用户来说,云函数、云数据库每月才多了0.34元,每年才多了4块钱(不考虑云存储CDN的情况下),一年多花4块钱,可以省掉自研的4500多元人工费用,可以让工程师将更多精力投入核心业务中。这5块钱的买卖,不划算吗?它不香吗?

日活 云函数 云数据库 云存储 前端网页托管 合计
100 0.0245688 0.009 忽略 0 0.0335688
1000 0.245688 0.09 忽略 0 0.335688
10000 2.45688 0.9 忽略 0 3.35688
100000 24.5688 9 忽略 0 33.5688

不重复制造轮子,聚焦业务,快速验证模式,实现商业增长,才应该是聪明工程师的追求。

本篇评测共大家参考。

收起阅读 »

可以添加一个sumup支付嘛?

现在 在使用sumup支付。可以添加一个sumup支付嘛? 不然好不方便

现在 在使用sumup支付。可以添加一个sumup支付嘛? 不然好不方便

uni-app运行微信小程序无法启动? Enable IDE Service (y/N) 

uni小程序

手动开启微信小程序开发工具 -> 设置 -> 安全 -> 打开服务端口

手动开启微信小程序开发工具 -> 设置 -> 安全 -> 打开服务端口

安卓启动图用android studio制作;苹果用xcode制作

启动图片

安卓启动图用android studio制作;苹果用xcode制作。

安卓启动图用android studio制作;苹果用xcode制作。