VIVO开放平台开放平台应用审核规范【重要】

VIVO开放平台开放平台应用审核规范

一、基本说明

1.1  开发者应该遵守国家的法律法规,同时尊重其他开发者的劳动成果,以下的规则将可以帮助您的APP在vivo应用商店尽快通过审核并上架;

1.2  vivo应用商店审核使用系统环境皆为安卓系统;

1.3  应用包名不得随意添加“.vivo”等渠道标识误导审核的信息;

1.4  本平台暂不接受个人开发者注册账号和上传应用,企业开发者提交非本企业应用,需提供相关企业授权;

二、应用详情审核

2.1  基础规范

2.1.1  应用基础信息不得含有违法内容或其他敏感信息,包括但不限于涉政、涉赌、暴力、色情、性暗示及广告法中不允许使用的词汇;

错误图例示范:icon含有色情挑逗信息

错误图例示范:icon含有彩票、赌博信息

2.1.2  应用基础信息不得传播违反社会主流价值观的内容,包括但不限于破坏健康网络环境、传播不良风气等;

2.1.3  应用基础信息不得含有第三方应用市场的名称、介绍、引述、图标、水印等内容;

2.1.4  应用基础信息需体现应用内容或功能,不得添加与应用内容无关的热门搜索词或过期的信息,如存在以节日、时事、活动等为元素的信息,请在节日、时事、活动结束后修改;

2.1.5  应用基础信息不得随意使用vivo、FuntouchOS或OriginOS等平台元素;

2.1.6  应用基础信息不得存在侵权内容;

2.1.7  非儿童类应用基础信息不得出现暗示受众为儿童等内容;

2.2  应用名称

2.2.1  应用名称和副标题不得超过15个汉字字符或30个英文字符;

2.2.2  应用名称和副标题仅限使用汉字、数字、字母,特殊符号仅限使用“+”,如需使用“+”仅限 “XXX+”,且不得添加副标题(如“格力+”);

