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

如何在Swift中将iPhone设备注册令牌传递给Web服务?

在Swift中传递FCM设备令牌到Web服务的实现方案

嗨,我来帮你搞定这个问题!要把iPhone的FCM设备注册令牌传递给你的Web服务,咱们可以按以下步骤完整实现:

1. 补全App启动时的通知配置

你已经写了部分启动代码,咱们把它补全,确保能正确请求通知权限并设置代理:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    UIApplication.shared.statusBarView?.backgroundColor = UIColor(red:160/255, green:206/255, blue:78/255, alpha: 1) 
    // 初始化Firebase
    FirebaseApp.configure() 
    Messaging.messaging().delegate = self 

    if #available(iOS 10.0, *) { 
        let center = UNUserNotificationCenter.current()
        center.delegate = self
        // 请求通知权限
        center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
            if granted {
                DispatchQueue.main.async {
                    application.registerForRemoteNotifications()
                }
            }
        }
    } else {
        // 适配iOS 10以下系统的权限请求
        let settings = UIUserNotificationSettings(types: [.alert, .sound, .badge], categories: nil)
        application.registerUserNotificationSettings(settings)
        application.registerForRemoteNotifications()
    }
    return true
}

2. 获取FCM设备令牌

实现MessagingDelegate的代理方法,当系统更新令牌时捕获到它:

extension AppDelegate: MessagingDelegate {
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
        guard let token = fcmToken else { return }
        print("获取到FCM设备令牌: \(token)")
        // 调用方法将令牌发送到Web服务
        sendFCMTokenToServer(token: token)
    }
}

3. 发送令牌到Web服务

用URLSession写一个POST请求,把令牌传给你的后端接口(记得替换成你实际的服务地址):

func sendFCMTokenToServer(token: String) {
    guard let serviceUrl = URL(string: "你的Web服务接口地址") else { 
        print("无效的服务地址")
        return 
    }
    
    var request = URLRequest(url: serviceUrl)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
    // 根据后端要求构造请求参数,字段名可按需调整
    let requestParams: [String: Any] = [
        "device_token": token,
        "device_platform": "iOS" // 可选,标识设备类型
    ]
    
    do {
        request.httpBody = try JSONSerialization.data(withJSONObject: requestParams, options: [])
    } catch let error {
        print("参数序列化失败: \(error.localizedDescription)")
        return
    }
    
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let error = error {
            print("发送请求失败: \(error.localizedDescription)")
            return
        }
        
        // 处理后端响应
        if let responseData = data {
            do {
                let responseJson = try JSONSerialization.jsonObject(with: responseData, options: [])
                print("后端返回结果: \(responseJson)")
            } catch let error {
                print("解析响应失败: \(error.localizedDescription)")
            }
        }
    }
    task.resume()
}

额外注意点

  • 确保你的Web服务接口支持POST请求,并且能正确接收device_token这类字段
  • 如果你的应用需要用户登录后再绑定令牌,可以把sendFCMTokenToServer方法放在用户登录成功后调用,而不是拿到令牌就立刻发送
  • 记得处理网络异常场景,比如无网络时可以缓存令牌,等网络恢复后再重试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:41:23