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'}
)
相关推荐
moz与京2 小时前
[附C++,JS,Python题解] Leetcode 面试150题(10)——轮转数组
c++·python·leetcode
什码情况3 小时前
回文时间 - 携程机试真题题解
数据结构·python·算法·华为od·机试
Alfadi联盟 萧瑶4 小时前
Python-Django入手
开发语言·python·django
漠北尘-Gavin5 小时前
【Python3.12.9安装llama-cpp-python遇到编译报错问题解决】
python·llama
测试老哥5 小时前
什么是集成测试?集成的方法有哪些?
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·集成测试
豆芽8196 小时前
Conda配置Python环境
python·conda·pip
CANI_PLUS6 小时前
python 列表-元组-集合-字典
开发语言·python
东方佑6 小时前
使用 Python 自动处理 Excel 数据缺失值的完整指南
开发语言·python·excel
weixin_478689766 小时前
pytorch与其他ai工具
人工智能·pytorch·python