2.2.3  应用名称与副标题请勿使用大量占位符文本、空格、乱码等无关字符(如:#、*、& 等),空格仅限中文和英文、英文和英文间使用;

2.2.4  应用名称请勿使用不具品牌识别性词汇,包括类别词及类别词叠加,如:手电筒、电话、铃声、主题壁纸、黄金原油贵金属;

2.2.5  应用名称与副标题请勿添加知名品牌、企业或第三方应用的名称,如需使用,请上传真实有效的授权证明;

2.2.6  应用名称与副标题请勿使用重复(两次或两次以上)词语或叠词进行命名,如“微信助手微信助手”;

2.2.7  应用安装到手机上显示的应用名称及应用包体内显示的应用名称需与在后台创建时填写的应用名称一致; 

2.2.8  应用名称不可与已上架应用同名(应用主名称相同即为同名应用,且不区分英文字母大小写),若拥有对应名称的商标权,请点击【应用侵权申诉流程】进行申诉;

2.2.9  应用名称每年(自然年)只能修改4次,未用完次数不可累积,且应用更名需提供对应的软著;

2.2.10  非政务机构应用名称中不得带有政府设定的综合服务管理机构的常用号码代称、简称、缩写等表达;

2.3  应用类别

2.3.1  单机和网游产品请到游戏中心上传,请勿选择应用分类;

2.3.2  儿童益智类小游戏可选择应用分类“育儿母婴”,如宝宝游戏;

2.3.3  桌游类小游戏可选择应用分类“通讯社交”,如狼人杀;

2.3.4  应用分类需与应用实际功能相符,具体可查看【应用分类参考】文档;

2.4  资费方式

2.4.1  应用的资费方式可不填写,或是填写“免费”;

2.4.2  游戏的资费方式为:道具付费、关卡付费,除特殊情况外不得添加为“免费”;

2.5  应用一句话简介

2.5.1  若应用名称无法直观展示应用功能,一句话简介需简短描述应用主要功能;若应用名称可直观展示应用功能,一句话简介需表现其特殊功能、卖点、用途或有别于其它同类产品的特点(注:新用户注册送特权类内容请勿在一句话简介中体现);

2.5.2  一句话简介字数需在5-16个汉字字符(或10-32个英文字符)之间;

2.5.3  一句话简介不得出现行文不规范(如标点不正确,错别字,语句不通顺等),标点符号仅限使用:逗号、感叹号、顿号、问号、空格(英文空格),结尾仅接受使用感叹号或问号以加强语气;

2.5.4  一句话简介不得使用虚假性及误导性内容欺骗、诱导用户下载;

2.5.5  一句话简介不得添加知名品牌、企业的名称,如需使用,请上传真实有效的授权证明;  

2.5.6  一句话简介不得添加过期信息,如存在以节日、时事、活动等为元素的信息,请在节日、时事、活动结束后修改;

2.5.7  一句话简介不得存在蹭词、叠词行为(蹭词行为平台将有权进行打回或修改);

2.6  应用介绍和新版本说明

2.6.1  应用介绍不得低于50字,更新版本的新版说明不得低于5个字且应用介绍与新版说明不能一致;

2.6.2  应用介绍和新版说明不得使用大量占位符文本、空格、乱码等无关字符;

2.6.3  理财类产品不得在应用介绍和新版说明中对收益做承诺;

2.6.4  应用介绍和新版说明不得出现大量蹭词和叠词行为(大量蹭词行为平台将有权进行修改);

2.7  图标/ ICON

2.7.1  ICON请使用256*256或512*512,大小50k以内的直角图标,请参考【ICON设计规范】;

2.7.2  ICON必须保证清晰,不得出现明显模糊、拉伸、压缩、黑边、白边等情况,请参考【ICON设计规范】;

错误图例示范:切角后存在白边

2.7.3  ICON不得添加与vivo平台官方标签内容或形式一致或冲突的角标,存在误导用户,或利用类似vivo平台标签博取用户信任的行为,如官方、正版、热门、首发等;

错误图例示范:角标含有“官方”、“正版”字样

2.7.4  ICON图标不得使用真人头像(代言人除外);

2.7.5  ICON不得使用党徽,国徽等素材作为图标,如需使用请提供相关政府机构证明;

2.7.6  应用安装到手机上显示的ICON需与在后台创建时提交的ICON一致;

2.7.7  ICON不得添加恶意网址;

2.7.8  ICON不可与已上架应用ICON高度相似或相同,且不得含有涉及商标、内容版权、著作权等侵权内容,若拥有对应图标的商标权,请点击【应用侵权申诉流程】进行申诉;

2.7.9  应用安装成功后桌面上必须有且只能出现一个该应用的图标;

2.8  应用截图和闪屏启动页

2.8.1  应用截图格式jpg/png,尺寸为1280*720或1920*1080,大小为2M以内,必须统一为横图或者竖图;

图例:横图

图例:竖图

2.8.2  应用截图可上传3-5张图片,请勿出现重复、模糊、拉伸、压缩、显示不完整、无法体现实际内容等情况;

2.8.3  应用截图和闪屏启动页请勿使用非Android设备照片或外观图(例如:iPhone手机外观素材);

三、应用资质与版权

3.1  应用上架资质和版权

3.1.1  应用不得存在破解、盗版、未获得版权所有者授权或重新打包第三方应用的行为;

3.1.2  计算机软著著作证明书为个人,仅接受该个人为法人的企业上传应用;

3.1.3  同一份计算机软著著作权证书不得在不同应用中使用;

3.1.4  应用上传的公司如与软著的公司主体为子母公司、分公司,请提交真实有效的证明;

3.2  特殊类应用要求

3.2.1  特殊类别应用需提供对应的资质才可申请上架,点击查看【应用特殊资质】文档;

3.2.2  以下产品主要功能如需付费,需有试用功能,且需在收费流程中告知用户或提示用户付费后的限制使用条件(如定位类产品需告知定位功能必须双向同意方能使用):解梦类、约会交友类、数据恢复类;

四、应用功能

4.1  安装/卸载/运行

4.1.1  应用需适配vivo主流机型;(X60,iQOO 3,X23,NEX,X21,X20,X9等,详见vivo主流机型参数);

4.1.2  应用不得出现无法正常安装、卸载,或需要第三方程序支持才可安装、卸载的情况;

4.1.3  应用不得无法正常运行,存在无法启动、闪退、无响应、无网络等问题;

4.2  账号相关

4.2.1  应用主要功能需登录、付费方能使用,或无账号注册功能的产品,请在提交应用时备注测试账号和密码;

4.2.2  应用账号注册、登录功能不可用,审核时尝试多次均无法使用的,将被驳回;

4.2.3  应用含必须验证身份证功能,请提供已验证过的测试账号;

4.2.4  应用应提供账号注销渠道,未提供账号注销渠道可能会被驳回;

4.3  基本功能

4.3.1  请勿出现应用主要内容无法正常显示和获取,新产品为满足用户使用需求应尽可能丰富内容及功能;

4.3.2  请勿出现应用主要功能未实现、功能未完善等情况,DEMO类、在开发中的产品将被驳回,如应用功能有问题,vivo有权在应用上添加必要的风险提醒或相关标识; 

4.3.3  请勿出现应用内涉及主要功能的按钮点击无反应或点击报错;

4.3.4  请勿出现应用打开后提示更新版本,请确保提交的应用为最新版本;

4.4  性能相关

4.4.1  应用不得在使用过程中切换和滑动时界面出现明显卡顿、不流畅;

4.4.2  应用在未启用或者退出至后台后应主动释放系统资源;

4.4.3  应用不得存在严重耗电的行为,导致手机发热、耗电异常;

4.4.4  应用不得存在高占用CPU及内存的行为,导致系统出现卡顿及ANR;

4.5  应用安全

4.5.1  应用不得存在潜在病毒危险(包括代码恶意行为);

4.5.2  应用不得存在暗扣费,未经用户允许即进行暗自扣费;

4.5.3  应用不得存在恶意扣费,未经用户二次确认即进行扣费;

4.5.4  应用不得存在恶意诱导行为:诱导用户点击扣费功能/诱导用户点击广告(含虚假关闭按钮);

4.5.5  开发者须对应用内容进行有效管控,包括但不限于审核过滤违规内容;

4.5.6  应用内不得开启违规分发内容,如捕鱼游戏分发、移动应用平台等(包括H5、秒开类等);

4.6  系统交互

4.6.1  应用不得影响手机系统正常使用,包括但不限于:安装后自动修改系统默认配置且用户无法修改,功能键失灵,系统声音异常/拍照异常/黑屏死机,屏蔽用户短信/电话,修改主叫号码等;

4.6.2  应用不得在无需开机启动却强制开机启动或运行时强制重启手机系统;

4.6.3  应用不得存在劫持系统桌面或者抢占锁屏的行为;

4.6.4  应用不得存在对其他应用恶意干扰、屏蔽的行为,或者含篡改其他应用数据、存档等功能的行为;

4.6.5  应用不得出现已关闭或退至后台仍强制用户使用应用功能的行为,例如:进程杀不掉或应用已关闭仍弹窗形式要求用户操作;

4.6.6  应用不得存在通知栏信息无法清除的行为;

4.7  使用限制

4.7.1  应用功能存在地域或特殊人群限制且未在应用介绍中明确说明的,可能会被驳回;

五、应用内容

5.1  法律法规

5.1.1  应用不得含有违法内容或其他敏感信息,包括但不限于涉政、涉赌、暴力、色情、性暗示及广告法中不允许使用的词汇;

5.1.2  应用不得带有诽谤、人身攻击或者侮辱个人或者团体;

5.1.3  应用不得对武器进行过于逼真的表述(如不能涉及武器的制造工艺和参数等),并鼓励违法或滥用武器;

5.1.4  应用不得存在反政府、反社会或者不符合主流政治、存在国家法律禁止的行为;

5.1.5  贷款类产品不得从借贷本金中以先行扣除利息、手续费、管理费等费用的方式直接或变相收取“砍头息”且贷款产品手续费等其他费用加上利息,核算成年化利率,不得高于36%; 

5.1.6  应用内容存在安全隐患、其他不友好信息或违规违法嫌疑信息,平台将有权拒绝上架;

5.1.7  应用内实际内容与应用内描述或平台信息不符,构成虚假宣传或者误导用户,平台有权拒绝上架(例如:贷款产品实际下款机构与应用内描述或提供的资质不符);

5.1.8  儿童类应用内容需适合儿童,不得含有其他会对儿童造成干扰、危害的内容;

5.2  应用内付费

5.2.1  应用内所有付费必须合理定价并明码标价,必须明确告知可享受的服务,如付费后使用的服务与说明不符,故意隐瞒/隐藏服务限制条件,应用可能被下架,严重者会被封禁账号;

5.2.2  应用不得存在诱导付费行为,包括但不限于诱导直接充值付费或诱导进行线下交易,如:婚恋交友类应用使用诱惑性内容对用户进行诱导扣费,如有必要,vivo会在应用上添加必要的风险提醒或相关标识提醒用户谨慎付费;

5.2.3  儿童类应用内支付功能不得存在诱导儿童支付内容,除非其保留在受家长监控的指定区域中(如短代支付,外链接支付等无需输入密码的快捷支付功能);

5.2.4  自动续费类支付需明确标识好“自动续费”字样,同时要有清晰明确的取消自动续费指引;

5.2.5  应用内付费功能需有完善的账号系统做支撑,无账号打赏、捐赠等行为可能会被驳回;

5.2.6  未登录账号即可支付,且未做明显提示用户绑定账号的,可能会被驳回;

5.3  应用内广告

5.3.1  应用不得包含空白广告位或者招商广告位,且主要目的不得是展示广告或市场营销;

5.3.2  应用广告不得含有违法内容或其他敏感信息,包括但不限于涉政、涉赌、暴力、色情、性暗示及广告法中不允许使用的词汇;

5.3.3  应用在安装到桌面时不得添加除主应用ICON以外的其他图标;

5.3.4  应用广告不得存在模仿系统通知、误导、诱导用户点击广告的行为;

5.3.5  应用广告不得在应用已关闭或者退出至后台时依然存在;

5.3.6  应用广告不得存在捆绑下载行为;(如:APP登录注册页面默认勾选下载其他APP或者必须下载其他APP才可使用);

5.3.7  应用广告不得强制用户观看,弹窗广告不得无法关闭;(如:应用广告自身需能够自主关闭或提供关闭按钮);

5.3.8  应用不得存在需强制用户下载其他应用或游戏才可使用;

5.3.9  应用不得在使用过程中频繁弹出广告(非用户主动),中断用户操作,影响用户体验;

5.3.10  广告与其他非广告信息同时出现,可能造成用户误解为内容时,广告应当显著标明“广告”;

5.3.11  开屏广告不得存在点击除“下载”按钮外任意位置跳自动下载;

5.3.12  应用内广告不得未经用户允许自动触发下载;

5.3.13  面向儿童的广告内容,必须适合儿童观看,不得包含欺骗性内容,或极易导致儿童用户无意间触发行为的内容;

5.4  捆绑下载

5.4.1  应用启动页未经用户许可不得默认勾选下载应用,如存在默认勾选项需明确提示用户;

5.4.2  应用未经用户许可不得自动下载第三方应用;

5.5  应用重复及内容单一

5.5.1  开发者请勿上传多个内容相似或者功能、结构相同的应用,雷同应用可能会被下架处理;

5.5.2  应用的新版本主体功能不得与旧版本的主体功能相差过大,如旧版本为购物商城,新版本更新为视频播放器;

5.5.3  应用不得为简单网站页面打包或套用模板,用户体验质量过低的应用可能会被下架处理;

5.5.4  应用主要功能不得依赖于第三方应用或者需跳转至网页来获取内容及功能;

5.5.5  应用功能、界面不得与应用商店已经收录的应用过于相似或者完全雷同,雷同应用可能会被下架处理,如发现被侵权请点击【应用侵权申诉流程】进行申诉;

5.5.6  暂不收录平台已收录饱和且无特别亮点的新产品(包括但不限于如闹钟、手电筒、计算器);

5.6  欺诈行为

5.6.1  开发者存在以下欺诈行为,应用将被下架,严重者会被封禁账号;

5.6.1.1  应用存在欺诈、误导用户的行为;

5.6.1.2  应用在审核前后通过服务端控制应用内容,在上架后开启违规服务;

5.6.1.3  开发者提供虚假测试账号影响审核结果的行为;

六、屏幕分辨率

vivo主流机型分辨率Android版本屏幕
PAD平板2560X1600Android 11平板设备
X-Fold展开态  1916X2160折叠态  1080X2520Android 12折叠屏-异形屏
iQOO 92400X1080Android 12异形屏
X602376X1080Android 11异形屏
iQOO 32400X1080Android 10异形屏
X232340X1080Android 9.0异形屏
NEX2316X1080Android 8.1全面屏
X212280X1080Android 8.1异形屏
X202160X1080Android 7.1全面屏
X91920X1080Android 6.0/

七、暂不收录应用

类别类型
应用类型小语种(语言学习类除外)
宗教类(佛教、道教除外)
非官方彩票或非法互联网体育彩票和福利彩票产品,包括但不限于彩票资讯类等产品
非法VPN、翻墙、境外媒体等产品
单一影视剧集类、单一图书单行本类
非法集资类、非法众筹类、非法竞拍类,包括但不限于一元夺宝、股权众筹等  
应用功能为刷单、刷评、刷粉、清粉类
自动抢红包类/赌博性质红包类/避雷、埋雷、控数抢红包、红包群类
主功能为网赚类兼职
单一非官方游戏攻略类、单一非官方游戏社区类、单一非官方电竞资讯类
主功能为游戏代练类
主题类、单一壁纸类、单一锁屏类
主要目的为分发类(包含但不限于:应用商店、游戏中心)/主功能为H5游戏中心类(社交小游戏类除外)/破解游戏平台类/作弊器类
棋牌资讯类
独立插件类(硬件插件、辅助插件除外)
色情内容类、血腥暴力类
版权侵权类、应用侵权类
赌博类、博彩类或是地下彩类
支持非法金钱交易的应用
支持手游充值的应用
主要功能涉及非法伪装机身电话号码、短信轰炸的应用(如,恶意修改呼出手机号码)
申请root权限、存在root功能、引导对手机进行root的
积分墙相关应用(通过下载应用换取积分奖品或现金等)
主要功能是诱导用户进行签到打卡或分享至社交媒体赚取收益的应用
虚拟货币相关资源
云养殖、云种植类(如云养牛)
P2P类产品
PUA类应用
儿童小游戏内涉及“儿童邪典片”及手术类型
种子、BT磁力类应用
提供占卜、算命、改名改运、消灾避祸等迷信服务的应用
带有偷拍功能的应用
“深度伪造”类换脸应用
分身、双开、多开类应用
动态IP代理相关服务类应用
支持虚拟定位类应用
数字藏品涉及交易服务类应用
未经评估的免费WiFi类、清理类应用

八、用户隐私与功能权限

8.1  隐私政策

8.1.1  隐私声明需符合《App违法违规收集使用个人信息行为认定方法》、《个人信息安全规范》等法律法规相关条款;

8.1.2  不得出现未向用户提供隐私声明及用户反馈渠道情况;

8.1.3  不得出现隐私声明等收集使用规则难以访问,难以阅读的情况;

8.1.4  不得出现隐私声明未明确收集用户个人信息目的、方式、范围、个人信息存储时间及地点等情况,如需申请和使用敏感权限时,请在提交时说明权限使用场景及用途;

8.1.5  隐私自检报告中应明示开发者名称(若为关联公司请提交关联证明)、APP名称、APP安装及运行所需权限及用途、APP收集使用个人信息的内容、目的、方式和范围;

8.2  用户同意和撤销

8.2.1  不得存在频繁征求用户同意、干扰用户正常使用的情况;

8.2.2  不得存在默认勾选同意隐私政策,或其他默认授权(如使用”好的””我知道了”等无法清晰表达用户同意的词语)的方式征求用户同意;

8.2.3  不得存在用户拒绝不合理个人信息收集或权限收集而拒绝提供业务功能(如:应用需获取电话/定位/联系人等权限才能进入应用,否则退回桌面),不得绑定授权、一揽子授权(如不得强制要求用户一次性同意多个稳私权限),不得因拒绝辅助功能拒绝提供核心基础功能;

8.2.4  应用收集使用个人信息的目的、方式、范围发生变化时,应以适当方式通知用户,包括更新隐私政策等收集使用规则并通过弹窗等方式提醒用户阅读;

8.2.5  处理敏感个人信息应当获取用户的单独同意,并告知处理敏感个人信息的必要性以及对用户权益的影响;

8.2.6  监控的用户可以随时关闭被监控的功能,关闭操作需要在4次点击以内;

8.2.7  帐号服务系统需提供有效更正、删除个人信息及注销用户账号等功能并及时处理和同步,需人工处理的,应在承诺时限内(承诺时限不得超过15个工作日,无承诺时限的,以15个工作日为限)完成核查和处理,不得设置不必要或不合理条件,业务需提供用户行使信息管理权利的渠道或方式;

8.3  收集和使用

8.3.1  应用收集和使用个人信息须遵守数据最小化原则,不得出现超范围或超频次收集个人信息、超范围授权权限、超范围打开业务功能等情况;

8.3.2  应用权限使用需规范,如:不得申请与实际功能无关的权限、不得未经用户许可默认开启和使用权限、不得未经用户许可创建桌面快捷方式、第三方图标、通知栏、悬浮窗等;

8.3.3  系统需对个人信息采用加密保存及加密传输通道,未经用户允许或未做匿名化处理,不得向第三方供应商或第三方应用传输/收集个人信息,包括通过客户端嵌入的第三方代码、插件等方式向第三方提供个人信息;

8.3.4  需在授权时明确:可随时被调取自己的相关权限功能;

8.4  定向推送

8.4.1  若应用中存在定向推送功能,应在隐私政策中向用户清晰明示该功能并告知退出的方式。若应用中定向推送功能使用了来源于第三方的个人信息,应向用户清晰明示,并告知第三方的个人信息来源;

8.4.2  应用将收集到的用户搜索、浏览记录、使用习惯等个人信息用于定向推送时,需通过显著方式向用户进行标示,包括但不限于“个性化推荐”、“定推”、“猜你喜欢”等字样,或通过不同的栏目、版块、页面分别展示,并取得用户同意,同时需提供便捷且真实生效的关闭按钮;

8.5  其它

8.5.1  应用不得申请root权限或存在root功能;

8.5.2  应用不得未经用户允许向外发送短信或拨打电话;

8.5.3  应用不得诱导用户或未经用户许可修改启动项和系统设置;

8.5.4  应用不得未经允许后台频繁联网,消耗大量流量;(如:点击内容直接观看视频/下载应用,无二次确认)

8.5.5  应用不得在未向用户告知、未经用户同意或无合理使用场景的情况下,频繁自启动或关联启动第三方应用;

8.5.6  应用广告页面、开屏广告、主屏等功能页面,不得存在以积分、奖励、优惠等方式欺骗误导用户提供身份证号、人脸、指纹等个人信息的行为;

8.5.7  如在审核过程中仍存在隐私问题,可参考《APP常见隐私问题合规指引》;

九、开发者不当行为条款

9.1  取消开发者资格或者封停

9.1.1  详情请见“开发者账号冻结原因及解封申请流程”;

9.2  开发者应用下架

9.2.1  开发者使用非正常手段伪造或欺骗下载,操纵或者欺骗用户评论影响vivo应用商店的排名,应用将会下架或排名清空;

9.2.2  应用上线后开启恶意广告插件、病毒等行为;

十、其它

10.1  本指南所列条款仅为目前vivo开发者平台已知问题,包括但不限于其他未知问题后续会进行随时更新;

10.2  平台可对开发者产品分类、产品介绍、截图、产品副标题等信息修改编辑的权利,使之正确且符合平台的业务规则; 

10.3  审核指南一经公布即刻生效,vivo有权随时对指南内容进行修改,修改后的结果公布于vivo开放平台网站。

vivo应用审核服务团队

2022年09月22日

注: 

重要提示:即日起新应用将按照新规则执行,新规则上线前上架的应用,如不符合最新版本的APP审核规范,我们将排期逐步进行清理和优化,如您有应用审核方面的疑问,可联系在线客服人员! 

相关链接:

•  企业开发者注册

•  应用分类参考

•  应用审核FAQ

•  特殊行业资质要求

VIVO应用商店应用冻结及解冻流程

VIVO应用商店应用冻结及解冻流程

一、说明

为了提升vivo用户的体验,保护广大开发者利益和开放平台的健康生态,我们可能会对部分存在严重问题的开发者的应用进行冻结,如果您的应用被冻结,想申请解冻,请参阅如下内容。

二、应用冻结规则

违规行为冻结时限是否接受解冻申请
应用名称、介绍、截图、icon等详情信息存在涉嫌蹭词彩票、赌博、色情、政治等内容,驳回后无修改或整改不彻底仍继续上传,此恶意行为达3次或以上永久冻结
换皮类应用永久冻结
涉嫌传播违法违规信息不限时冻结
应用因同一问题被打回3次或以上,且未按照平台审核规则修改,恶意上传冻结3天

备注:以上规则适用于应用上传阶段,应用上架后的应用冻结规则详见《应用违规处罚规则》。若您的应用被冻结,可前往站内信/联系人邮件查看详情。

三、应用解除冻结申请流程

1、要求:非永久冻结的应用冻结期满将自动解冻,无需申请,若有特殊情况需要申请解冻,可参考此流程。

特殊情况说明:例如应用因“换皮类应用”原因被冻结,若能举证应用为非换皮马甲应用,则符合特殊情况,可申请解冻。

2、应用冻结申诉方式:请前往“工单系统”,选择“vivo应用类-应用冻结申诉”进行申诉。若因“审核驳回“场景被冻结,请选择工单”应用冻结申诉(审核驳回)“进行申诉;若应用被下架并且冻结,请选择工单”应用冻结申诉(下架)“进行申诉。

3、申诉材料:

(1)申请解冻原因;

(2)上传承诺函(点击下载附件); 

4、处理时长:平台收到申请起1-2个工作日内。

5、处理结果通知:应用冻结申诉工单处理结果将通过站内信和联系人邮件进行告知。

四、其他

1、在法律法规允许的范围内,vivo有权对本服务的格式条款作出解释。

2、本规则所列条款仅为目前vivo开放平台已知问题,包括但不限于其他未知问题,后续会进行随时更新。

3、本规则一经发布即生效,vivo有权基于运营情况及规划策略对规则内容进行更改,并将在vivo开放平台网站更新,请注意即时查看。相关内容变更后,如果开发者继续使用vivo开放平台提供的服务,即视为已接受修改后的相关内容。如果开发者不接受修改后的相关内容,应当停止使用相关服务。

4、如开发者对于本规则有异议请到开放平台客服处咨询。

VIVO应用商店APP应用违规处罚规则

1. 目的和范围

为共建健康和谐的应用商店生态环境,保证用户以及开发者的共同利益,促进应用商店的健康运营,提高用户以及开发者满意度,特制订本处罚规定,以惩违规以及失信行为。

本规定适用于所有在vivo应用商店上架的应用。

2. 违规定义

风险等级序号违规行为违规场景处罚策略
L01涉黄/赌博/博彩/暴力内容应用通过各种渠道发布涉黄/赌博/博彩/暴力等内容包括但不限于下架并永久冻结(不限于账户&应用冻结)
应用管控不到位,默许用户发布涉黄/赌博/博彩/暴力内容
2政治敏感应用内涉及反政府、反社会、政治讽刺或是政治隐喻的内容
3主管部门要求下架恶意应用主管部门要求下架恶意应用(如主管部门要求下架涉黄低俗等恶意应用)
4社交媒体曝光恶意应用如社交媒体曝光涉黄低俗等恶意应用
5上线后恶意篡改应用绕过审测,于上架后进行恶意违规操作
6高利贷应用存在高利贷或分发高利贷产品
7多级分销判定为多级分销玩法的产品
8非法集资/众筹非法吸收公共存款或集资诈骗或非法众筹
9非法竞拍类非法竞拍类产品
10资质不合规资质造假
11扣费问题未经用户允许恶意越权扣取费用
12欺诈问题包括恶意欺诈并构成钱财损失或未构成钱财损失但应用未履行预期承诺
13病毒安全恶意推送恶意病毒、i管家检测出病毒等情况,代码风险
14恶意侵权判定侵权成立的产品
15违反个人信息保护规定未落实数据全生命周期安全保护要求
L116博彩咨询应用内提供购彩涉赌咨询服务
17诱导扣费应用内未明确告知充值后可享受的服务以及通过虚拟用户或其他媒介进行诱导付费
18马甲换皮功能结构和布局、App内容、UI设计及交互等判定为高度相似
19备案违规如备案时为股票资讯,上架后开启交易功能
20恶意广告应用在后台运行时或退出程序后强制弹出广告
L221内容低俗应用通过各种渠道发布低俗内容
应用管控不到位,默许用户发布低俗内容
22积分墙通过下载应用换取积分奖品或现金/虚拟币等
23分发问题应用分发属性产品
24广告问题广告未经用户允许自动下载应用
广告无法关闭以及传播违规信息等行径
广告伪装模拟系统通知
广告关闭后依然强制弹出
L325广告问题频繁出现广告,打断用户操作包括但不限于限时整改或下架冻结(不限于账户&应用冻结)
26违反个人信息保护规定违反必要原则收集个人信息
侵害用户选择权,未征得用户同意前收集个人信息
侵害用户知情权,无隐私政策或隐私政策不合规
L427平台暂不收录应用对标《应用审核规范》暂不收录应用,存在内容严重违规或主体功能不符合规则等问题包括但不限于限时整改或下架冻结(不限于账户&应用冻结)
28内容不合规问题对标《应用审核规范》,存在icon,应用名称,开发者名称,应用截图、应用介绍等内容不合规问题
29主功能未提供免费试用解梦类、约会交友类、数据恢复类主功能未提供免费试用
30资质不全或有误业务开拓导致资质缺失或资质有误

3. 违规处罚

3.1 违规处罚说明

对于违反本规定的应用,视情节轻重进行处罚,包括对应用本身及对开发者的处罚。处罚措施包括但不限于如下措施:

(1) 通知整改:由vivo开放平台发出电子整改通知,逾期未更包整改不限于下架处理;

(2) 限制曝光:对违规应用执行限制曝光动作,各种推广资源(包括但不限于搜索、活动等)会受到限制;

(3) 下架:对应用执行下架动作,全部分发渠道均不提供下载服务;

(4) 冻结应用:冻结单一应用上传入口,该应用无法进行上传及维护;

(5) 冻结账号:冻结开发者注册帐号,该账户无法上传及维护应用;

(6) 违规叠加:

1.对于同一应用同时或先后出现的问题处于轻微或严重级别的,按严重程度处罚;

2.同一风险等级处罚次数进行累计,不同风险等级处罚次数不做累计。

3.2 违规处罚及后续上架策略

(1) 对于仅下架未冻结应用,整改后可进行提包,测试审核无问题后更包重新上架;

(2) 对于下架并限时冻结应用,冻结期满且整改完成后,进行提包并提交整改报告(整改报告模板请点击下载附件),测试审核无问题后更包重新上架;

(3) 对于下架并永久冻结应用,不再支持上架(如有异议,请前往工单系统-应用冻结申诉),详见《应用冻结及解冻流程规则》;

应用解冻申诉流程:

工单类型定义申诉方式申诉材料处理时效处理结果通知
应用冻结申诉冻结期间对于冻结原因有异议,可自证未出现违规的场景请前往“工单系统”,选择“vivo应用类-应用冻结申诉”进行申诉。(1)申请解冻原因以及凭证;(2)上传承诺函(点击下载附件)。平台收到申请起1-2个工作日内(遇节假日顺延)处理结果将通过站内信和联系人邮件进行告知

(4) 对于冻结状态账户,详见《开发者账号冻结原因及解封申请流程》。

3.3 开发者申诉途径

应用冻结申诉:对于限期冻结&永久冻结的应用,开发者认为违规冻结凭证不合理或可自证违规场景不成立的情况下,可通过“应用冻结申诉”进行申诉(如误报毒),若最终核实为误判,则进行解冻并恢复该应用原有状态(违规问题存在的情况下,暂不支持解冻或提前解冻)。

4. 生效及解释

(1) 本规定自更新之日起生效;

(2) 下架原因可能会通过消息系统、开发者在vivo开放平台注册时填写的邮箱或其他合理的方式进行通知,请开发者确保所提供的电子邮件地址等信息是真实、有效的,并且未设置过滤规定,否则因此造成的一切责任由开发者自行承担;

(3) vivo开放平台有权调整该规定内容,并以电子公告的形式在vivo开放平台公布,无需单独告知,开发者若在规定调整后继续接受vivo应用商店提供的服务,即视为接受该新的规定。新的规定一旦公开即有效替代原来的规定,并对vivo开放平台、开发者产生约束力,新的规定公布后发现的违规行为一律按照新的规定进行处理,请开发者定时关注vivo开放平台;

5. 投诉及举报

如发现平台上产品违反以上规定的,可提供有效录屏证明及复现条件至以下渠道进行投诉举报:

官方邮箱devtousu@vivo.com
工单系统路径:管理中心-应用与游戏-工单系统-投诉举报类-APP违规投诉若涉及侵权,请选择侵权投诉

平台经过查实后,将予以相应处罚。

VIVO应用商店APP违规应用举报流程

VIVO应用商店APP违规应用举报流程

一、背景

尊敬的用户:感谢您使用vivo应用商店下载安装应用程序。为了建立良好的市场秩序和保证您的使用安全。故制定以下处理流程,以尽可能提升您的使用体验。

如您在下载体验应用时,发现应用存在异常的情况,如功能使用异常、应用内容违规或其他违反现有法律规定及公序良俗的现象(涉黄、涉赌、虚假资质等),均可联系平台进行举报反馈。

二、举报方式

1、若您同样为平台开发者,拥有开放平台账户,可登陆工单系统进行举报。

提交方式:点击【工单系统】,选择“投诉举报类”—“异常应用问题举报”烦请按照要求填写信息,并提供证明材料。

2、若您暂无开放平台账户,可按照以下模版发送邮件至devtousu@vivo.com进行举报反馈。

邮件模板如下:

邮件主题:违规应用举报

邮件内容:① 违规应用名称

          ② 违规应用包名或应用下载链接(链接获取方式:在vivo应用商店搜索该应用,点击应用详情,右上角分享即可获取链接)

          ③ 违规内容

          ④ 应用违规的相关截图或录屏(请于附件上传提交)

三、平台回复处理结果

我们收到您的举报后,将会在3-5个工作日内核实处理。vivo开放平台会根据您提供的相关资料进行核实验证,并回复处理结果,敬请耐心等待。

四、注意事项

1、vivo承诺您的举报为匿名举报,不予公开您的个人信息(涉及权益侵害等特殊情形且有必要公开您的个人信息时除外)。

2、您需要保证举报内容及事实的真实性,否则,您可能要承担虚假举报的侵权、违法风险。若您暂无法确定应用是否违规,也可参考平台《应用审核规范》进行判断。

3、本指引所提供的渠道不受理应用违规举报外的其它问题。

VIVO应用商店APP侵权投诉反通知流程

VIVO应用商店APP侵权投诉反通知流程

侵权投诉及反通知流程图

1.被投诉方向vivo开放平台提交反侵权通知 

平台对投诉方提交的材料审核,满足基本要求后,会在法律规定要求的情形下将投诉内容转送给被投诉方;若被投诉方收到通知后认为并未侵权其合法权益,请按照以下要求提供相关材料通知vivo开放平台

(1)被投诉方信息要求

i.被投诉方主体信息

被投诉方的联络信息,包括姓名、身份证或护照复印件(对自然人)、单位登记证明复印件(对单位)、通信地址、电话号码和电子邮件。

ii.被投诉方要求

被投诉方要求恢复的内容或链接对应的名称和具体网络地址以及截图。

iii.被投诉方保证

被投诉人的反通知书应包含以下保证:被投诉人在本反通知书中的陈述和提供的相关材料皆是充分、真实、和准确的,如本反通知书内容不完全属实,被投诉方自愿承担由此产生的一切法律后果。因被投诉方的反通知书而给vivo公司造成的任何损失,包括但不限于vivo因向权利方或用户赔偿而产生的包括律师费在内的各种损失,此外,被投诉方还应赔偿因此给vivo造成的名誉、商誉等损失。

(2)不构成侵权的初步证明材料

i.被投诉人拥有权利的证明材料

包括但不限于相关有权机构颁发的版权证书、商标权证书、专利权证书、作品首次公开发表或发行日期证明材料、创作手稿、经权威机构签发的作品创作时间戳、作品备案证书等能证明权利人拥有相关权利的有效权属证明。

ii.被投诉人提供的服务不构成侵权的材料

包括但不限于被投诉方提供的服务对权利人的服务构成版权、商标权或专利权等侵权的有效证明材料等。

(3)被投诉方主体资质材料

被投诉方有效主体信息,若为代理,请提供代理主体营业执照及代理授权证明材料。

2.邮件提交申请

撰写邮件,以贵公司企业邮箱发送邮件至devtousu@vivo.com。格式如下:

标题:【侵权投诉反通知】xxx(被投诉方应用名)投诉侵权反通知

邮件正文:被投诉方要求恢复的内容或链接对应的名称和具体网络地址

附件提交:包含营业执照、《vivo开放平台侵权投诉反通知书》盖章扫描件、相关有权机构颁发的版权证书、商标权证书。可提供补充材料如作品首次公开发表或发行日期证明材料、创作手稿、经权威机构签发的作品创作时间戳、作品备案证书等能证明被投诉人拥有相关权利的有效权属证明。若为代理,还请提供代理主体营业执照及代理授权证明材料。

3.平台回复处理结果

(1)vivo开放平台根据收到满足基本要求的反通知后,会转发给投诉方,如投诉方不认可被投诉方的反通知内容,vivo开放平台建议双方自行协商解决。如需通过法律途径,vivo开放平台会配合国家机关的取证工作,争议内容的最终处置以双方协商结论或者国家机关的决定或判决为准。

(2)如被投诉方未能在规定时效内提供有效反通知,或者反通知的内容不能初步证明其提供的内容不侵权,vivo开放平台会有权决定下架或者处理其应用。

(3)被投诉方若为应用,需在3个工作日内提供有效反侵权通知;被投诉方若为游戏,需在5个工作日内提供有效反侵权通知。

(4) 对于同一帐号多次被投诉侵权,且被投诉人不提供有效反通知或者反通知的内容不能初步证明其提供的内容不侵权的,vivo开放平台有权对其帐号进行冻结等处理。

4.注意事项

为了确保被投诉方提供相关材料的真实性、合法性和有效性,被投诉方的反通知书(包括相关证明材料等)及其他相关证明材料,原则上应提供原件,不能提供原件的,应提供有被投诉方签字盖章的复印件,若材料涉外的,应按照法律的规定进行公证转递,并同时提供相应的公证转递材料。

反通知的方式:

将前述全部电子材料以及纸质版本材料扫描后通过电子邮件至vivo指定电子邮箱:devtousu@vivo.com

(1)本流程中的被投诉方的反通知书,均应包括反通知书本身及相关的主体资格证明、权属证明、不构成侵权证明等材料。

(2)若被投诉方已经就投诉内容与权利人存在行政投诉或诉讼的,请在提交反通知时,将相关受理证明及提交行政机关或法院的证据材料以及行政机关或法院的意见或决定一同提交给vivo,这将有利于投诉的处理。

VIVO应用商店APP侵权投诉流程

VIVO应用商店APP侵权投诉流程

鉴于vivo开放平台中第三方提供的服务数量庞大,为了建立良好的市场秩序和保护权利人的合法权益,根据相关法律规定,制定以下处理流程,以尽可能保护权利人的合法权益。

侵权投诉流程

1.收集证据填写材料

若权利人认为第三方在vivo开放平台提供的服务侵犯其合法权益,请按照以下要求提交相关材料,通知vivo。

(1)投诉侵权通知书(《vivo开放平台侵权投诉通知书》点此下载

投诉侵权通知书需详细填写好以下内容:

i.权利人主体信息

提供权利人具体的联络信息,包括姓名、身份证或护照复印件(对自然人)、单位登记证明复印件(对单位)、通信地址、电话号码、传真和电子邮件。

ii.权利人的要求

权利人要求删除或者终止的服务的准确名称及截图

iii.构成侵权的证明材料

权利人提供包括但不限于被投诉方提供的服务构成对权利人的版权、商标权或专利权等侵权的有效证明材料等    

为保证侵权有效进行,请按照以下要求补充对应证明文件

iv.权利人保证

权利人的通知书应包含以下保证:权利人在本通知书中的陈述和提供的相关材料皆是充分、真实、和准确的,如果本通知书内容不完全属实,权利人自愿承担由此产生的一切法律后果,承担和赔偿vivo因根据权利人的通知书而删除或者断开被投诉侵权服务而给vivo公司造成的任何损失,包括但不限于vivo因向被投诉方或用户赔偿而产生的包括律师费在内的各种损失,此外,权利人还应赔偿因此给vivo造成的名誉、商誉等损失。

(2)构成侵权的初步证明材料

该初步证明材料应包括:

i.权利人拥有权利的权属证明材料:

包括但不限于相关有权机构颁发的版权证书、商标权证书、专利权证书、作品首次公开发表或发行日期证明材料、创作手稿、经权威机构签发的作品创作时间戳、作品备案证书等能证明权利人拥有相关权利的有效权属证明;

ii.被投诉方提供的服务构成侵权的证明:

包括但不限于被投诉方提供的服务对权利人的服务构成版权、商标权或专利权等侵权的有效证明材料等。

(3)权利人主体资质材料

权利人有效主体信息,若为代理,请提供代理主体营业执照及代理授权证明材料。

2.侵权投诉提交流程

①工单系统提交反馈

适用类型:app名称侵权、logo/icon侵权、APP卡通形象侵权、页面设计侵权、文学作品侵权、影视作品侵权、音乐作品侵权、ICP/IP地址/域名侵权、游戏元素侵权

提交方式:【管理中心】-【应用与游戏】-【工单系统】,选择“投诉举报类”—“应用或者游戏侵权投诉”,烦请按照要求填写信息,并提供证明材料。

②邮件提交反馈

适用类型:app软件代码侵权、游戏版号侵权等

提交方式:请按以下邮件格式,以贵公司企业邮箱发送邮件申请至devtousu@vivo.com

                标题:【侵权投诉】xxx(应用名)投诉侵权应用

                邮件正文:描述侵权情况以及下架需求。

                附件提交:

                包含营业执照、带有签章的《vivo开放平台侵权投诉通知书》(盖章扫描件),同时,附件需提交以下材料,相关有权机构颁发的版权证书、商标权证书。可提供补充材料如作品首次公开发表或发行日期证明材料、创作手稿、经权威机构签发的作品创作时间戳、作品备案证书等能证明权利人拥有相关权利的有效权属证明。若为代理,还请提供代理主体营业执照及代理授权证明材料。

3.平台回复处理结果

应用侵权投诉处理时效为6个工作日内,游戏侵权投诉处理时效为6~8个工作日内。vivo开放平台会根据权利人提供的相关资料进行核实验证,并回复处理结果,敬请耐心等待。

4.注意事项

(1)本文中的权利人,指拥有版权、商标权等合法权益的原始所有人或经原始所有人合法授权的代理人,包括自然人、法人或其他组织等。

(2)为了确保投诉的真实性和有效性,权利人的书面通知书及相关证明材料,原则上应提供原件(扫描件),不能提供原件的,应提供复印件(在复印件上应有权利人的签章)。

VIVO应用商店APP应用认领教程

VIVO应用商店APP应用认领教程

开发者要求拥有非自己账号下产品上传权限,而该应用为该开发者所属,因此申请包名归属权认领。接入支付的游戏暂不支持认领,如需认领,请联系您的对接商务。

一、应用认领

1. 发起应用认领

顶部导航选择【产品】-【应用分发】-【维护-认领】,点击认领

2. 应用认领步骤

步骤一:请填写需要认领的应用包名

步骤二:按照页面指示操作,上传打上签名的签名包。

       注:“签名空包”是平台提供的空包文件,您需要将下载的空包文件及签名说明传给您的技术人员并将要认领应用的签名打入空包。

步骤三:如需要认领的应用属于特殊行业,需提供认领账号的对应特殊行业资质,可参考《特殊行业资质规范》。

3. 查看认领结果

二、应用认领申诉

若无法通过签名包方式认领,请按照以下方式进行应用认领申诉,发送邮件至open@vivo.com。

标题:【认领申诉】xxx(权利人应用名)应用认领申诉

邮件正文:(请提交以下信息)

认领需求:

无法通过签名认领的原因:

认领应用包名:

认领应用名:

认领账号:

认领主体:

附件提交:

(注:

1.附件需提交认领者上传该应用对应的域名的权属证明,当无法提供域名权属证明时则优先提供营业执照及主流市场上架截图。如未在主流市场上架应用时,则补充提供软著或版权证明及其他市场上架截图。

2. 如需要认领的应用属于特殊行业,需提供认领账号的对应特殊行业资质,可参考《特殊行业资质规范》。)

PS:若被认领者因违规行为导致账号冻结,则旗下应用不予以认领,如被认领者存在未经授权上传他人应用、涉嫌侵权行为,认领者可进行线下申诉。

VIVO应用商店32/64分包上传说明

VIVO应用商店32/64分包上传说明

传包须知

前言

为提升终端用户使用体验,降低功耗影响,同时保证APP在手机上的运行效率和兼容性;vivo应用商店将针对不同机型下发合适的包体,推进国内安卓生态对64位架构的支持。

开发者可以在了解本文档描述的规则后,选择适合您的传包模式。

基本规则

  • 同一应用的包名、应用名称、签名需要保持一致;
  • 双包上传时,两个包体的md5值不能相同;
  • 新版本上架后,上一版本同一架构的安装包将被下架,不同架构的安装包不受影响。

单包上传规则

  • 2022年4月1日后新上传的应用,单包上传入口仅支持上传32/64位兼容包和64位架构包,不支持32位架构包;
  • 2022年10月12日起,在架包更新时,单包上传入口仅支持32/64位兼容包和64位架构包,不支持32位架构包(游戏包体更新则于12月1日起不支持32位架构包)。

注:为避免应用分发受影响,建议开发者尽快完成64位适配。

双包上传规则

  • 首次使用“双包上传”,或从“单包上传”更换为“双包上传”时:必须同时上传32位、64位架构包;
  • 通过双包上传并审核通过后,更新时允许在双包上传入口单独维护某个架构包;
  • 双包同时上传时,两个包体的versioncode需保持一致,且两个包体需要同时审核通过后才可上架。
  • 2022年4月1日后,64位架构包上传入口仅上传64位架构包,不支持兼容包。

操作方法/流程

一、创建流程

1、登录vivo开放平台账号→进入管理中心→应用与游戏→应用与游戏列表→点击【创建应用】;

2、录入基础信息后,点击【完善信息】,进入信息完善页面;

3、在该页面可选择APK上传方式为“单包上传”或“双包上传”;

4、包体上传后,等平台审核通过后则可发布。(注:选择“双包上传”则详见上述双包上传规则)

二、单双包切换限制

1、单双包入口可自由切换,但每次单包切换双包时,均需将32位、64位两个包同时上传,双包审核通过后,方可在双包入口单独维护某个架构包。

三、双包维护说明

1、首次使用“双包上传”,或从“单包上传”更换为“双包上传”时:必须同时上传32位、64位架构包;

2、已使用“双包上传”并审核通过后,更新时可单独维护“32位架构”或“64位架构”包体;

3、单独维护某个架构包体时,仅对新上传包体进行审核,未更新的架构会使用上一版本包体进行分发。

VIVO应用创建/更新流程 VIVO应用商店上架全流程教程

VIVO应用创建/更新流程 VIVO应用商店上架全流程教程

一、应用提交流程

1、创建应用

填写应用包名、名称,上传应用icon,完成应用创建。

2、上传APK包,完善信息

填写应用信息、推广信息、资质信息、联系人信息(如下参见部分截图)。

3、点击提交,等待审核

4、审核通过

审核通过上架后,在vivo应用商店进行展示,可操作版本升级或修改资料。

注:请将APP内置的图标替换为高清图标

为了提升用户安装后的视觉体验,请您将APP内置的图标替换为高清图标,以便在vivo手机安装APP后显示清晰美观的应用图标。请于APK内部图标路径替换相应图标,具体每个文件夹中对应的图标尺寸规范如下(原则是不低于规范尺寸,单位:px):

hdpi文件夹 —— 192×192

xhdpi文件夹 —— 256×256

xxhdpi文件夹 —— 384×384

xxxhdpi文件夹 —— 512×512

注:分辨率适配目录参考

480*800    drawable-hdpi

540*960    drawable-sw360dp-hdpi

720*1280   drawable-sw360dp-xhdpi

1080*1920  drawable-sw360dp-xxhdpi

1440*2560  drawable-sw360dp-xxxhdpi

二、应用更新流程

1、版本升级

版本升级,需上传apk包进行更新。

2、资料更新

若只更新应用的相关资料,可无需上传apk包。

3、点击提交,并等待审核通过

Logcat使用限制

Logcat是Android 系统提供的实时查询系统日志的命令工具,帮助开发者在开发调试阶段定位问题,优化自身功能。然而对logcat日志使用不当也会导致一些问题,如个人信息泄漏/功耗等,而开发者对这些问题则关注的少,为此vivo针对logcat做了部分的定制,以防止出现类似的问题。

1. 打印行数限制

vivo限制了logcat输出日志的频率,限制单个进程每秒只能打印 250行,一秒内超出的日志将会直接丢弃(每一秒的日志都是重新计数),并且打印以下的日志:

该日志是对应的进程中打印的,drop 关键字后面表示了当前丢失了多少行的日志,行数限制不区分日志等级。

应用开发者需要控制自身的日志打印量,不能无休止的刷日志。

2. 敏感数据过滤

任何的Android手机只要打开了开发者选项,都可以通过logcat打印系统日志,若日志中有个人数据打印则非常危险,为此vivo在logcat的输出增加了敏感信息脱敏功能,输出的日志中有敏感的数据(如:手机号,设备ID,经纬度,ip地址,URL等),都会全部转换为星号。

未脱敏日志

脱敏后日志

备注:在新的机型上,系统做了区分处理,debug版本应用打印的内容不会脱敏,release版本的会脱敏,满足开发者的调试需要。

3. Logcat调用限制

APP若在运行时需要读取系统日志定位自身发生的异常,调用 logcat 命令时必须增加 -d 参数,即调用logcat不能阻塞进程一直等待;若应用未增加此参数,则系统会特殊处理,实现同等效果(增加参数-d)。如下格式:logcat -d 

增加 -d 参数后,logcat 仅仅会读取当前系统缓存的日志,然后直接退出,不会一直阻塞住。未增加 -d 参数则会持续输出系统日志,对系统负载影响大,特别是系统日志量多的时候,对功耗的影响会非常的大。

VIVI消息推送OriginOS通知渠道 (Channel)规范

1.1  什么是通知渠道?

通知渠道 (Channel) 是 Android O 引入的新功能,旨在解决以下问题:

  • 应用的通知越来越多,给用户造成明显打扰。
  • 在用户有屏蔽应用的部分通知需求时,只能全局屏蔽这个应用的全部通知,不能屏蔽部分,然后留下对自己有用的。

从 Android8.0(API ≥ 26)开始,Android要求开发者必须为所有的通知分配渠道,不同类的消息走不同的渠道发送。用户可关闭单个渠道的消息通知,不会影响其它渠道的消息推送。以原子笔记(v1.0.3.02) 为例,通知分成了5种渠道,1个渠道分组(Channel Group),如下图:

  • 渠道:实际的通知类别,原子笔记分成了5类通知。
  • 渠道分组:一组渠道,仅用于做分组区分,没有更多的逻辑。
  • 每个通知渠道的权限互相独立,互不影响。例如,原子笔记的“录音”类通知为关闭,“提醒”类通知为优先显示。

1.2  如何适配通知渠道?

1. 在产品发布之前,需由产品和运营提前规划好该应用的通知渠道,如“订单通知”、“评论回复提醒”、“新资讯提醒”等,不同类别的消息走不同渠道发送。规划好的渠道不应该在不同版本频繁变更,以免用户设置发生变化。

2. 合理控制渠道数量,建议在2~7个之间;根据需要可以使用渠道分组来对渠道进行分组归类,方便用户区分识别;避免使用1个渠道发送多种类型的通知。

3. 渠道名称是对用户可见的,因此需要使用方便用户理解的文本,因此,渠道命名应符合通知内容特征,例如,发送快递接收信息的专用渠道,命名为“快递信息”,便于用户理解,同时避免名字重复。

4. 渠道名称需要做多语言适配(默认直接显示名称,如果要跟随系统语言的变化而变化,要提翻译),手机重启后才会切换其他语言。

1.3  通知渠道的优先级如何定义

渠道的优先级会影响通知的悬浮、响铃和振动。为了平衡业务发展的需求和通知栏的整体体验,通知栏对渠道优先级的定义做出如下规范:

优先级铃声振动在通知栏显示悬浮显示锁屏显示使用原则
max(以下简称“5”)允许允许允许允许允许(上线中)(用户设置不了)关系到用户生命和财产安全、需要用户立即作出反应否则会造成设备不可用或个人生命/财产受到威胁的通知,如台风预警、暴雨预告、流量预警等,通知栏会视应用使用情况决定是否收紧该能力
high(以下简称“4”)允许允许允许允许允许(上线中)用户短时间内必须了解或采取行动的通知,如信息、电话、账户变动等
default(以下简称“3”)允许允许允许用户在方便时需要尽早查看的通知,如好友申请等;
low(以下简称“2”)允许跟用户相关但可以等待的,或无需用户处理的通知,如关注的作者更新、有更新的内容等;
min(以下简称“1”)允许与用户完全无关的非必要信息,如促销内容、活动信息等;

具体到业务场景,本规范根据消息的类型,给出了每种消息优先级的可设置范围,不在以下范围内的,由各项目组与通知规范小组共同决策:

分类优先级上限类别举例
系统消息系统通知验证码4验证码信息
软件更新3APP版本更新提示信息
邮件3邮件的发送、接收状态信息
短信4短信,彩信等信息
语音通话4语音通话相关的信息
软件状态5与应用的运行、性能、权限、流量等通知信息
常驻信息4音乐类、工具类、天气类等常驻通知栏信息
用户订阅社交动态2用户之间的社交互动提醒,如:被赞、被@、评论、留言、关注、转发
非社交动态2非社交属性的且与用户相关的实时信息更新
订阅4用户主动订阅关注的内容更新提醒,如:你关注的xxxx更新
日程4用户设置的行程通知,提醒
物流4物流节点信息,包括收发货,派送,签收,取件通知等
订单4生成订单相关信息  如:下单成功  卖家收到新订单 订单详情
特殊关注4基于普通的动态、订阅消息之上的特别关注内容
待办4用户在app内设置的提醒信息
财务4包括收付款,红包,涉及金额、账单、交易等信息
出行4用户使用相关app时的导航、路线相关提醒
营销消息新闻资讯阅读推荐2非用户主动订阅,APP向用户推送的文字内容。如:微博、资讯、新闻、点评、小说、公告
音频推荐2非用户主动订阅,APP向用户推送的视频、音频、直播、
陌生人推荐2大V、主播、异性、可能认识的人等
理财2金融理财产品推荐,如:投资、贷款、股票、基金、贵金属。
天气2天气相关的推送
产品推荐广告促销2商品推广、宣传,或者折扣、红包、领劵优惠信息
产品推荐2所有商品、商家、店铺推荐
活动推送运营活动2各类APP内的活动、小游戏提醒,如:抽奖、积分、签到、任务、分享、偷菜、领金币、限时折扣、红包、返现、优惠卷
邀请2APP基于自身产品功能对用户发起的各类邀请,如:邀请用户点评、答题、发布视频、撰文等
IM消息即时聊天信息即时消息4用户与用户或商家进行交流时产生的文字推送
消息提醒4不展示具体消息内容的IM消息提醒,如:你收到一条新消息(伪装成消息提醒的内容推荐类不算)
其他消息/不在以上分类的,由各业务方与SQA共同决策

“社交动态”类需满足“交互要求”:1. 弹窗说明将收到该类别的PUSH通知。2. 用户可选择“同意”或“取消”,用户同意后可加入“系统消息”分类。

“订阅更新”类需满足“交互要求”:1. 弹窗说明将收到该类别的PUSH通知。2. 告知用户关闭通知的完整路径,可加入“系统消息”分类。

FAQ

1、一定要适配通知渠道吗?

取决于你的应用的API:

  • API ≥ 26(Android 8.0):必须适配,而且必须给每条通知指定一个渠道,否则无法发出通知
  • API ≤ 25(Android 7.1):可以不适配。在8.0及以上的设备,通知也能正常发出

2、一定要有渠道分组吗?

不是必须的。没必要强行设置渠道分组,应该视自己的业务需求而定。

3、我的通知是通过Vpush发的,我也能自己设置渠道吗?

目前,Vpush只有固定的渠道,不支持应用自定义Vpush渠道哦~

4、适配渠道后,在 Android 8.0 以前的设备会怎么表现

Android 8.0 以前的设备,会完全无视这个功能,因此不会带来任何兼容性问题。

VIVO手机OriginOS通知样式规范

1.1 前言

  • 规范中的说明和图示仅为示意,通知能包含的行数及每行字数,视系统当前所使用的字体和语言、当前设备的分辨率、全/半角符号、字/行间距等而定;通知的按钮位置、图片大小等会跟随OS整体视觉风格进行优化或调整,恕不另行通知,建议实际开发时在真机上调试和验证。
  • 通知自行设计和开发,系统仅提供基础能力,具体使用由开发者决定需要开发者。
  • OS版本覆盖需要较长的时间周期,且Android的接口存在版本差异,请注意通知在各个目标机型上的样式表现,做好兼容。
  • 规范中的说明和图示仅适用于OriginOS中国大陆版本。
  • 图示文案仅为示例,不代表真实的应用通知内容。

1.2 概述

1.2.1  通知的使用原则

1. 适合发送通知的事件:

(1)  对时间敏感的(例如日程通知)。

(2)  与他人有关的(例如新信息通知)。

(3)  涉及用户财产或数据安全的(例如支付宝转账通知)。

(4)  通知不应该成为主要的与用户沟通的渠道,因为频繁的中断可能会造成影响。

2. 不适合发送通知的事件:

(1)  与用户没有直接关系或时间不敏感的(例如朋友圈的更新)。

(2)  已经显示在屏幕上的(此时应在应用界面中告知用户,例如用户正在聊天界面聊天时,有新的消息,应直接显示在界面上,无需发通知)。

(3)  一些应用可以自行处理的技术细节(例如保存,同步或升级的过程)。

(4)  应用可以自行快速恢复的错误信息,不需要用户参与操作。

(5)  没有提供直接价值,仅仅为了让用户返回到应用程序的消息。

(6)  对用户当前操作的反馈,最好使用弹出框或Toast提示,而非通知。

1.3 通知提醒方式

通知发出后,可以通过以下方式提醒用户,各应用在定义通知提醒方式时,需要充分考虑用户使用场景及可行性:

1. 通知栏显示通知(默认,如果同一应用的通知条数达到2条,会分组)。

2. 状态栏图标(受开关、channel优先级、应用类型等控制)。

3. 悬浮通知(受开关和channel优先级控制):对用户设定的在顶部预览显示的通知,会在通知发出时在屏幕上方以悬浮框形式显示通知内容,并在5s后自动消失,可上滑收起,横滑删除。

4. 锁屏通知(受应用“锁屏通知”开关控制):对用户允许的、在锁屏之后收到的通知,会在锁屏状态下显示。

5. 另外,部分通知还可发出声音或振动(受channel优先级和开关控制)。

6. 在有闪烁LED的设备上,收到部分通知时还可闪烁LED。

1.4 核心的通知组件

1.标题区域

2.内容区域

3.动作区域

1.5 推荐使用的通知样式

1.5.1 安卓原生的标准样式 (Standard template)

使用说明:最常见的样式,也是通知的默认样式,用于传递信息。

设计要点:

1. 应用图标(必选):使用应用图标而非功能图标,因为该图标不能承载具体的功能。

2. 应用名称(必选):与发通知的应用名称保持一致。

3. 辅助信息(可选):可显示应用中的通知来源,如登陆了多个账户的电子邮件app,可在此处显示该通知所指向的账户。

4. 时间(必选):若非必要,请保证时间显示与通知实际发送时间一致。

5. 通知标题(可选,推荐显示):避免与应用名称重复。

6. 通知详情(可选):避免重复标题中的内容。

7. 附图(可选):应与通知内容有关;避免与应用图标重复。

注意:

1. 建议同时具备通知标题和通知详情,若因内容所限,请保证显示通知详情。

2. 目前vpush仅支持本样式,不支持配置“附图”。

1.5.2 安卓原生的大文本样式 (Big text template)

使用说明:用以展示更多的文本内容。

使用条件:需同时满足API≥16和Android ≥4.1。

设计要点:

• 基本视图

用户可点击右上角箭头按钮展开至扩展视图。

• 扩展视图

版本差异:

1、在OriginOS 1.0以前的版本中,不显示右上角箭头按钮、基本视图显示2行通知详情内容,用户需要双指下滑展开至扩展视图。

2、从OriginOS 1.0开始,显示右上角箭头按钮、基本视图显示1行通知详情内容,用户通过点击箭头按钮展开至扩展视图。

1.5.3 安卓原生的媒体样式 (Media template)

使用说明:为音乐、广播等媒体播放设计的通知样式,可以展示媒体内容,并且可以对媒体内容进行控制。

使用条件:需同时满足API≥21 和Android ≥5.0。

设计要点:

可设置on going属性,让用户无法删除该条通知。

• 基本视图

• 扩展视图

版本差异:

1. 在OriginOS 1.0以前的版本中,不显示右上角箭头按钮,用户需要双指下滑展开至扩展视图。

2. 从OriginOS 1.0开始,显示右上角箭头按钮,用户通过点击箭头按钮展开至扩展视图。

1.5.4 进度条样式 (Progress template)

使用说明:用以表示上传/下载进度。

设计要点:

• 有两种类型:无明确进度和有明确进度,有明确进度的可以预估结束的时间;(不强制使用,模块自行评估,建议短时间可结束的场景使用百分比,长时间可结束的场景使用预估结束时间。)

• 可设置ongoing属性,让用户无法在一键清空通知栏时删除该条通知(用户单独滑动本条通知时,仍可响应删除操作)。

有明确进度

• 基本视图

1. 预估结束时间(可选):有明确进度的可以预估结束的时间

• 扩展视图

无明确进度

• 基本视图

• 扩展视图

1.6 不宜使用的通知样式

vivo不推荐使用本规范之外的通知样式,尤其是涉及到虚假内容、诱导、欺骗一类的。我们会在此处不定期公开不规范的通知使用样式,请各位开发者予以关注:

近期不规范样式(2022年2月22日更新):

1、通知中包含分割线,使一条通知视觉呈现上如同两条通知。

2、通知中包含异型大按钮,且按钮点击无效。

3、伪装为来源于其他应用的通知,甚至伪装为系统通知。

1.7 为通知添加其他属性

1.7.1 添加附图 (Large icon)

使用说明:通知默认没有 large icon,增加 large icon可丰富通知的内容,尤其适用于 IM / 邮件等场景。

使用条件:需同时满足API≥11 和Android ≥3.0。

设计要点:

1.附图

• 应与通知内容有关,避免与应用图标重复。

• 请不要滥用 large icon,我们后续会视情况而定是否收紧这个能力。

1.7.2 添加按钮 (Action)

使用说明:Actions 指的是通知的快捷按钮。

使用条件:需同时满足API≥16 和Android ≥4.1。

设计要点:

添加了按钮的样式如下(除媒体通知外,最多可以设置3个 Actions)。

注意:

• 通知默认不会有按钮。

• 任何通知样式都可以添加按钮,开发者可以自由搭配。

• 按钮只能在双指下滑展开至大视图时显示,系统应用默认显示按钮是因为做了特殊处理(历史遗留问题)。

1.7.3 ongoing属性

用于表示“会持续一段时间的、正在进行的任务,且提供了用户暂停/停止/关闭该任务所必须的操作选项”的通知。

 点击跳转落地页,落地页上可关闭任务 不是表示进行中的任务,点击不能快速关闭

1.7.4 通知分组

自Android 7版本开始增加了通知的分组功能,将同一应用的多个通知合并为可展开的层次结构。

未分组
分组未展开
分组已展开

根据触发方式,分组可分为自动分组和自定义分组:

1、自动分组:如果同一应用发出2条或更多条通知且未指定分组,则系统会自动将这些通知分为一组。

2、自定义分组:应用在发送通知时,发送指定分组id的头通知或子通知,则指定分组的通知将被分为一组,一组中有一个头通知和多个子通知。

注意:

1、请开发者不要滥用自定义分组,包括但不仅限于:一条通知一个分组、同一应用有两个以上的自定义分组。

2、在某条通知与其他通知具有区别较大的功能、且样式与控件与常规通知相差较大时,可以使用自定义分组;运营消息不可以使用自定义分组。

3、同一应用,使用自定义分组的头通知不可以超过2条,即同一应用最多只能有自动分组+2个自定义分组。

1.8 管控及惩罚规则

vivo会定期巡查通知样式,发现有不合理使用通知的行为时,会给予邮件警告,必要时将会采取限制。

1.9 FAQ

1、怎么判断API版本?

各 Android 平台版本所支持的 API 级别请查看文档:https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels

2、API和Android需要同时判断吗?

是的,取API和Android中的较小值,因此,我们强烈建议业务方积极升级API,享受安卓新特性(API关系到的不止是通知,可能也会影响业务中的其他功能,详情请咨询业务中的安卓开发工程师~)

3、章节1.5之外的通知样式,算是符合规范的吗?

我们强烈建议:开发者在通用样式能满足需求的情况下不要去“自创”通知样式;如果当前的通知样式的确不能满足需求,请基于用户体验原则考虑通知是否为最好的呈现方式。另外,我们会使用“巡查”的方式进行监管,严重的话会收紧该应用在vivo手机上的通知能力。

4、什么影响通知栏的排序?应用自己能定义吗?

OriginOS按时间排序;OriginOS之前使用安卓原生的排序规则。

更多FAQ后续补充。

VIVO【桌面图标长按快捷方式】接入指导

一、概述

1、Shortcuts是android7.0的新特性,能配置shortcuts的activity必须符合action是android.intent.action.MAIN且category是android.intent.category.LAUNCHER,;Shortcuts实现方式分为静态和动态注册。

2、vivo桌面v9.3.0以后的版本已经开放三方应用自定义快捷方式能力。

二、接入后效果

1、接入后展示效果

自定义功能由应用自身定义,最多显示4个,如上图中“微博”自定义的“热门微博”、“扫一扫”、“发微博”快捷功能。

系统提供默认的功能,由系统确定,不支持自定义,如上图中系统默认的“卸载”、“应用信息”、“编辑桌面”功能。

2、具体实现

参数说明:

shortcutId:快捷方式的唯一标示,必传属性

shortcutLongLabel:桌面优先显示此字段配置的名字

shortcutShortLabel:没有shortcutLongLabel字段或者为空时展示此字段

shortcutDisabledMessage:禁止使用快捷方式的显示字段

icon:桌面显示快捷方式需要的图标

action:通常是android.intent.action.VIEW,也可以根据自己需要更改

targetClass:对应跳转activity的全路径名

targetPackage:对应跳转activity的包名

静态注册方式:

在res文件夹下创建xml文件夹,其中放入shortcuts.xml文件,同时在AndroidManifest.xml中action符合上述2个要求的activity标签中添加<meta-data android:name=”android.app.shortcuts” android:resource=”@xml/shortcuts”/>即可,具体shortcuts.xml和AndroidManifest中的配置如下图:

特别注意其中的shortcutLongLabel,shortcutShortLabel,shortcutDisabledMessage中的string必须写在string.xml中,不然无编译

动态注册方式:

动态注册相对于静态注册灵活性更高,只要是在符合上述2个条件的Activity中可以根据需求进行添加和移除,此添加和移除原生代码是在主线程中执行,实测可以放到子线程,一般正常添加快捷方式都是在onCreate()中第一次进入直接添加即可,重复添加和多次删除同一个ID,测试无异常;

写法如下图:

VIVO【桌面图标角标】适配说明

一、概述

桌面图标角标,接入完成后需要用户手动开启,开启完成后收到新消息时,在已安装的应用桌面图标右上角显示“数字角标”。

二、接入后效果

1、接入后展示效果

应用有新消息需要告知用户时,在桌面显示数字角标。

显示效果同上图中的“应用商店”、“vivo官网”右上角数字角标。

2、“桌面图标角标”默认关闭

接入成功后,“桌面图标角标”默认关闭,需要用户手动开启。

开启路径:“设置”-“通知与状态栏”-“应用通知管理”-应用名称-“桌面图标角标”。

未成功接入“桌面图标角标”的应用,无“桌面图标角标”选项。

备注:视OS版本差异,“桌面图标角标”名称可能为“应用图标标记”或“桌面角标”。

3、具体实现

a. 添加权限:

<uses-permission android:name=”com.vivo.notification.permission.BADGE_ICON” />

b. 应用在需要显示桌面角标的场景,通过广播将信息发送给vivoLauncher:

广播参数:

action:launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM

packageName:应用包名

className:主类名

notificationNum:未读消息数目

简单示例:

Intent intent = new Intent();

int missedCalls = 10;

intent.setAction(“launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM”);

intent.putExtra(“packageName”, “com.android.xxxx”);

intent.putExtra(“className”, “com.android.xxxx.Mainxxxx”);

intent.putExtra(“notificationNum”, missedCalls); 

intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);

sendBroadcast(intent);

注意: 

在8.0上,还需要给Intent加上下面的flag

Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND

VIVO手写笔SDK接入指南

业务介绍

vivo手写笔SDK提供了在vivo Pad上使用手写笔进行笔形选择、笔形绘制擦除,笔迹预测等能力,主要包含画笔工具栏和画布两个组成部分,通过SDK的简单集成,即可为应用提供多种书写绘制能力。

功能介绍

1.画笔工具栏
画笔工具栏包含以下内容
画笔工具:铅笔,钢笔,水彩笔,马克笔四种画笔工具,5档粗细调节,同时可通过调色盘进行颜色修改
橡皮工具:包含像素橡皮擦和对象橡皮擦两种橡皮擦类型
套索工具:包含框选,移动,复制,剪切,粘贴,删除的功能
另外还提供了撤销、重做及仅手写笔涂鸦开关功能

2.画布
画布提供了一块区域,用于笔迹的绘制和擦除,同时集成了笔迹预测功能

3.笔迹预测
笔迹预测功能通过笔迹的报点,对笔迹绘制的位置进行预测,减少了笔迹绘制的延迟,优化了书写体验

接入指南

一、SDK接入

开发环境

Android Studio 3.4及以上版本
Gradle 版本 3.4及以上
minSdkVersion 28
targetSdkVersion 30
compileSdkVersion 30

接入流程

vivo手写笔SDK目前仅支持在vivo Pad上使用,开发者需要在本地集成aar以及声明SDK所需权限,即可开始接入SDK进行应用开发,接入步骤如下:
1.首先在本地lib添加penengine.aar文件。

2.在build.gradle文件中添加对应依赖

repositories { 
    flatDir { 
        dirs 'libs' 
    } 
} 
       
dependencies { 
    implementation(name:'penengine', ext:'aar')
}  

3.在AndroidManifest.xml文件中添加SDK所需权限,添加之后便可开始使用SDK进行开发了

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

4.在proguard-rules.pro文件中配置混淆

-keeppackagenames com.vivo.penengine.impl
-keep class com.vivo.penengine.impl.**.*

二、简单应用介绍

下面介绍sdk最基础的使用方式,在应用页面添加画布和画笔工具栏,添加之后便可使用画笔选择,笔迹绘制和擦除等功能,步骤如下

1.在应用页面对应的layout文件添加VivoCanvasViewImpl

layout

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
 
    <com.vivo.penengine.impl.VivoCanvasViewImpl
        android:id="@+id/canvasView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="100dp"
        android:layout_marginBottom="100dp"
        />
 
</FrameLayout>

2.初始化VivoCanvasViewImpl和VivoToolPickerImpl,并将两者进行绑定

MainActivity

public class MainActivity extends Activity {
 
    private static final String TAG = "MainActivity";
    private VivoCanvasViewImpl mCanvasView;
    private VivoToolPickerImpl mToolPicker;
    private boolean mIsEngineAvailable;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mIsEngineAvailable = PenEngineManager.isEngineAvailable(this);
        if (mIsEngineAvailable) {
            return;
        }
        setContentView(R.layout.activity_main);
        mCanvasView = findViewById(R.id.canvasView);
        mToolPicker = new VivoToolPickerImpl(this);
        mToolPicker.bindCanvasView(mCanvasView);
        mToolPicker.show();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        if (!mIsEngineAvailable) {
            return;
        }
        if (mToolPicker != null){
            mToolPicker.onResume();
        }
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (!mIsEngineAvailable) {
            return;
        }
        if (mToolPicker != null) {
            mToolPicker.onDestroy();
        }
        if (mCanvasView != null) {
            mCanvasView.release();
        }
    }
}

