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'}
)
相关推荐
2601_962078194 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
2601_962218614 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949654 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885724 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
李高钢5 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
ocean21035 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
Warson_L6 小时前
Python的OrderedDict
python
隐擎fox6 小时前
高性能网络爬虫架构设计:基于 Python 的长连接复用与分布式会话池调度实践
分布式·python·网络协议·tcp/ip·高并发·网络爬虫、
Warson_L6 小时前
Python的TypedDict
python·langchain·llm
晓窗科技7 小时前
口碑好的AI基座服务商
大数据·人工智能·python