- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
上架vivo商店,使用厂家的离线推送当然是一个重要原因,与小米不同,vivo的推送服务可以在应用未上架的情况下通过添加测试手机的方式进行测试 。
审核流程基本与小米类似 1、企业认证 1、准备营业执照黑白复印件/扫描件 附加红色公章即可 2、对公打款提供开户行信息,一般5分钟左右就会打款,3次错误机会,全错需要走人工 2、审核资料 1、apk文件 2、应用信息包括:名称、测试账号、图标、简介、截图(截图要求是1080*1920,2MB以内;格式:png、jpg) 。
截图需要与应用内容保持一致,例如:如果你截图上有5个按钮,那么测试账号登录之后应该也有5个,截图最好与测试账号身份登录后的效果保持一致.
3、ICP备案号:vivo这里需要添加备案号即可,不需要上传备案截图 4、软著电子证书,上传会自动读取pdf文件证书的信息,如果无法读取,可以在软件著作权栏内上传软著截图 5、承诺书:部分行业资质需要,例如网赚类,也比较简单,按照模板填写公司及app信息盖章拍照上传即可。 6、隐私协议:注意点还是不要过度收集信息。如果使用了其他厂家的推送SDK,需要在协议中体现,可以参照如下:
(1)第三方SDK名称:华为推送SDK 使用目的:消息推送 收集的个人信息类型:AAID(应用匿名标识)、Token、Topic订阅关系、消息下发记录、Token申请记录、缓存消息内容。 官网链接: https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/privacy-statement-0000001050042021 。
(2)第三方SDK名称:魅族推送SDK 使用目的:消息推送 收集的个人信息类型:设备信息、设置信息、位置信息 官网链接: https://www.meizu.com/legal.html 。
(3)第三方SDK名称:OPPO推送SDK 使用目的:消息推送 收集的个人信息类型:设备信息、使用推送服务的应用信息、推送SDK版本号、网络相关信息、消息发送结果、通知栏状态、锁屏状态。 官网链接: https://open.oppomobile.com/wiki/doc#id=10288 。
(4)第三方SDK名称:VIVO推送SDK 使用目的:消息推送 收集的个人信息类型:设备标识信息、网络状态信息 官网链接: https://dev.vivo.com.cn/documentCenter/doc/3663 。
(5)第三方SDK名称:小米推送SDK 使用目的:消息推送 收集的个人信息类型:设备标识信息、设备设置信息、应用使用信息 官网链接: https://dev.mi.com/console/doc/detail?pId=1822 。
vivo对机型的最低版本并没有强制限制,如果你的app只支持Android 9以上,那么vivo的测试机型就不会包含9以下的机型 。
如果你没有明确指定最低版本,那么测试机型会覆盖Android 8-Android 13的机型 。
审核失败会收到类似通知 。
很遗憾,您的应用未通过审核 尊敬的开发者: 您好!您上传的应用“xxxx,包名:xxx.xxx.xxx,版本号:1.1.10”审核未通过。审核未通过原因: 经平台检测该应用隐私测试结果不通过,请您查看测试报告并核实修改apk后再进行上传,避免应用被多次打回。 具体测试报告参见以下链接:: 测试报告地址: https://swsdl.vivo.com.cn/appstore/upload2/pdfFile/20230531/xxx.pdf 测试不通过的机型和log文件地址如下(30天有效): 机型列表: 机型:V1809A log日志: https://vivopublic.oss-cn-beijing.aliyuncs.com/xt9nIVI6CeWhyzHX/20230531/xxx.zip 机型:vivo X21A log日志: https://vivopublic.oss-cn-beijing.aliyuncs.com/xt9nIVI6CeWhyzHX/20230531/xxx.zip 隐私测试报告: https://swsdl.vivo.com.cn/appstore/cloudtest/pdf/20230531/xxx.pdf 隐私行为数据: https://swsdl.vivo.com.cn/appstore/cloudtest/xlsx/20230531/xxx.xlsx 。
测试报告会包含测试的机型及是否通过的记录 覆盖Android8.1-13部分不通过截图 覆盖Android9-13全部通过截图 。
如果有崩溃和异常的情况,可以下周异常机型测试过程的log日志 。
测试报告中会显示检测结论和存在的问题数量 。
具体不通过的原因和测试场景都会列举,并有相关法律条文的依据。 经验:法律条文可以节约时间,避免与风险、法务、产品部门进行无意义的辩论.
我们这里遇到的问题主要是推送SDK初始化在应用启动就开始了,需要改到在用户同意隐私协议之后才能初始化,如果用户没有同意,那么不能初始化相关SDK.
对敏感权限使用会有分析总览 。
所有涉及的敏感权限需要得到用户的授权,并需要向用户说明使用目的和作用,按照经验这部分不全部体现到在隐私协议里面也能通过审核.
这部分内容是隐私测试报告的补充,显示敏感权限调用的时间点和具体的堆栈信息 如果使用了一些第三方的SDK,可能你无法预测SDK的一些行为,例如推送SDK是什么时间读取的设备ID,除了ID之外还读取了什么信息 这时可以参考这份行为数据,进行分析,调整调用时机,或者阻止不必要的调用 。
1、如果你的App有自动更新或者发现新版本的功能,那么你必须保证上传到vivo商店的版本为最新,任何更新的提示会直接导致审核终止。 2、不能有“未完成的功能”,例如某个功能点击显示“暂未开通”或“敬请期待”。 3、隐私协议必须明确注明账号注销的相关信息和方法 4、App名称必须和提交的信息保持一致,开发者名称必须和公司名称保持一致 5、如果你应用内部有广告,那么必须有关闭按钮。 6、应用分类不正确往往不会导致审核失败,而是审核之后会自动帮助修正分类 7、应妥善处理首页/登录页的回退按钮/回退手势 。
1、对于回退按钮或手势操作间隔在一点时间内的操作,可以理解为用户需要退出应用,可以使用 Microsoft.Maui.Controls.Application.Current.Quit() 退出应用 。
public override bool OnKeyDown([GeneratedEnum] Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back)
{
var modelStack = Microsoft.Maui.Controls.Application.Current.MainPage.Navigation.ModalStack;
if (modelStack.Count == 0)
{
if (isExit)
{
//第2次返回键
Microsoft.Maui.Controls.Application.Current.Quit();
}
else
{
//第一次返回键
isExit = true;
new Android.OS.Handler().PostDelayed(() =>
{
isExit = false;
}, 2000);
Toast.MakeText(this, "再按一次退出朗诗德在线", ToastLength.Long).Show();
return true;
}
}
}
return base.OnKeyDown(keyCode, e);
}
2、也可以使用 MoveTaskToBack 直接做最小化后台处理 。
//审核要求登录页回退应该关闭或者最小化
public override bool DispatchKeyEvent(KeyEvent e) {
if (e.KeyCode == Keycode.Back) {
if (e.Action == KeyEventActions.Down) {
if (NavigationManagerExtension.UrList.Any()) {
var lastUrl = NavigationManagerExtension.UrList.Last();
var lastIndex = NavigationManagerExtension.UrList.Count - 1;
if (lastUrl.Contains("Login") || lastUrl == "https://0.0.0.0/") {
NavigationManagerExtension.UrList.Clear();
MoveTaskToBack(true);
return false;
}
else {
NavigationManagerExtension.UrList.RemoveAt(lastIndex);
}
}
else {
//最小化
MoveTaskToBack(true);
return false;
}
}
else if (e.Action == KeyEventActions.Up) {
return false;
}
}
return base.DispatchKeyEvent(e);
}
安卓平台的商店审核规则基本都是一致的,但是审核人员的标准和“仔细”程度不尽相同。 vivo也提供了在线咨询客服的功能,国内商店基本都有在线人工客服,这点比App Store方便很多。 这些审核相关的内容我们如果之前没有App的开发经验,可以提前学习一下,对开发和相关设计都是很有帮助的 例如:权限应该在什么场景下申请,应该怎样向用户说明用途,图标、标题、副标题应该怎样设计。了解不同机型的分辨率和对应的安卓版本等也是很重要的。 vivo官方-应用管理常见问题 vivo官方-开放平台应用审核规范 vivo官方-应用审核常见问题 。
最后此篇关于MAUI+MasaBlazorAPP各大商店新手发布指南(三)vivo篇的文章就讲到这里了,如果你想了解更多关于MAUI+MasaBlazorAPP各大商店新手发布指南(三)vivo篇的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是 Xcode 4.4 和 AppleScriptObjC 世界的新手。我正在尝试扩展和试验 Sanderson 和 Rosenthal 所著的“学习 AppleScript”一书中关于 Apple
我完全迷失在 shell 编程中,主要是因为我使用的每个站点都提供不同的工具来进行模式匹配。所以我的问题是使用什么工具在管道流中进行简单的模式匹配。 上下文:我有named.conf 文件,我需要一个
我对 C 很陌生,我一直在尝试用这种数据结构制作一个程序: struct node { char command[100]; char prereq[100][80]; cha
该程序检查用户输入的数字是否为素数。 我的问题在if语句中。由于某些原因,Boolean永远不会切换。如果数字为质数,则只会给出两个结果。 我想念什么? import java.util.Scanne
我只是在学习 Haskell。我认为这会产生一个阶乘函数...... (在 ghci 内) Prelude> let ft 0 = 1 Prelude> let ft n = n * ft (n -
这个问题已经有答案了: Using bitwise OR 0 to floor a number (7 个回答) 已关闭 6 年前。 我试图在 JavaScript 中使用二分搜索来查找数组元素,并且
使用 Signal R,如果尝试发送对象,传递模型的语法是什么? private async void FormLoaded(object sender, RoutedEventArgs e) {
我需要使用 Javascript 生成一个半金字塔数字系列,其中包含输入的起始数字和 html 页面中的行数,并在 html 页面中显示结果。我已经完成了 Java 脚本编写之类的工作。我不明白的是它
为什么函数名重复 示例: lucky :: (Integral a) => a -> String lucky 7 = "LUCKY NUMBER SEVEN!" lucky x = "Sorry
我花了2天的时间在GGTS中使用grails进行Web开发。我正在跟着一本书。本书使用命令行。到目前为止,这很棒,但是现在这本书正在使用webtest。我已经在命令行上安装了webtest,但是如何在
我正在学习 Clojure,到目前为止我无法理解这个小难题,我确信这是非常基本的。 我有这个文件: (ns cloapp.core (:gen-class)) (defn -main "I d
我在获取图像以显示在我的 J Frame 中时遇到问题。我确信我将文件放在正确的位置并且输入了正确的名称。这是代码 import java.awt.Color; import java.awt.Gra
我正在尝试为我正在做的应用程序创建一个登录窗口。我整天都在寻找一个例子,但我似乎找不到任何有帮助的东西。我的基本结构如下: // App.scala object App extends Simple
坦率地说,我是 Java 新手。我正在开发一个项目,我想找到一种基于数字序列创建多项式函数的方法。 无论如何,我的问题是我创建了一个存储序列的数组。我现在想找出元素之间的差异。例如。我想找到这个计算a
现在添加了 xml 和 logcat,现在自定义 View 代码,不幸的是我远离开发计算机所以我无法检查你的建议,@jems,我的自定义 View 的构造函数可能错误?@Falmarri,我认为构建目
我在这里缺少什么?当我单击“h2 a”链接时,.content ol 应该切换。我不明白为什么它不起作用:( $(document).ready(function(){ $(".content ol
我是 Java 新手,我到处寻找,但我没有得到一个简单的概念。 我将两个变量声明为 int。我希望这两个变量对于所有方法都是全局的。在我的第一个方法中,我想从用户输入中获取第一个变量的值。然后我希望第
我正在抓取 IMDB 页面的数据,但当尝试将其写入 CSV 文件时,我只从结果中获取最后一行。 代码下方: from urllib.request import urlopen as uReq fro
自从我学习 C 语言以来,我决定制作一个简单的程序,用于加、减和计算两个变量的乘积。根据用户的输入是1,2还是3来选择加/减/折叠。 #include int main (void) { in
int main(void) { string n = GetString(); if(n!=NULL){ for(int i=0, j=strlen(n); i
我是一名优秀的程序员,十分优秀!