功能介绍

一、画布回调和笔形选择

1.可通过注册回调监听接口来获取画布事件,包括涂鸦内容修改和笔形切换。

回调接口中

onStepChanged 在每完成一笔绘制之后进行回调,其中StepType表示该笔绘制的类型,分为 NEW(新增笔迹) UNDO (撤销),REDO(重做),CLEAR(清空撤销重做栈)

onSetPen 接口会在笔形切换之后进行回调,可用该接口监听笔形的变化

onPathLoaded 接口在画布初始化笔迹加载完成后进行回调

mCanvasView.registerOnCanvasListener(new VivoCanvasViewImpl.OnCanvasListener() {
            @Override
            public void onStepChanged(StepType stepType) {
            }
 
            @Override
            public void onSetPen(Pen pen) {
            }
 
            @Override
            public void onPathLoaded() {
            }
        });

2.默认工具栏提供的笔形类型包括 钢笔、铅笔、水彩笔、马克笔、橡皮、套索,可在初始化toolPicker后通过禁用来实现自定义的笔形组合

Set<PenType> penTypes = new HashSet<>();
penTypes.add(PenType.PENCIL);
mToolPicker.disablePens(penTypes);

3.可在初始化时通过setPen接口设置默认笔形,依次设置笔形类型,透明度(0 ~ 100),颜色,粗细等级(0 ~ 4)

