Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
8585699a
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3172
Star
105
Fork
804
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
93
列表
看板
标记
里程碑
合并请求
67
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
93
Issue
93
列表
看板
标记
里程碑
合并请求
67
合并请求
67
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8585699a
编写于
3月 04, 2022
作者:
D
DCloud_LXH
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into vuepress
上级
45fb2257
671848a6
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
707 addition
and
578 deletion
+707
-578
docs/app-sec-api.md
docs/app-sec-api.md
+127
-0
docs/tutorial/migration-to-vue3.md
docs/tutorial/migration-to-vue3.md
+2
-0
docs/uniCloud/_sidebar.md
docs/uniCloud/_sidebar.md
+1
-1
docs/uniCloud/uni-starter.md
docs/uniCloud/uni-starter.md
+573
-573
docs/unipush.md
docs/unipush.md
+4
-4
未找到文件。
docs/app-sec-api.md
0 → 100644
浏览文件 @
8585699a
为了提升App的安全性,推荐对安装包进行加固处理(如腾讯、360等加固平台),对安全性有更高要求的App建议使用商用加固解决方案。同时也可以使用以下安全类API在应用运行期进行检测,加强应用的安全性。
### getSignature
[
plus.navigator.getSignature
](
https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.getSignature
)
用于获取应用签名标识,可以判断App是否被重新签名。
签名证书是对App开发者身份的唯一标识,如果程序未对签名证书进行校验,可能被反编译后进行二次打包使用其它签名证书重新签名。如重新签名的App可以正常启动,则可能导致App被仿冒盗版,影响其合法收入,甚至可能被添加钓鱼代码、病毒代码、恶意代码,导致用户敏感信息泄露或者恶意攻击。
uni-app项目可以在App.vue的应用生命周期
[
onLaunch
](
https://uniapp.dcloud.io/collocation/frame/lifecycle?id=%e5%ba%94%e7%94%a8%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f
)
中进行校验,示例如下:
```
js
onLaunch
:
function
(
inf
)
{
console
.
log
(
'
App Launch
'
);
// #ifdef APP-PLUS
// 签名证书检验
var
platform
=
uni
.
getSystemInfoSync
.
platform
;
var
sign
=
plus
.
navigator
.
getSignature
();
if
(
'
android
'
==
platform
){
//Android平台
var
sha1
=
'
baad093a82829fb432a7b28cb4ccf0e9f37dae58
'
;
//修改为自己应用签名证书SHA-1值,是全小写并且中间不包含“:”符号
if
(
sha1
!=
sign
){
//证书不对时退出应用
plus
.
runtime
.
quit
();
}
}
else
{
//iOS平台
var
md5
=
'
a2e629f0ea915b4ed11e296a059c9a12
'
;
//修改为自己应用Apple Bunld ID(AppID)的md5值
if
(
md5
!=
sign
){
//不进入应用或循环弹出提示框
console
.
log
(
'
应用被破坏,无法正常运行!
'
);
uni
.
showModal
({
title
:
'
错误
'
,
content
:
'
应用被破坏,无法正常运行!
'
,
});
}
}
// #endif
}
```
> 提示:为了防止js检验代码被反编译篡改,建议将签名校验代码放到独立js文件中并配置[js/nvue文件原生混淆加密](app-sec-confusion),或者使用apk加固处理
### isSimulator
[
plus.navigator.isSimulator
](
https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.isSimulator
)
用于判断当前应用是否运行在模拟器中。
iOS系统由于苹果限制了正式打包后不能在模拟器上运行,一般不存在这种情况;Android系统是开源的,底层代码都是公开的,因此市面上有很多Android模拟器,此问题比较严重。
模拟器通常是运行在PC上,可以利用一些自动化工具自动操作使用App,另外模拟器是一个虚拟操作系统,可能会破坏原生系统的安全性,导致用户敏感信息泄露。
以下示例在App.vue的应用生命周期
[
onLaunch
](
https://uniapp.dcloud.io/collocation/frame/lifecycle?id=%e5%ba%94%e7%94%a8%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f
)
中进行校验,如下:
```
js
onLaunch
:
function
(
inf
)
{
console
.
log
(
'
App Launch
'
);
// #ifdef APP-PLUS
// 模拟器检验
if
(
plus
.
navigator
.
isSimulator
()){
//弹出提示框
uni
.
showModal
({
title
:
'
错误
'
,
content
:
'
应用被不能运行到模拟器!
'
,
complete
:
()
=>
{
plus
.
runtime
.
quit
();
}
});
}
// #endif
}
```
实际项目中可以将此信息提交业务服务器进行判断,如在模拟器环境不允许登录等,多次尝试在模拟器登录可以临时封号,人工客户联系用户核实等,具体可根据业务情况进行调整。
> 提示:为了防止js检验代码被反编译篡改,建议将签名校验代码放到独立js文件中并配置[js/nvue文件原生混淆加密](app-sec-confusion),或者使用apk加固处理
### isSetProxy
[
plus.networkinfo.isSetProxy
](
https://www.html5plus.org/doc/zh_cn/device.html#plus.networkinfo.isSetProxy
)
用于判断当前应用网络环境是否设置代理。
设置代理后所有网络传输的数据都会经过代理服务器,也就是说代理服务器可能看到所有传入内容,导致用户敏感信息泄露、业务服务器被恶意攻击等问题。当然在某些企业内部网络环境为了保证安全,访问公网可能需要设置代理,开发者需要考虑这种需求来决定是否限制应用正常运行。
可以在用户登录时提交当前网络环境是否使用代理,示例代码如下:
```
js
function
login
()
{
//...
//获取网络代理状态
var
isProxy
=
plus
.
networkinfo
.
isSetProxy
();
if
(
isProxy
){
console
.
log
(
"
当前网络环境设置了代理!
"
);
}
//将使用代理状态提交给业务服务器
//...
}
```
### isRoot
[
plus.navigator.isRoot
](
https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.isRoot
)
用于判断当前应用运行的设备是否被root破解。
> 注: 仅iOS平台支持,Android平台暂不支持
root破解(也叫越狱)是利用iOS系统的漏洞来破解系统安全机制,让任何应用可以获得系统级权限,从而对系统可以进行更灵活的自定义修改,譬如说修改字体、修改主题以及使用一些插件等。iOS系统设计了沙盒机制,限制应用只能使用自身的数据,root破解后则应用可以读取修改其它任何应用的数据,可能导致用户敏感信息泄露,甚至修改其它应用的数据或代码,恶意攻击正常App。
建议在应用启动时判断,如果运行在root破解环境则提示用户无法正常使用,uni-app项目可以在App.vue的应用生命周期
[
onLaunch
](
https://uniapp.dcloud.io/collocation/frame/lifecycle?id=%e5%ba%94%e7%94%a8%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f
)
中进行校验,示例如下:
```
js
onLaunch
:
function
(
inf
)
{
console
.
log
(
'
App Launch
'
);
// #ifdef APP-PLUS
//ROOT检验
if
(
plus
.
navigator
.
isRoot
()){
//弹出提示框
uni
.
showModal
({
title
:
'
错误
'
,
content
:
'
应用被不能运行到越狱或ROOT环境!
'
,
complete
:
()
=>
{
//循环弹出提示框或死循环引起应用退出
}
});
}
// #endif
}
```
> 提示:为了防止js检验代码被反编译篡改,建议将签名校验代码放到独立js文件中并配置[js/nvue文件原生混淆加密](app-sec-confusion),或者使用apk加固处理
docs/tutorial/migration-to-vue3.md
浏览文件 @
8585699a
...
@@ -368,3 +368,5 @@
...
@@ -368,3 +368,5 @@
plugins: [uni()],
plugins: [uni()],
});
});
```
```
-
在vue3 的小程序平台中,监听原生的点击事件可以先使用tap。(在vue3中,移除了.native修饰符,所以编译器无法预知click是要触发原生事件,还是组件的自定义事件,故并未转换成小程序的tap事件)
\ No newline at end of file
docs/uniCloud/_sidebar.md
浏览文件 @
8585699a
...
@@ -34,7 +34,7 @@
...
@@ -34,7 +34,7 @@
*
[
定时触发
](
uniCloud/trigger.md
)
*
[
定时触发
](
uniCloud/trigger.md
)
*
[
云函数URL化
](
uniCloud/http.md
)
*
[
云函数URL化
](
uniCloud/http.md
)
*
云存储
*
云存储
*
[
云存储
](
uniCloud/storage.md
)
*
[
API
](
uniCloud/storage.md
)
*
[
腾讯云自定义登录
](
uniCloud/authentication.md
)
*
[
腾讯云自定义登录
](
uniCloud/authentication.md
)
*
[
腾讯云权限管理
](
uniCloud/policy-tcb.md
)
*
[
腾讯云权限管理
](
uniCloud/policy-tcb.md
)
*
[
uni-id用户体系
](
uniCloud/uni-id.md
)
*
[
uni-id用户体系
](
uniCloud/uni-id.md
)
...
...
docs/uniCloud/uni-starter.md
浏览文件 @
8585699a
此差异已折叠。
点击以展开。
docs/unipush.md
浏览文件 @
8585699a
...
@@ -66,14 +66,14 @@ iOS平台需要使用到苹果的APNS,务必在后台正确配置苹果推送
...
@@ -66,14 +66,14 @@ iOS平台需要使用到苹果的APNS,务必在后台正确配置苹果推送
使用厂商推送下发推送消息必须设置intent,该数据格式是Android原生Intent对象序列化由来。具体可参考
[
详情
](
https://blog.csdn.net/u011068702/article/details/51406572
)
。并且intent须符合以下格式,此格式时在个推定义额基础上二次封装,所以必须以此格式为准。不按此格式设置intent可能出现用户点击推送消息无法启动APP的问题。
使用厂商推送下发推送消息必须设置intent,该数据格式是Android原生Intent对象序列化由来。具体可参考
[
详情
](
https://blog.csdn.net/u011068702/article/details/51406572
)
。并且intent须符合以下格式,此格式时在个推定义额基础上二次封装,所以必须以此格式为准。不按此格式设置intent可能出现用户点击推送消息无法启动APP的问题。
intent数据格式如下:
intent数据格式如下:
```
```
intent:
#Intent;action=android.intent.action.oppopush;launchFlags=0x1
4000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
intent:
//io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x
4000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
```
```
**component=io.dcloud.HBuilder/io.dcloud.PandoraEntry 其中io.dcloud.HBuilder为APP包名,需要替换为自己APP的包名;**
**component=io.dcloud.HBuilder/io.dcloud.PandoraEntry 其中io.dcloud.HBuilder为APP包名,需要替换为自己APP的包名;**
S.title=的值为推送消息标题,对应5+ API中
[
PushMessage
](
https://www.html5plus.org/doc/zh_cn/push.html#plus.push.PushMessage
)
对象的title属性值;
S.title=的值为推送消息标题,对应5+ API中
[
PushMessage
](
https://www.html5plus.org/doc/zh_cn/push.html#plus.push.PushMessage
)
对象的title属性值;
S.content=的值为推送消息内容,对应5+ API中
[
PushMessage
](
https://www.html5plus.org/doc/zh_cn/push.html#plus.push.PushMessage
)
对象的content属性值;
S.content=的值为推送消息内容,对应5+ API中
[
PushMessage
](
https://www.html5plus.org/doc/zh_cn/push.html#plus.push.PushMessage
)
对象的content属性值;
S.payload=的值为推送消息的数据,对应5+ API中
[
PushMessage
](
https://www.html5plus.org/doc/zh_cn/push.html#plus.push.PushMessage
)
对象的payload属性值;
S.payload=的值为推送消息的数据,对应5+ API中
[
PushMessage
](
https://www.html5plus.org/doc/zh_cn/push.html#plus.push.PushMessage
)
对象的payload属性值;
**launchFlags=0x
1
4000000字段,解决接收多条通知后点击可能无法触发click事件的问题**
**launchFlags=0x4000000字段,解决接收多条通知后点击可能无法触发click事件的问题**
注意事项:
注意事项:
-
intent格式与个推的多厂商pdf文档中描述的不一样,以此格式为准
-
intent格式与个推的多厂商pdf文档中描述的不一样,以此格式为准
...
@@ -128,7 +128,7 @@ S.payload=的值为推送消息的数据,对应5+ API中[PushMessage](https://
...
@@ -128,7 +128,7 @@ S.payload=的值为推送消息的数据,对应5+ API中[PushMessage](https://
"title"
:
"安卓离线展示的标题"
,
"title"
:
"安卓离线展示的标题"
,
"body"
:
"安卓离线展示的标题"
,
"body"
:
"安卓离线展示的标题"
,
"click_type"
:
"intent"
,
"click_type"
:
"intent"
,
"intent"
:
"intent:
#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush
;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end"
"intent"
:
"intent:
//io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000
;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end"
}
}
}
}
}
,
}
,
...
@@ -200,7 +200,7 @@ public class push2 {
...
@@ -200,7 +200,7 @@ public class push2 {
notification1
.
setTitle
(
"安卓离线展示的标题"
);
notification1
.
setTitle
(
"安卓离线展示的标题"
);
notification1
.
setBody
(
"安卓离线展示的内容"
);
notification1
.
setBody
(
"安卓离线展示的内容"
);
notification1
.
setClickType
(
"intent"
);
notification1
.
setClickType
(
"intent"
);
notification1
.
setIntent
(
"intent:
#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush
;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end"
);
notification1
.
setIntent
(
"intent:
//io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000
;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end"
);
//各厂商自有功能单项设置
//各厂商自有功能单项设置
//ups.addOption("HW", "/message/android/notification/badge/class", "io.dcloud.PandoraEntry ");
//ups.addOption("HW", "/message/android/notification/badge/class", "io.dcloud.PandoraEntry ");
//ups.addOption("HW", "/message/android/notification/badge/add_num", 1);
//ups.addOption("HW", "/message/android/notification/badge/add_num", 1);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录