You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:22:29