[Android]上架商店时用户隐私协议要求

这是vivo退审意见:

1.获取位置权限要主动点击才能获取不能自动获取。

2.隐私政策开发者名称"重庆XX有限公司"


应用存在功能性问题,请修改后重新提交APK包以便检测,具体表现为:

1.首次进入应用提前获取位置权限--不通过;

2.首页点击会员、预约,提示功能暂未开放--不通过;

3.隐私政策自检报告内容不完整或为用户协议,请至少明示:

① 开发者名称(注:后台上传隐私政策链接中公司名称需与开发者名称保持一致;)


隐私政策应明确标识发布、生效或更新日期(开头或者结尾的位置)


隐私政策要加日期


https://www.angemo.com/privacyMechanic


隐私正常直接抄这个内容


华为驳回意见:

解决:

在启动页后先添加一个"服务协议和隐私政策"弹窗,在同意后再进行初始后。

Kotlin 复制代码
private fun showPrivacyPolicyDialog(context: Context) {
    val dialogBuilder = AlertDialog.Builder(context)
    val message = "请你务必审慎阅读、充分理解"用户服务协议"和"用户隐私协议"各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。你可阅读《用户服务协议》和《用户隐私协议》了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。"
    val spannableString = SpannableString(message)
    val spanAgreement = "《用户服务协议》"
    val spanPrivacyPolicy = "《用户隐私协议》"

    val agreementClickableSpan = object : ClickableSpan() {
        override fun onClick(view: View) {
            navigateToAgreementDetails()
        }
    }
    val privacyPolicyClickableSpan = object : ClickableSpan() {
        override fun onClick(view: View) {
            navigateToPrivacyPolicyDetails()
        }
    }
    val agreementStartIndex = message.indexOf(spanAgreement)
    val privacyPolicyStartIndex = message.indexOf(spanPrivacyPolicy)
    spannableString.setSpan(agreementClickableSpan, agreementStartIndex, agreementStartIndex + spanAgreement.length, 0)
    spannableString.setSpan(privacyPolicyClickableSpan, privacyPolicyStartIndex, privacyPolicyStartIndex + spanPrivacyPolicy.length, 0)

    val textView = TextView(context)
    textView.text = spannableString
    textView.movementMethod = LinkMovementMethod.getInstance()
    // 设置左右外边距
    val paddingInPx = 15 * context.resources.displayMetrics.density
    textView.setPadding(paddingInPx.toInt(), paddingInPx.toInt(), paddingInPx.toInt(), 0)
    dialogBuilder.setView(textView)
    dialogBuilder.setCancelable(false)
        .setNegativeButton("暂不同意") { _, _ ->
            me.shp.edit().putBoolean(KEY_AGREE_PROTOCOL, false).apply()
            finishAffinity() // 退出应用
        }
        .setPositiveButton("同意") { _, _ ->
            me.shp.edit().putBoolean(KEY_AGREE_PROTOCOL, true).apply()
            // 在协程作用域中执行
            GlobalScope.launch(Dispatchers.Main) {
                delay(100)
                enterNextView()
            }
        }

    val alert = dialogBuilder.create()
    alert.setTitle("服务协议和隐私政策")
    alert.show()
}
相关推荐
HahaGiver66616 分钟前
Unity与Android原生交互开发入门篇 - 打开Unity游戏的设置
android·unity·交互
2501_9159090644 分钟前
WebView 调试工具全解析,解决“看不见的移动端问题”
android·ios·小程序·https·uni-app·iphone·webview
IT乐手2 小时前
android 下载管理工具类
android
2501_915106323 小时前
App 怎么上架 iOS?从准备资料到开心上架(Appuploader)免 Mac 上传的完整实战流程指南
android·macos·ios·小程序·uni-app·iphone·webview
科技峰行者4 小时前
安卓16提前发布能否改写移动生态格局
android
蒲公英少年带我飞4 小时前
Android NDK 编译 protobuf
android
沐怡旸4 小时前
【底层机制】ART虚拟机深度解析:Android运行时的架构革命
android·面试
小禾青青5 小时前
uniapp安卓打包遇到报错:Uncaught SyntaxError: Invalid regular expression: /[\p{L}\p{N}]/
android·uni-app
studyForMokey5 小时前
【Kotlin内联函数】
android·开发语言·kotlin
2501_915921437 小时前
iOS 抓不到包怎么办?工程化排查与替代抓包方案(抓包/HTTPS/Charles代理/tcpdump)
android·ios·小程序·https·uni-app·iphone·tcpdump