更新记录

2.0.3(2022-10-04)

修改为小程序代码

2.0.2(2022-10-04)

1.0.0(2022-03-31) 初始化项目 2.0.2(2022-10-04) 项目前后端上传到插件市场


平台兼容性

阿里云 腾讯云 支付宝云
× ×
Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.4.18 × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

云函数类插件通用教程

使用云函数类插件的前提是:使用HBuilderX 2.9+


使用说明 本项目是基于uni-start和uni-admin项目为基础项目进行二开而来,有关使用配置说明完全可参考官方提供的这两个项目。如有任何其他技术上的需要支持的请联系qq:2648142550;本项目是本人独立开发,完全可用于商用。

本项目前后端共用一个uni-cloud云,开发者可参考uni-start和uni-admin自行调试,如有任何问题,我尽量解答

功能模块介绍

在uni-app框架中配置:

在应用模块:manifest.json App模块配置 --> OAuth(登录鉴权)--> 勾选并配置你所需要的模块

服务端配置

uni-starter服务端使用uni-config-center统一管理这些配置, 文件路径/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json 详情下文目录结构uni-id配置说明

1.路由拦截

应用场景

有些页面,限允许已经登录后用户才访问。 常规的做法是打开这类页面之前,检查(前端校验)uni_id_token的值是否有效,如果无效会自动跳转到登录页面。 而这样的页面有很多,入口也不少。面向过程的写法会产生大量的代码冗余,且不易维护。 而uni-starter基于拦截器(uni.addInterceptor),提供了仅需简单配置即可实现的路由拦截功能。

配置方式

支持两种模式(二选一)

黑名单模式

列举需要强制登录的页面完整路径(支持正则)

白名单模式

列举不需要强制登录即可访问的页面完整路径(支持正则)

配置示例

配置文件:项目根目录/uni-starter.config.js

"router": {
        "needLogin" : [
            {pattern:/^\/pages\/list.*/},   //支持正则表达式
                "/uni_modules/uni-news-favorite/pages/uni-news-favorite/list",
                "/uni_modules/uni-feedback/pages/uni-feedback/add"
        ],
/*
    请注意上下,黑名单(needLogin)、白名单(visitor)两种配置模式二选一不可同时使用
*/
        "visitor" : [
            "/",//注意入口页必须直接写 "/"
            {"pattern":/^\/pages\/list.*/}, //支持正则表达式
            {"pattern":/^\/pages\/ucenter\/login-page.*/},
            "/pages/common/webview/webview",
            "/pages/grid/grid",
            "/pages/ucenter/ucenter",
            "/pages/ucenter/about/about",
            "/pages/ucenter/settings/settings"
        ]
}

2.意见反馈

3.隐私政策弹框

根据工业和信息化部关于开展APP侵害用户权益专项整治要求,App提交到应用市场必须满足以下条件:

  • 应用启动运行时需弹出隐私政策协议,说明应用采集用户数据
  • 应用不能强制要求用户授予权限,即不能“不给权限不让用”
  • 如不希望应用启动时申请“读写手机存储”和“访问设备信息”权限,请参考:https://ask.dcloud.net.cn/article/36549

配置弹出“隐私协议和政策”打开项目的manifest.json文件,切换到“源码视图”项 在manifest.json -> app-plus -> privacy 节点下添加 prompt节点

"privacy" : {
    "prompt" : "template",
    "template" : {
        "title" : "服务协议和隐私政策",
        "message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://ask.dcloud.net.cn/protocol.html\">《服务协议》</a>和<a href=\"https://ask.dcloud.net.cn/protocol.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
        "buttonAccept" : "同意",
        "buttonRefuse" : "暂不同意"
    }
}
  • prompt 字符串类型,必填,隐私政策提示框配置策略,可取值template、custom、none,默认值为none
    • template 使用原生提示框模板,可自定义标题、内容已经按钮上的文本
    • custom 自定义隐私政策提示框,uni-app项目中推荐使用nvue页面进行自定义,5+ APP使用html页面进行自定义
    • none 不弹出隐私政策提示框
  • template json格式,可选,模板提示框上显示的内容
    • title 模板提示框上的标题,默认为“服务协议和隐私政策”
    • message 模板提示框上的内容,richtext类型字符串,支持a/font/br等节点,点击a链接会调用内置页面打开其href属性中链接地址。 注意:务必配置此提示内容,或参考上面示例内容并修改《服务协议》和《隐私政策》链接地址
    • buttonAccept 模板提示框上接受按钮的文本,默认值为“我知道了”
    • buttonRefuse 模板提示框上拒绝按钮的文本,默认不显示此按钮
    • second HBuilderX3.1.12+版本新增支持隐私提示框二次确认提示,用于配置二次确认提示框显示内容,message属性值不为空时弹出二次确认提示框
      • title 二次确认提示框上的标题
      • message 二次确认提示框上的内容,支持richtext类型字符串
      • buttonAccept 二次确认提示框上接受按钮的文本
      • buttonRefuse 二次确认提示框上拒绝按钮的文本

更多Android平台隐私与政策提示框配置方法,详情

