APNS和FCM推送服务脚本

APNS推送

python 复制代码
from apns2.client import APNsClient
from apns2.payload import Payload
from apns2.credentials import TokenCredentials

# 配置
AUTH_KEY_PATH = 'xxxxx.p8'  # .p8 文件路径
TEAM_ID = 'xxxxxx'                     # Apple 开发者团队 ID
KEY_ID = 'xxxxx'                       # .p8 文件的密钥 ID
DEVICE_TOKEN = 'xxxxxx'                # 目标设备的令牌
TOPIC = 'xxxxxxxxx'                    # App 的 Bundle ID

# 创建 Payload
payload = Payload(
    alert="Hello, APNs with .p8!",  # 通知内容
    sound="default",                # 提示音
    badge=1,                        # 角标
    custom={"key": "value"}         # 自定义数据
)

# 使用 Token 认证
credentials = TokenCredentials(
    auth_key_path=AUTH_KEY_PATH,  # .p8 文件路径
    auth_key_id=KEY_ID,           # 密钥 ID
    team_id=TEAM_ID               # 团队 ID
)

# 创建 APNs 客户端
client = APNsClient(
    credentials=credentials,
    use_sandbox=True,  # 测试环境使用 sandbox,生产环境设置为 False
    use_alternative_port=False
)

# 发送通知
try:
    response = client.send_notification(
        DEVICE_TOKEN,
        payload,
        topic=TOPIC
    )
    print("Notification sent successfully!")
    print("APNs response:", response)
except Exception as e:
    print("Failed to send notification:", e)

FCM推送

json文件来自 管理台 -项目设置 -服务账号 -Firebase Admin SDK-生成新的私钥

python 复制代码
import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging

# 初始化SDK(服务账号方式)
cred = credentials.Certificate('xxxxxx.json')
firebase_admin.initialize_app(cred)

def send_fcm_notification(registration_token, title, body, data=None):
    """
    发送单设备推送
    
    参数:
    registration_token : str - 设备注册令牌
    title : str - 通知标题
    body : str - 通知内容
    data : dict - 自定义键值对数据
    """
    message = messaging.Message(
        notification=messaging.Notification(
            title=title,
            body=body
        ),
        data=data or {},
        # 添加此处可以在点击时拉起app的处理,需要在AndroidManifest.xml对应处理
        # 
        # 需要在主activity下添加如下
        # <intent-filter>
        #     <action android:name="NOTIFICATION_OPEN" />
        #     <category android:name="android.intent.category.DEFAULT" />
        # </intent-filter>
        # 
        # 在主activity中的onNewIntent中Intent可以获取到data内数据
        android=messaging.AndroidConfig(
            notification=messaging.AndroidNotification(
                click_action='NOTIFICATION_OPEN'  # Android端匹配的action
            )
        ),
        token=registration_token
    )

    try:
        response = messaging.send(message)
        print('成功发送:', response)
        return True
    except Exception as e:
        print('发送失败:', str(e))
        return False

# 使用示例
send_fcm_notification(
    registration_token='xxxxxxxxxx',
    title='温度警报',
    body='当前温度已超过阈值38℃',
    data={'sensor_id': 'temp-001', 'value': '38.5'}
)
相关推荐
Sakura_j_h_16 分钟前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
supabc1232 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi2 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
ZhengEnCi2 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
镜子AI4 小时前
镜子AI工程教程:用Python实现关键词布局检查器与语义改写查重(附完整代码)
人工智能·python·microsoft
小oo呆5 小时前
【学习心得】Python协程
python
信誓旦旦的程序猿5 小时前
【Python量化实战宝典 #22】涨跌停、连板情绪手册:情绪指标构建(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
gCode Teacher 格码致知5 小时前
Pandas教学-21:subplots的使用
python·pandas·1024程序员节
2601_967980115 小时前
Python开发的顶级开源项目全景图:2025-2026年生态概览
python·机器学习·开源项目·数据科学·生态概览
benchmark_cc6 小时前
量化开发中,什么时候应该停止手动下载股票数据?
python·数据分析·pandas·量化交易·1024程序员节·股票数据·quantdash