使用PyFCM实现延迟1小时推送通知的方法咨询
用PyFCM实现延迟1小时推送通知的解决方案
刚好我之前也研究过PyFCM的定时推送问题,其实它本身没有直接的延迟推送开关,但可以借助Firebase Cloud Messaging(FCM)的**预定消息(Scheduled Messages)**功能来实现,具体步骤和代码示例如下:
核心思路
PyFCM封装了FCM的预定消息能力,我们只需要通过指定schedule_time参数,设置好推送的具体时间(当前时间+1小时),就能让通知在指定时间点推送给目标设备。
具体步骤
1. 确保PyFCM版本为最新
旧版本的PyFCM可能没有schedule_time参数,先执行升级命令更新到最新版:
pip install --upgrade pyfcm
2. 计算预定推送时间
FCM使用UTC时区处理时间,所以我们需要生成UTC时区下1小时后的时间,避免时区偏差导致推送时间不准。
3. 调用推送方法并传入schedule_time
不管是单设备推送还是多设备推送,都可以在对应的方法中传入该参数触发定时推送。
完整代码示例
from pyfcm import FCMNotification from datetime import datetime, timedelta, timezone # 初始化FCM服务,替换成你的API密钥 push_service = FCMNotification(api_key="YOUR_FCM_SERVER_KEY") # 计算1小时后的UTC时间 one_hour_later = datetime.now(timezone.utc) + timedelta(hours=1) # 推送内容配置 message_title = "延迟推送通知" message_body = "这是设置了延迟1小时后的推送内容" target_device_id = "目标设备的Registration ID" # 发送单设备定时推送 push_result = push_service.single_device_data_message( registration_id=target_device_id, message_title=message_title, message_body=message_body, schedule_time=one_hour_later ) # 打印推送结果,方便排查问题 print("推送请求结果:", push_result)
多设备推送的适配
如果需要给多个设备发送定时推送,只需改用multicast_messages方法,同样传入schedule_time参数即可:
target_device_ids = ["DEVICE_ID_1", "DEVICE_ID_2", "DEVICE_ID_3"] push_result = push_service.multicast_messages( registration_ids=target_device_ids, message_title=message_title, message_body=message_body, schedule_time=one_hour_later )
注意事项
- 预定消息的最长延迟时间为30天,超过这个时间FCM会拒绝请求。
- 若目标设备在预定时间处于离线状态,FCM会在设备上线后立即推送,但如果超过消息的
time_to_live(默认4周),消息会被丢弃。 - 务必使用UTC时间设置
schedule_time,否则会因为时区差异导致推送时间不符合预期。
内容的提问来源于stack exchange,提问作者Kuldeep Raj
相关产品推荐
相关产品推荐