4.拦截器改造后的uniCloud

  1. Debug,调试期间开启Debug。接口一旦fail就会弹出真实错误信息。否则将弹出,系统错误请稍后再试!
    if(Debug){
        console.log(e);
        uni.showModal({
            content: JSON.stringify(e),
            showCancel: false
        });
    }
  2. 断网自动重试,当callFunction为fail时检测是否因断网引起。如果是会提醒用户并且会在恢复网络之后自动重新发起请求
  3. 常规的errCoder自动执行对应程序,如token无效/过期自动跳转到登录页面。
  4. token自动续期。

配置文件

uni-starter提供了uni-starter.config.js,可配置选择登录注册方式及优先级等,可指定该应用是否强制登录才能进入某个页面。配置项内容如下:

module.exports = {
    "h5": {
        "url": "https://static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com", // 前端网页托管的域名
         // 在h5端全局悬浮引导用户下载app的功能 更多自定义要求在/common/openApp.js中修改
        "openApp": {
            //点击悬浮下载栏后打开的网页链接
            "openUrl": 'https://sj.qq.com/myapp/detail.htm?apkName=com.tencent.android.qqdownloader&info=6646FD239A6EBA9E2DEE5DFC7E18D867',
            //左侧显示的应用名称
            "appname": 'uni-starter',
            //应用的图标
            "logo": './static/logo.png',
        }
    },
    "mp": {
        "weixin": {
            //微信小程序原始id,微信小程序分享时
            "id": "gh_132465798"
        }
    },
    "router": {
        //配置需要路由拦截的页面地址,在打开这些页面之前会自动检查(无需联网)uni_id_token的值,如果token无效就自动跳转到登录页
        "needLogin": [
            "/pages/ucenter/userinfo/userinfo",
            "/uni_modules/uni-news-favorite/pages/uni-news-favorite/list",
        ],
        "login": ["smsCode","univerify", "username", "weixin", "apple"],
        /* 
            这里会根据数组的第0项,决定登录方式的第一优先级是哪种登录方式。
            所有你希望拥有的登录方式这里都需要一一列举,未列举到的或设备环境不支持的登录方式将被隐藏。
            如果你需要在不同平台有不同的配置,直接用条件编译即可。
        */
    },
    //关于应用
    "about": {
        //应用名称
        "appName": "uni-starter",
        //应用logo
        "logo": "/static/logo.png",
        //公司名称
        "company": "数字天堂(北京)网络技术有限公司",
        //口号
        "slogan": "为开发而生",
        //政策协议
        "agreements": [{
                "title": "用户服务协议", //协议名称
                "url": "https://ask.dcloud.net.cn/protocol.html" //对应的网络链接
            },
            {
                "title": "隐私政策",
                "url": "https://ask.dcloud.net.cn/protocol.html"
            }
        ],
        //应用的链接,用于分享到第三方平台和生成关于我们页的二维码
        "download": "https://m3w.cn/uniapp"
    },
    //用于打开应用市场评分界面
    "marketId":{
        "ios":"id1417078253",
        "android":"123456"
    },
    //配置多语言国际化。i18n为英文单词 internationalization的首末字符i和n,18为中间的字符数 是“国际化”的简称
    "i18n":{
        "enable":false //默认启用,国际化。如果你不想使用国际化相关功能,请改为false
    }
}

目录结构@catalogue

