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

如何搭配证书与密钥正确使用PyAPNs2发送APNs推送通知

PyAPNs2 证书配置正确方案

你遇到的传参失败、合并证书报错问题,核心是证书格式转换步骤缺失,不是合并方案本身错误。以下是可直接复现的操作流程:

前置证书格式转换

苹果直接下载的certificate.cer是DER编码格式,无法直接被PyAPNs2的SSL模块识别,必须先转成标准PEM编码:

  1. 转换CER证书为PEM格式,执行命令:
    openssl x509 -in certificate.cer -inform DER -out apns_cert.pem -outform PEM
  2. 转换私钥为PEM格式,如果你的私钥生成时设置了密码,执行命令时会提示输入密码,完成后输出无加密的PEM私钥:
    openssl rsa -in key.key -out apns_key.pem

如果你不想解密私钥,可以跳过这步的解密操作,后续初始化客户端时传入password="你的私钥密码"参数即可。

两种传参方式

方式1:不合并文件(推荐,避免合并出错)

很多人没注意PyAPNs2的源码参数,APNsClient原生支持分别传入证书、密钥文件路径,不需要强制合并成单个文件,示例代码:

from apns2.client import APNsClient
from apns2.payload import Payload

client = APNsClient(
    cert_file="apns_cert.pem",
    key_file="apns_key.pem",
    use_sandbox=False,  # 沙箱测试环境改为True
    use_alternative_port=False,
    # password="你的私钥密码"  # 私钥未解密时打开这个注释
)

# 推送调用示例
payload = Payload(alert="推送测试内容", sound="default", badge=1)
# topic填你App对应的Bundle ID
client.send_notification(device_token="目标设备Token", payload=payload, topic="你的App Bundle ID")

方式2:合并为单个PEM文件

如果你需要用单文件传参的方式,按正确顺序合并两个转换好的PEM文件即可,之前报unable to load certificates是因为你直接合并了原始DER格式的CER和密钥,没有做格式转换:

  1. 执行合并命令:
    cat apns_cert.pem apns_key.pem > apns_combined.pem
  2. 验证合并文件有效性,正式环境执行:
    openssl s_client -connect api.push.apple.com:443 -cert apns_combined.pem
    沙箱环境执行:
    openssl s_client -connect api.sandbox.push.apple.com:443 -cert apns_combined.pem
    如果命令返回SSL握手成功、没有证书加载错误,说明文件有效,直接传入文件路径初始化即可:
client = APNsClient("apns_combined.pem", use_sandbox=False, use_alternative_port=False)

常见报错排查点

  • 证书环境不匹配:沙箱证书只能连沙箱环境,生产证书只能连正式环境,混用会直接握手失败
  • 证书过期:检查苹果开发者后台的推送证书是否在有效期内
  • 权限问题:确保运行脚本的用户对证书、密钥文件有读取权限
其他优质Python APNs类库推荐
  • apns2:PyAPNs2的活跃维护分叉版本,修复了旧版本大量HTTP/2、SSL兼容问题,API和PyAPNs2完全一致,迁移零成本
  • aioapns:基于asyncio实现的异步APNs库,支持高并发推送,适合百万级以上推送量级的业务场景
  • pushjack:轻量推送库,同时支持APNs和FCM,兼容证书、Token两种APNs认证方式,代码简洁适合小型项目快速集成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:51:26