green-android / certification

Android 绿色应用认证计划
85 stars 1 forks source link

[认证申请] 次元壁纸 #63

Open alvminvm opened 4 years ago

alvminvm commented 4 years ago
oasisfeng commented 4 years ago

保存壁纸(图片)至手机存储中亦无需请求存储权限,详见公约正文。

alvminvm commented 4 years ago

@oasisfeng 经过测试发现,采用 Context.getExternalMediaDirs() 方法无法满足需求。原因如下:

  1. 保存的壁纸用户无法通过相册查看到(测试机子:一加 6T)
  2. 应用删除后,Android/media/me.alzz.awsl 目录会被删除。用户下载的壁纸将丢失

鉴于以上两点,本应用只能申请外部存储权限。还请重新审查

oasisfeng commented 4 years ago

公约鼓励与 Android 最佳实践相一致的应用设计和开发,考虑到部分国产设备(及其内置应用)可能存在与 AOSP 的设计不兼容的情况。公约允许在设备兼容性不佳的情况下,退化至兼容性的实现,但须确保在兼容性较好的设备上,用户体验不会因此而降级。

针对你的具体案例,建议的方案如下:(符合可被相册查看 且 应用卸载后不会被删除的需求)

  1. 优先使用 Storage Access Framework 的 ACTION_CREATE_DOCUMENT 并指定图片的 MIME type 来创建文件,它不需要请求存储权限。
  2. 如果无法正常调用 Storage Access Framework(ActivityNotFoundException 或 onActivityResult 返回的结果不可用、文件无法读写等异常),则退化为请求存储权限。
alvminvm commented 4 years ago

Storage Access Framework 需要用户自己选择保存位置,然而大部分用户是不清楚壁纸应该保存在哪的,交互体验极差。而本应用保证,存储权限只用于将壁纸保存至 Pictures 文件夹内,并以应用名目录进行合理归档,避免用户文件混乱。如果是为了通过认证而严重牺牲用户体验,那我想我这是在本末倒置。我的目标给用户提供优质好用且克制不乱来的壁纸应用。所以请恕我拒绝使用 SAF 以及 getExternalMediaDirs。

另外,我看了下已通过认证的 cuto 及相关壁纸应用的申请,也并未找到更好的解决存储权限申请问题的方法。望老师您能重新审查本应用

alvminvm commented 4 years ago

Scoped Storage这个机制不错。晚些时候发布新版后请老师您重新审核

oasisfeng commented 4 years ago

Storage Access Framework 需要用户自己选择保存位置,然而大部分用户是不清楚壁纸应该保存在哪的,交互体验极差。而本应用保证,存储权限只用于将壁纸保存至 Pictures 文件夹内,并以应用名目录进行合理归档,避免用户文件混乱。如果是为了通过认证而严重牺牲用户体验,那我想我这是在本末倒置。我的目标给用户提供优质好用且克制不乱来的壁纸应用。所以请恕我拒绝使用 SAF 以及 getExternalMediaDirs。

SAF 可以在调用 ACTION_CREATE_DOCUMENT 时通过 DocumentsContract.EXTRA_INITIAL_URI 传入你希望保存的位置,这样用户既可以直接接受你为其预选的保存位置,也可以按照自己的需要另择位置保存,既兼顾了易用性又提供了个性化。

另外,我看了下已通过认证的 cuto 及相关壁纸应用的申请,也并未找到更好的解决存储权限申请问题的方法。

Cuto 是去年通过审核的,存储权限从 2019 年开始纳入公约的必要要求。

oasisfeng commented 4 years ago

避免请求存储权限,并非公约在 2019 年一时的心血来潮,它本身就是公约一直在推动 Android 作出改变的一个重要方面。Google 从 Android 10 开始接纳了公约的倡议,引入 Scoped Storage 机制彻底解决 Android 这个遗留了 10 多年的隐私问题。

作为应用开发者,避免请求存储权限,也是对用户隐私的尊重。就好比家政服务,如果不向客户索取门钥匙也能提供优质的服务,就充分体现了对客户隐私的尊重。

alvminvm commented 4 years ago

目前 v2.0.5 已发布 存储权限作以下调整:

Target SDK version:调整至 29。已对 Android Q 进行适配

辛苦老师重新审核:)

oasisfeng commented 4 years ago

目前 v2.0.5 已发布 存储权限作以下调整:

  • WRITE_EXTERNAL_STORAGE 权限增加版本限定 android:maxSdkVersion="24"
  • Android N 以下采用申请外部存储权限进行兼容,并保证仅对 Pictures 进行写入操作
  • Android N 及 以上,Android Q 以下使用 Scoped Directory Access ,仅在用户点击下载时动态申请对 Pictures 目录的访问权限
  • Android Q 使用 Scoped Storage,通过 MediaStore 获取写入 uri 进行保存壁纸至 Pictures 目录

Target SDK version:调整至 29。已对 Android Q 进行适配

辛苦老师重新审核:)

谢谢你对高水准国内 Android 生态的积极支持和践行!

oasisfeng commented 4 years ago

通过认证的版本:2.0.5(26,酷安渠道)

alvminvm commented 4 years ago

@oasisfeng 在更新日志中增加了公约链接。后续下版本会增加至关于界面

附上更新日志界面截图: image

alvminvm commented 4 years ago

image

关于已加入公约链接