mToolPicker.setPen(Pen.WATERCOLOR_PEN, 60, Color.BLACK, SizeLevel.LEVEL_0);

二、笔迹预测

笔迹预测功能,即通过当前的轨迹,预测出下一个可能的触摸点,用于减少画笔轨迹绘制的延迟。

逻辑如下:
1.通过获取轨迹的点集
2.将点集传入算法中,通过算法计算得到预测点的数据
3.算法返回结果即为根据轨迹点集所得的预测点

以下使用简单demo进行展示,使用一笔完整的绘制轨迹经过的点作为点集,计算出预测点

1.在onTouchEvent中,使用requestUnbufferedDispatch() 方法获取无缓冲的MotionEventsl流
2.对每个ACTION_MOVE和ACTION_UP的报点,获取对应的历史点,得到完整的轨迹点集
3.将点集送入算法引擎中,获取对应的预测点,此后可对此预测点进行渲染
4.view销毁时,需要释放算法引擎

public boolean onTouchEvent(MotionEvent event) {
    // step 1: Request unbuffered dispatch of the given stream of MotionEvents to this View.
    requestUnbufferedDispatch(event);
 
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        mTouchPointDataList.add(ConvertUtil.convertMotionEventToTouchPoint(event));
        ......
    } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        handleActionMove(event);
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        handleActionMove(event);
        ......
    }
    invalidate();
    return true;
}
 
