iOS短信过滤器配置subAction后分类不生效(iOS16)求助
iOS16 短信过滤器 subAction 分类推广/交易短信失效问题排查与解决
针对iOS16上短信过滤器无法通过subAction将短信分类为推广或交易类的问题,结合你的代码,从以下核心点排查解决:
1. 必须正确声明支持子动作的能力
你的ILMessageFilterCapabilitiesQueryHandling实现中未明确声明支持推广和交易类子动作,iOS16要求过滤器必须先告知系统自身支持这些分类,否则会忽略subAction设置。修改方法如下:
func handle(_ capabilitiesQueryRequest: ILMessageFilterCapabilitiesQueryRequest, context: ILMessageFilterExtensionContext, completion: @escaping (ILMessageFilterCapabilitiesQueryResponse) -> Void) { let response = ILMessageFilterCapabilitiesQueryResponse() // 明确声明支持推广、交易类子动作 response.promotionalSubActions = [.promotion] response.transactionSubActions = [.transaction] completion(response) }
2. 确保Action与SubAction的严格配对
系统要求动作与子动作必须严格对应:
- 当
action为.promotion时,subAction必须是.promotion - 当
action为.transaction时,subAction必须是.transaction
检查你的ClassificationType的getAction()和getSubAction()方法,确保映射逻辑正确,示例如下:
// 假设你的自定义分类枚举是ClassificationType extension ClassificationType { func getAction() -> ILMessageFilterAction { switch self { case .promotion: return .promotion case .transaction: return .transaction default: return .none } } func getSubAction() -> ILMessageFilterSubAction { switch self { case .promotion: return .promotion case .transaction: return .transaction default: return .none } } }
3. 验证iOS16的特殊约束
- 仅当
action设置为.promotion或.transaction时,对应的subAction才会生效,不能将这些子动作与.junk、.allow等动作搭配 - 确保短信过滤器在系统设置中已启用:设置 -> 短信 -> 已过滤信息,确认你的应用开关打开,且推广/交易分类选项处于启用状态
4. 调试日志验证
在返回响应前添加日志,确认分类逻辑是否正确触发:
case .allow, .junk, .promotion, .transaction: let response = ILMessageFilterQueryResponse() response.action = offlineAction response.subAction = offlineSubAction // 打印验证返回值 print("分类结果:动作=\(offlineAction),子动作=\(offlineSubAction)") completion(response)
通过控制台日志确认classifyHandler是否正确返回了预期的动作和子动作。
5. 检查扩展配置
确保短信过滤扩展的Info.plist配置正确,NSExtension的NSExtensionAttributes中包含ILMessageFilterExtensionEnabled并设置为YES,如果使用网络请求,需正确配置ILMessageFilterNetworkURL。
内容的提问来源于stack exchange,提问作者Qixiny
相关产品推荐
相关产品推荐

