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

iOS应用内触发推送通知实现方案咨询(非Firebase控制台)

在iOS应用内触发Firebase推送通知的实现方案

一、核心思路:调用Firebase Cloud Messaging (FCM) API

要在应用内点击按钮发推送,本质就是通过你的后端或者(测试场景下)直接在App里调用FCM的发送API——毕竟Firebase控制台本身也是靠调用这个API来发通知的。不过要注意:FCM的服务器密钥绝对不能暴露在客户端代码里,所以生产环境更推荐让App请求你的自有后端,再由后端调用FCM API发通知。

二、Alamofire是否适用?

当然适用!Alamofire是iOS上非常顺手的网络请求库,不管是请求你的后端接口,还是测试时直接调用FCM API,用它来发起POST请求都会比原生URLSession简洁很多。

三、具体实现步骤

1. 准备必要信息

  • FCM服务器密钥:在Firebase控制台→项目设置→云消息传递里就能找到,这个密钥一定要存在后端,绝对不能写在App代码里!
  • 设备令牌(Device Token):你的AppDelegate里应该已经通过didRegisterForRemoteNotificationsWithDeviceToken方法获取到了,需要把这个令牌存起来(比如存在后端或者本地),用来指定推送的目标设备。

2. 方案一:通过自有后端转发(推荐生产环境)

App点击按钮时,用Alamofire请求你的后端接口,带上通知内容、目标设备令牌等信息,再由后端调用FCM API发送通知。

App端代码示例(Alamofire实现):

import Alamofire

// 按钮点击触发方法
@IBAction func sendNotificationTapped(_ sender: UIButton) {
    let requestParams: [String: Any] = [
        "deviceToken": "用户的设备令牌", // 替换成实际获取到的device token
        "title": "来自App内的通知",
        "body": "这是通过按钮触发的推送消息"
    ]
    
    AF.request("你的后端接口地址", method: .post, parameters: requestParams, encoding: JSONEncoding.default)
        .responseJSON { response in
            switch response.result {
            case .success(let result):
                print("请求后端成功: \(result)")
            case .failure(let error):
                print("请求后端失败: \(error)")
            }
        }
}

3. 方案二:测试场景下直接调用FCM API(不推荐生产)

如果只是临时测试,你可以在App内用Alamofire直接调用FCM API,但千万不要把服务器密钥提交到代码仓库,测试完成后一定要移除相关代码。

代码示例:

import Alamofire

@IBAction func sendNotificationTapped(_ sender: UIButton) {
    let fcmServerKey = "你的FCM服务器密钥" // 仅测试用,生产环境绝对不能这么写!
    let targetDeviceToken = "目标设备的令牌"
    
    let requestHeaders: HTTPHeaders = [
        "Authorization": "key=\(fcmServerKey)",
        "Content-Type": "application/json"
    ]
    
    let notificationParams: [String: Any] = [
        "to": targetDeviceToken,
        "notification": [
            "title": "App内触发的推送",
            "body": "这是一条测试推送内容"
        ],
        "data": [ // 可选:自定义附加数据
            "customKey": "customValue"
        ]
    ]
    
    AF.request("https://fcm.googleapis.com/fcm/send", method: .post, parameters: notificationParams, encoding: JSONEncoding.default, headers: requestHeaders)
        .responseJSON { response in
            switch response.result {
            case .success(let result):
                print("推送发送成功: \(result)")
            case .failure(let error):
                print("推送发送失败: \(error)")
            }
        }
}

四、配合你的AppDelegate处理通知

你的AppDelegate已经能处理前台/后台的消息接收,推送发送成功后设备就能正常收到通知。如果需要处理通知的点击事件,可以在userNotificationCenter(_:didReceive:withCompletionHandler:)方法里添加逻辑:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    // 这里可以添加通知点击后的逻辑,比如跳转到指定页面
    if let customData = userInfo["customKey"] as? String {
        print("收到自定义数据: \(customData)")
    }
    completionHandler()
}

内容的提问来源于stack exchange,提问作者user9561472

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:22