private void handleActionMove(MotionEvent event) {
    // step 2: Get the history point set of the current motion event.
    for (int i = 0; i < event.getHistorySize() - 1; i++) {
        MotionEvent historyEvent = MotionEvent.obtain(event.getDownTime(),
                event.getHistoricalEventTime(i), event.getAction(),
                event.getHistoricalX(i), event.getHistoricalY(i), 0);
        mTouchPointDataList.add(ConvertUtil.convertMotionEventToTouchPoint(historyEvent));
    }
    mTouchPointDataList.add(ConvertUtil.convertMotionEventToTouchPoint(event));
 
    // step 3: Use algorithm to calculate prediction point.
    if (mVivoAlgorithmManager == null) {
        mVivoAlgorithmManager = new VivoAlgorithmManagerImpl(getContext());
    }
    if (mVivoAlgorithmManager.isFeatureEnable()) {
        mEstimatePoint = mVivoAlgorithmManager.computeEstimatePoint(mTouchPointDataList);
    }
    ......
}
 
public void release() {
    // step 4: Release algorithm engine.
    if (mVivoAlgorithmManager != null) {
        mVivoAlgorithmManager.release();
    }
    ......
}
public static TouchPointData convertMotionEventToTouchPoint(MotionEvent event) {
    if (event == null) {
        return null;
    }
    TouchPointData touchPoint = new TouchPointData(event.getX(), event.getY());
    touchPoint.setOrientation(event.getOrientation());
    touchPoint.setPressure(event.getPressure());
    touchPoint.setTime(event.getEventTime());
    return touchPoint;
}