uni-starter
├─uniCloud-aliyun   
│   ├─cloudfunctions 云函数目录
│   |   ├─common 公共模块
│   │   |   ├─uni-config-center     uni-starter的服务端配置中心,项目所有云函数的配置在这里填写 详情
│   │   |   |   ├─index.js          config-center入口文件
│   │   |   |   └─uni-id            uni-id模块配置目录
│   │   |   |       ├─config.json   uni-id对应的配置数据:微信登录、一键登录、短信验证码登录等key都在这里填写详情
│   │   |   |       └─file.cert     uni-id依赖的配置文件,假如你使用微信发红包功能,需要的证书文件就是放到这里
│   |   |   └───uni-id              uni-id用户体系 详情
│   |   ├─uni-analyse-searchhot     云端一体搜索模板依赖的云函数 详情
│   |   └─uni-id-cf             用户中心云函数,实现用户注册、修改密码、发送验证码、快捷登录(微信、短信、账户、一键登录)
│   └──database                     云数据目录
│       ├─db_init.json              db_init.json初始化数据库文件,其中不再包含schema 详情
│       ├─opendb-app-versions.schema.json       应用版本,表结构文件
│       ├─opendb-banner.schema.json             横幅数据表,表结构文件
│       ├─opendb-feedback.schema.json           意见反馈表,表结构文件
│       ├─opendb-news-articles.schema.json      新闻文章表,表结构文件
│       ├─opendb-news-categories.schema.json    新闻分类表,表结构文件
│       ├─opendb-news-comments.schema.json      新闻评论表,表结构文件
│       ├─opendb-news-favorite.schema.json      新闻收藏表,表结构文件
│       ├─opendb-search-hot.schema.json         热门搜索表,表结构文件
│       ├─opendb-search-log.schema.json         搜索记录表,表结构文件
│       ├─opendb-verify-codes.schema.json       验证码表,表结构文件
│       ├─uni-id-log.schema.json                登录日志表,表结构文件
│       ├─uni-id-scores.schema.json             用户积分表,表结构文件
│       └─uni-id-users.schema.json              用户表,表结构文件
├─pages                                     业务页面文件存放的目录
│   ├─common                        
│   │   └─webview                           webview目录
│   │       └─webview.vue                   webview页面   用于实现跨端的web页面浏览
│   ├─grid
│   │   └─grid.vue                          带宫格和banner的示例页面
│   ├─list
│   │   ├─list.vue                          新闻列表
│   │   ├─search
│   │   │   └─search                        云端一体搜索插件
│   │   └─detail.vue                        新闻详情
│   ├─ucenter
│   │   ├─about                             关于我们
│   │   │   └─about
│   │   ├─login-page                        登录模块
│   |   |   ├─common                        登录模块公共库
│   │   │   │   ├─login-page.css            公共样式库
│   │   │   │   ├─login-page.mixin.js       公共mixin
│   │   │   │   └─loginSuccess.js           公共登录成功后操作
│   |   |   ├─index                         短信验证码登录,手机号码输入页面
│   |   |   ├─phone-code                    短信验证码登录,验证码输入页面
│   |   |   ├─pwd-login                     账户密码登录
│   |   |   ├─pwd-retrieve                  密码重置
│   │   │   └─register                      注册账户模块
│   │   │       ├─validator.js
│   │   │       └─register.vue
│   │   ├─read-news-log                     新闻阅读记录
│   │   │   └─read-news-log
│   │   ├─settings                      
│   │   │   ├─dc-push
│   │   │   │   └─push.js                   push权限操作SDK
│   │   │   └─settings.vue                  app设置
│   │   ├─userinfo                          用户个人信息
│   │   │   ├─bind-mobile
│   │   │   │   └─bind-mobile.vue           绑定手机号码
│   │   │   ├─limeClipper                   图片裁剪插件,来源[limeClipper](https://ext.dcloud.net.cn/plugin?id=3594) @作者: 陌上华年
│   │   │   │   ├─images
│   │   │   │   │   ├─photo.svg
│   │   │   │   │   └─rotate.svg
│   │   │   │   ├─index.css
│   │   │   │   ├─limeClipper.vue
│   │   │   │   ├─README.md
│   │   │   │   └─utils.js
│   │   │   ├─main.js
│   │   │   ├─cropImage.vue 引用limeClipper的图片裁剪模块,为了方便二开可能会出现兼容`vue`与`nvue`,所以做成了`页面`而不是`组件`
│   │   │   └─userinfo.vue
│   |   └─ucenter.vue                       用户中心
│   |
├─static                            存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─uni_modules                       存放[uni_module](/uni_modules)规范的插件。
├─uni_modules_tools                 uni_modules插件上传辅助脚本 详情。
├─main.js                           Vue初始化入口文件
├─App.vue                           应用配置,用来配置App全局样式以及监听 应用生命周期
├─uni-starter.config                uni-starter的前端的配置文件,项目所有模块的配置在这里填写。详见该文件的代码注释。
├─manifest.json                     配置应用名称、appid、logo、版本等打包信息,详见
└─pages.json                        配置页面路由、导航条、选项卡等页面类信息,详见

注意事项

  1. 真机运行需要制作自定义基座,制作后选择运行到自定义基座
  2. 苹果登录的图标,需要满足苹果应用市场的审核规范请勿随便修改;如需修改请先阅读:Sign in with Apple Button
  3. 应用登录功能,默认不勾选同意隐私权限是响应安卓应用市场的规范;请勿修改该逻辑。

FAQ:常见问题

  1. 提示“公共模块uni-id缺少配置信息”解决方案:在cloudfunctions右键‘上传所有云函数、公共模块及actions’之后,需要在cloudfunctions -> common -> uni-config-center 目录单独上传一次,右键‘上传公共模块’。
  2. 本项目代码可以商用,无需为DCloud付费。但不能把本项目的代码改造用于非uni-app和uniCloud的技术体系。即,不能将后台改成php、java等其他后台,这将违反使用许可协议。

第三方插件(感谢插件作者,排名不分前后):部分插件自行修复了bug或部分修改,请勿自行更新插件。

  1. 图片裁剪 limeClipper @作者: 陌上华年
  2. 二维码生成 Sansnn-uQRCode @作者: 3snn
  3. clipboard.js clipboard
  4. uni-id
  5. unipay
  6. uView Vue3
  7. 其他

注:不喜勿喷,如果有任何技术上需要交流的欢迎。。。

体验二维码 :本人个人账号,可申请体验 (https://vkceyugu.cdn.bspapp.com/VKCEYUGU-29df5230-9029-4918-b7ff-c9010df6254a/b0e64608-18d5-4b36-ac60-7c028c9c29cf.png)

隐私、权限声明

1. 本插件需要申请的系统权限列表:

因此插件不支持删除,故调整为收费的。因为服务到期了,也预览不了了。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问