Android校园应用基于默认短信应用批量发送定制化短信的技术实现及Google Play权限合规解决方案咨询
解决Google Play权限拒审+默认短信应用批量发送定制化短信的方案
我之前也遇到过类似的敏感权限拒审问题,结合你的业务场景和限制条件,给你整理了一套可行的方案——完全不需要重写核心业务逻辑,还能合规通过Google Play审核:
一、核心合规方案:放弃SEND_SMS权限,调用系统默认短信应用发送
Google Play拒绝SEND_SMS权限的核心原因是该权限属于高敏感权限,除非你的应用是默认短信应用,否则很难通过审核。而调用系统默认短信应用发送短信,不需要申请任何敏感权限,完全符合Google的权限政策,这是最稳妥的路径。
技术实现:逐个发送定制化短信(最小改动)
你只需要把原来直接调用SmsManager发送短信的逻辑,替换成调用ACTION_SENDTO Intent的逻辑,就能实现给每个家长发送专属内容的短信。以下是具体代码示例(Kotlin):
1. 定义短信任务数据类
data class CustomSms(val phoneNumber: String, val content: String)
2. 批量发送逻辑(适配Android 10+)
// 保存需要发送的所有定制化短信 private val pendingSmsList = mutableListOf<CustomSms>() private var currentSendIndex = 0 // 注册Activity结果回调(Android 10+推荐用registerForActivityResult) private val sendSmsLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { // 当前短信发送成功,自动触发下一条 sendNextSms() } else { // 发送失败或用户取消,记录状态并继续下一条 Toast.makeText(this, "发送失败:${pendingSmsList[currentSendIndex].phoneNumber}", Toast.LENGTH_SHORT).show() currentSendIndex++ sendNextSms() } } // 启动批量发送流程 fun startBatchSending(smsList: List<CustomSms>) { pendingSmsList.clear() pendingSmsList.addAll(smsList) currentSendIndex = 0 sendNextSms() } // 发送下一条短信 private fun sendNextSms() { if (currentSendIndex >= pendingSmsList.size) { Toast.makeText(this, "所有短信发送完成", Toast.LENGTH_SHORT).show() return } val currentSms = pendingSmsList[currentSendIndex] // 创建发送短信的Intent val smsIntent = Intent(Intent.ACTION_SENDTO).apply { // 指定接收号码 data = Uri.parse("smsto:${currentSms.phoneNumber}") // 设置预填充的定制化短信内容 putExtra("sms_body", currentSms.content) } // 检查是否有可用的默认短信应用 if (smsIntent.resolveActivity(packageManager) != null) { sendSmsLauncher.launch(smsIntent) currentSendIndex++ } else { Toast.makeText(this, "未找到默认短信应用", Toast.LENGTH_SHORT).show() } }
方案优势
- 完全合规:不需要申请
SEND_SMS等敏感权限,Google Play审核不会再卡权限问题 - 零额外成本:使用用户自身的短信套餐发送,不需要API网关费用
- 最小改动:只需要替换短信发送的逻辑,核心业务(考勤数据处理、定制化内容生成)完全不用改
- 无政策风险:不需要把应用设为默认短信应用,完全符合Google的政策要求
二、体验优化建议
虽然这个方案需要用户逐个确认发送(Android系统的安全限制,无法绕过),但可以通过以下方式降低操作成本:
- 在UI上显示发送进度(比如"正在发送第3/10条"),让用户清楚当前状态
- 保存发送结果,提供重试功能,方便用户重新发送失败的短信
- 在发送前给用户明确提示:"即将为您发送${pendingSmsList.size}条定制化短信,请根据提示确认发送"
三、关于"一键批量发送不同内容短信"的补充
目前Android系统的Intent机制不支持直接通过默认短信应用批量发送不同内容的短信(只能批量发送相同内容给多个号码),所以逐个发送是唯一可行的路径。但通过上面的自动触发下一条的逻辑,用户只需要连续点击确认,操作成本已经很低了。
内容的提问来源于stack exchange,提问作者Gk Mohammad Emon
相关产品推荐
相关产品推荐