三、手写笔按键切换

手写笔按键切换功能,需要在按住按键落笔时切换笔形为橡皮擦,抬笔后切换笔形为原来的笔形

处理逻辑如下:

收到ACTION_DOWN事件后进行判断,事件的buttonState是否为BUTTON_STYLUS_PRIMARY,若是则代表按键事件触发,此时判断当前是否为橡皮擦,如果不是则切换为橡皮擦,同时记录状态;

抬笔后对状态进行判断,如果笔形被切换为橡皮擦,则切换为原来笔形。

@Override
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getPointerId(event.getActionIndex()) == 0) {
        if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_POINTER_DOWN) {
            if (event.getButtonState() == MotionEvent.BUTTON_STYLUS_PRIMARY) {
                if (mErasePen != null && mCurrentPen.getType() != Pen.PenType.POINT_ERASE && mCurrentPen.getType() != Pen.PenType.STROKE_ERASE) {
                    //TODO switch to eraser
                    mIsDownChange = true;
                }
            } else {
                mIsDownChange = false;
            }
        } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_POINTER_UP) {
            if (mIsDownChange) {
                //TODO switch to last pen
            }
        }
    }
    return super.onTouchEvent(event);
}

VIVO高长宽比设备应用适配指导意见

一、 适配背景

目前vivo有意向采用1080×2400/1080×2460/1080×2520等更高长宽比分辨率,经测试发现有些游戏和应用存在异常边、花边、裁切、黑边过大等情况,为避免以上情况,需要对这些游戏和应用进行相应适配调整。建议游戏或应用适配时考虑更大屏幕比例的情况,提高不同屏幕比例的兼容性;同时建议不要固定屏幕比例来判断适配,这样会导致游戏或应用只能兼容固定屏幕比例。

