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'}
)
相关推荐
G果5 小时前
ROS2 Cartographer纯定位导航遇到的问题
python·ros2·定位·cartographer·导航·launch·navigation2
Brduino脑机接口技术答疑5 小时前
脑机接口数据处理连载(二) 数据源头解析:脑电信号的采集原理与数据特性
人工智能·python·算法·数据分析·脑机接口
Wise玩转AI5 小时前
Day 25|智能体的“可观察性(Observability)体系”
人工智能·python·ai·chatgpt·ai智能体
p***92485 小时前
Python使用PyMySQL操作MySQL完整指南
数据库·python·mysql
kali-Myon6 小时前
NewStarCTF2025-Week5-Web
java·python·安全·web安全·php·web·ctf
DFT计算杂谈6 小时前
Abinit-10.4.7安装教程
linux·数据库·python·算法·matlab
肖永威6 小时前
VSCode调试Python命令行输入参数程序argparse模块实践
vscode·python
Chasing Aurora6 小时前
Python连接云端Linux服务器进行远程 (后端开发/深度学习)时候的注意事项
linux·开发语言·python·ubuntu·ai编程
咖啡の猫6 小时前
Python顺序结构
java·前端·python
xxxxxmy6 小时前
相向双指针—三数之和
python·算法·相向双指针