NEAppPushProvider未被调用,iOS本地推送配置问题求助
NEAppPushProvider未激活、未被调用问题排查建议
已完成的前置操作
- 配置应用使用本地推送通知
- 获取Apple权限授权
- 为SimplePush应用和SimplePushProvider创建含网络扩展的证书,两者加入同一Group ID
主应用配置代码
let pushManager = NEAppPushManager() pushManager.matchSSIDs = ["Tenda_6B8340","ouamassi", "Tenda_6B8340_5G", "192.168.1.7"] pushManager.localizedDescription = "PushProvider" pushManager.providerBundleIdentifier = "" // 此处填写我创建的SimplePushProvider的应用ID pushManager.delegate = self pushManager.isEnabled = true pushManager.providerConfiguration = [ "host": "192.168.1.7" // 这是运行服务器的Mac的IP地址 ] pushManager.saveToPreferences(completionHandler: { error in print("error? \(error)") print("is active: \(pushManager.isActive)") })
SimplePushProvider代码片段
class SimplePushProvider: NEAppPushProvider { private let channel = BaseChannel(port: Port.notification, heartbeatTimeout: .seconds(30), logger: Logger(prependString: "Notification Channel", subsystem: .networking)) private var cancellables = Set<AnyCancellable>() private let logger = Logger(prependString: "SimplePushProvider", subsystem: .general)
public override init() { super.init() } public override func start() { logger.log("Started") …. }
当前问题
SimplePushProvider始终未被调用,pushManager始终处于未激活状态。已确认真机连接到matchSSIDs中的SSID,尝试多个SSID仍无效,保存NEAppPushManager时无错误。
排查建议
补全providerBundleIdentifier
确保providerBundleIdentifier填写SimplePushProvider的完整Bundle ID(例如com.xxx.SimplePushProvider),该字段是主应用与扩展通信的核心标识,不能为空。校验Capabilities配置
- 主应用和Push Provider扩展必须同时开启
App Pushcapability,且Group ID完全一致。 - 检查扩展的
Info.plist,确认NSExtension->NSExtensionAttributes下没有与代码中matchSSIDs冲突的配置(代码配置优先级更高,但需避免冗余错误)。
检查设备端配置状态
前往设备设置->VPN与设备管理,确认你的App Push配置已被启用。部分情况下,保存配置后需要手动激活,或等待系统同步生效。验证签名与证书
- 主应用和扩展的签名证书必须包含网络扩展权限(即对应配置了
App Push的Provisioning Profile)。 - 在Xcode的
Signing & Capabilities面板中,确认主应用与扩展的Team一致,Provisioning Profile选择正确。
- 日志追踪
- 在
start()方法中添加更明确的日志输出,通过Xcode的Devices窗口查看扩展进程的实时日志。 - 搜索系统日志中的
NEAppPush相关条目,可能会找到扩展未激活的具体原因。
修正SSID配置
移除matchSSIDs中的无效条目"192.168.1.7"(SSID是无线网络名称,不是IP地址),同时确保设备连接的SSID与列表中的字符串完全匹配(注意大小写、空格等细节)。确认环境兼容性
- 确保测试设备系统版本为iOS 14.0及以上(App Push扩展的最低支持版本)。
- 确认已获取用户的通知权限授权,可通过
UNUserNotificationCenter检查权限状态。
内容的提问来源于stack exchange,提问作者tamtoum1987
相关产品推荐
相关产品推荐