二、调整意见

1、游戏logo或背景出现异常边

描述:logo或背景两侧,出现黑边、蓝边、白边等异常边。

原因:logo或背景宽高比例过小。

措施:建议采用第一条。

(1)提供宽高比例更大的logo或背景;

(2)优先匹配屏幕高度,宽度可稍微裁切(不影响用户体验);

(3)比例相差不大的情况下,可适度拉伸(不影响用户体验)。

2、游戏出现异常边

描述:游戏两侧出现黑边、蓝边、白边等异常边。

原因:游戏固定了宽高或屏幕比例。

措施:请参见第6条获取屏幕宽高,确保背景和游戏能充分铺满屏幕。

游戏各种按钮、状态栏等需要根据屏幕宽高,调整对屏幕相对位置,确保显示完整、布局美观。

3、游戏两边出现花边

描述:游戏两侧出现杂色边,后面内容覆盖了之前内容。

原因:游戏固定了宽高或屏幕比例,后续某帧超过该比例,造成花边。

措施:请参见第6条获取屏幕宽高,确保背景和游戏能充分铺满屏幕。

游戏各种按钮、状态栏等需要根据屏幕宽高,调整对屏幕相对位置,确保显示完整、布局美观。 

4、视频两边出现裁切

描述:播放视频时,视频宽度上发生裁切,造成显示内容变少。

原因:视频优先匹配高度,造成宽度上内容裁切。

措施:请参见第6条获取屏幕宽高,将优先适配高度,改为优先适配宽度,保证视频内容的完整性,并合理安排其他布局。

5、应用底部黑边过大

描述:应用底部黑边过大,底部文字、对话框等位置偏上,造成显示不美观。

原因:屏幕比例变大时,底部黑边相应变大,但是底部文字、对话框等未按屏幕高度动态调整,而是固定了与视频的相对位置。

措施:请参见第6条获取屏幕宽高,然后根据屏幕高度,向下动态调整文字或对话框的相对位置,使显示更美观。

6、获取屏幕宽高方法

(1)获取屏幕物理宽高

建议游戏或满屏应用使用,获取屏幕真实物理宽高。

    WindowManager manager = this.getWindowManager();
    Point outSize = new Point();

Display display = manager.getDefaultDisplay();
    display.getRealSize(outSize);
    int width = outSize.x; //屏幕物理宽度
    int height = outSize.y; //屏幕物理高度

(2)获取应用宽高

建议非满屏应用使用,在某些情况下,应用宽高和屏幕物理宽高有差异。

如在有导航栏、刘海、非透明状态栏等情况下,可以使用以下方法获取实际应用宽高。

WindowManager manager = this.getWindowManager();

DisplayMetrics outMetrics = new DisplayMetrics();

Display display = manager.getDefaultDisplay();

display.getMetrics(outMetrics);

int width = outMetrics.widthPixels; //应用宽度

int height = outMetrics.heightPixels; //应用高度

三、模拟验证

使用分辨率为1080的屏幕,比例任意的手机:

1、进入开发者选项,打开USB调试;

2、电脑进入cmd命令行,输入”adb devices”,确保能连上手机;

3、Cmd命令行输入:”adb shell wm size 1080×2400/1080×2460/1080×2520”

模拟分辨率为1080×2400/1080×2460/1080×2520的情况;

4、测试应用或游戏,是否出现黑边、花边、裁切等情况;

5、测试完毕,cmd命令行输入:”adb shell wm size reset”,恢复屏幕分辨率。

音频类AudioManager接口使用规范

一、setRingerMode错误使用会使得与铃声相关音频全部被静音

问题描述:

某些APP会调用该接口实现静音铃声播放或将手机切换为振铃模式的功能,用户在使用此类APP进行上述两种操作中任意一种后,会导致手机系统中所有与铃声相关音频都会被静音,用户接收不到铃声、手机提示音等,严重影响用户使用体验。

建议:

非声音设置类型的应用不调用setRingerMode接口,交由手机系统控制。

二、setSpeakerphoneOn可能会导致语音和通话被强制从扬声器输出

问题描述:

语音社交类APP为满足用户语音外放的需求,会调用此接口,但若未在播放结束后,将该接口参数设置为false,会导致之后语音和通话音频流会一直被强制从扬声器输出,影响用户使用其他APP。

建议:

一旦APP调用了setSpeakerphoneOn(此时参数为true),在播放音频流结束后,需要设置setSpeakerphoneOn参数为false,把音频通路还原。

三、setStreamMute这个接口即将废除,建议使用其他接口

问题描述:

该接口会使得用户在使用APP时,静音了某个音频流后,手机中已安装的其他APP,其相应类型的音频流都会被设置为静音。

建议:

setStreamMute接口即将被废除,建议开发者使用相应音频实例对应的调节音量参数来实现静音APP自身播放的音频流的功能,例如:AudioTrack实例中的setVolume;MediaPlayer实例中的setVolume;mPlayer.setVolume(0)。

四、setStreamVolume设置错误的音频流类型,会使用户无法正常调节手机音量

问题描述:

在不同的使用场景,用户会有调节不同音频流音量的需求,APP可以调用接口setStreamVolume(int streamType, int index, int flags)来满足这一需求,但往往开发者并没有将streamType参数与当前场景正在播放的音频流类型设置一致,并且该接口可以截获系统的音量按键,导致用户使用APP时,按音量键调节音量后,当前的声音音量大小却没有变化。

建议:

(1)当前vivo手机系统已经可以实现智能识别用户调节音量的场景,并且精准定位用户需要调节的音频流类型,因此建议音量按键交由手机系统来控制。

(2)如若开发者需要调节特定音量,要使用setStreamVolume接口,请设置好符合用户需求场景的正确音频流类型。

五、如若错误使用setMode,会导致音频输出到错误的设备上

问题描述:

当前很多APP(常见于社交类)使用这个接口来设置手机通话模式,改变手机声音的输出设备。用户在使用APP时,使用“语音通话模式”(AudioManager.MODE_IN_COMMUNICATION)后,手机会默认从听筒输出音频,导致用户听不见手机提示音、来电铃声等音频。

建议:

开发过程中,需要注意在播放音频流结束后,调用接口setMode (AudioManager. MODE_NORMAL),把手机模式还原为正常模式。

六、setBluetoothScoOn使用不当,会导致蓝牙无声音输出

问题描述:

当用户需要声音从蓝牙输出时,某些APP会使用蓝牙Sco-link通路来传送语音数据到蓝牙耳机。如果开发者没有使用startBluetoothSco成功建立 sco-link连接通路后就直接调用setBluetoothScoOn(true

),会使得蓝牙耳机无声音输出。

建议:

开发者应使用startBluetoothSco和stopBluetoothSco接口来建立/断开sco-link连接通路,在建立sco-link连接后,有场景需要将音频从蓝牙切换到手机上时候,调用setBluetoothScoOn(false),再次将音频切换回蓝牙播放时,使用setBluetoothScoOn(true)。

七、setMicrophoneMute没有配对使用,可能导致手机录音或语音发送功能失效

问题描述:

某些社交/直播类APP会调用该接口实现语音静音发送的功能,但有些开发者在APP退出的时候没有设置接口为unmute,导致后续其他APP使用手机麦克风录制出来的音频都是静音状态的,影响用户的使用。

建议:

由于这个接口直接作用在手机的底层麦克风数据通路,影响范围很大,不建议使用这个接口来实现语音静音发送的需求。开发者可以通过将APP获取到的音频数据直接替换为值=0(静音)的方式,或采取把录制上来的数据直接丢弃不处理的方式来实现这种需求。

vivo X21屏下指纹适配指南

vivo X21屏下指纹适配指南,点击此处可下载开发过程中所需的全部代码。文档具体内容如下:

一、FingerprintInsets

public final class FingerprintInsets

extends Object

java.lang.Object    

↳  com.vivo.fingerprint.ud.FingerprintInsets

该类描述屏幕指纹相关信息,例如指纹图标位置,指纹图标显示状态等。该类会连接屏幕指纹服务获取状态信息,应用只有在 isReady() 返回 true 的时候才能通过该类的其它接口获取相关信息。使用本接口,需要应用声明com.vivo.fingerprint.permission.READ_STATE 权限,调用 create 方法后,应用不再使用该系列接口后应该调用 destroy 方法释放相关的资源,避免造成可能发生的内存泄露。

该类的方法都不是线程安全的,这就意味着所有方法都应该在同一线程中调用,create 方法会创建一个 Handler,因此该类的所有方法应该在主线程或者有 Looper 的线程中调用。

使用该类的 minSdkVersion 应该不小于 11(Android 3.0.x)。该类能够在 vivo 手机及其它 sdk version 不小于 11 的非 vivo 设备上使用。本类依赖 android-support-v4。

ICON_INVISIBLE

int ICON_INVISIBLE = 0

图标状态标记,表示指纹图标不可见。

值:0

ICON_VISIBLE

int ICON_VISIBLE = 1

图标状态标记,表示指纹图标可见。

static void setDebugEnable(boolean enable)

打开或者关闭内部日志

enable: 是否打开日志

static FingerprintInsets

create(Context context,FingerprintInsetsListener listener)

该类可以创建对象实例,如果多次调用该方法并且没有调用 destroy,则返回的是同一个对象,如果创建失败,则返回空,这种情况一般是在非 vivo 手机上调用该接口,如果创建成功,该方法会产生一个对 context 的弱引用对象,listener 可为 null。

context:组件上下文

listener:Insets 内部事件监听器

返回值:创建成功返回非空置,失败则为空

boolean isReady()

指纹相关状态是否初始化完毕,只有在初始化完毕后,才能调用其它接口获取正确的参数。

void destroy()

清理当前实例对象。

boolean hasUnderDisplayFingerprint()

当前机型是否有屏幕指纹,非 vivo 机型上始终返回 false

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

void setFingerprintInsetsListener(FingerprintInsetsListener listener)

设置 insets 事件监听器,用于 isReady 和 图标状态变化事件(显示,隐藏)监听。

listener:Insets 内部事件监听器

int getFingerprintIconState()

获取指纹图标状态,返回 ICON_INVISIBLE 或者 ICON_INVISIBLE

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

Rect getFingerprintIconPosition()

获取指纹图标位置,返回指纹图标 left, top, right, bottom四个维度,坐标值为屏幕绝对坐标。

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

int getFingerprintIconLeft()

获取指纹图标 left 值

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

int getFingerprintIconTop()

获取指纹图标 top 值

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

int getFingerprintIconRight()

获取指纹图标 right 值

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

int getFingerprintIconBottom()

获取指纹图标 bottom 值

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

二、FingerprintInsets.FingerprintInsetsListener

public interface FingerprintInsets.FingerprintInsetsListener

com.vivo.fingerprint.ud.FingerprintInsets.FingerprintInsetsListener

监听 FingerprintInsets 事件,包括 Insets 准备就绪,指纹图标显示或者隐藏。

void onReady()

Insets 准备就绪

void onIconStateChanged(int state)

指纹图标状态变化

state:FingerprintInsets.ICON_VISIBLE 可见,FingerprintInsets.ICON_VISIBLE 不可见,-1 状态更新中。

 代码示例 ↓ 

private FingerprintInsets mInsets;


class InsetsListener implements
   FingerprintInsets.FingerprintInsetsListener {
   @Override
   public void onReady() {
       boolean hasUdFeature =
           mInsets.hasUnderDisplayFingerprint();
       if (hasUdFeature) {
           final Rect rect =
             mInsets.getFingerprintIconPosition();
           Log.d(TAG, “iconRect:” +
                   rect.toShortString());
           // TODO: vivo device support
           // under display fingerprint.
       } else {
           // TODO: vivo device don’t
           // support under display 
           // fingerprint.
       }
   }


   @Override
   public void onIconStateChanged(int state) {
       Log.d(TAG, “onIconStateChanged ” + state);
   }
}


mInsets = FingerprintInsets.create(
       this, new InsetsListener());
if (mInsets == null) {
   // TODO: Not vivo device.
}


// Later call destroy if needed.
if (mInsets != null) {
   mInsets.setFingerprintInsetsListener(null);
   mInsets.destroy();
   mInsets = null;
}

移动智能终端补充设备标识服务

Android Q系统限制应用获取IMEI,DEVICE ID等标识。为满足移动应用开发者业务诉求,移动安全联盟(MSA)联合vivo等厂商共同开发了支持多厂商的统一补充设备标识调用SDK。现该统一补充设备标识调用SDK已通过vivo内部测试并开放对接。

更多问题请联系客服或对接商务。

相关附件:

附件1:移动智能终端补充设备标识体系统一调用SDK开发者说明文档v1.10

附件2:团体标准-移动智能终端补充设备标识规范

附件3:移动智能终端补充设备标识体系统一调用SDK+F&Qv1.0

附件4:msa_sdk_v1.0.10