如何在Django中获取Firebase Messaging(FCM-DJANGO)的错误响应详情
如何获取Firebase Admin批量推送的详细错误信息
你当前拿到的FirebaseResponseDict只包含整体推送的简略统计,要排查单用户收不到通知的问题,需要解析返回的BatchResponse对象,获取每条设备的具体发送结果。
实现步骤及代码示例
- 捕获
send_message的返回值,该返回值即为BatchResponse对象,包含每一条推送的详细结果。 - 遍历
BatchResponse.responses属性,它是与传入的设备token一一对应的结果列表。 - 检查每个结果的
success状态,失败时通过exception属性获取错误码和描述。
完整代码如下:
from firebase_admin import messaging # 发送消息并获取完整响应 response = devices.send_message( Message( webpush=WebpushConfig( notification=WebpushNotification( title=noticia.titulo, body=noticia.resumo, image=noticia.capa.url, icon=icone ), fcm_options=WebpushFCMOptions( link=f'https://site/{id}' ) ) ) ) # 遍历每条设备的推送结果 for idx, result in enumerate(response.responses): # 对应当前结果的设备token registration_id = devices.tokens[idx] if result.success: print(f"通知成功发送到: {registration_id}") else: # 获取错误详情 error = result.exception error_code = error.code error_msg = error.message print(f"推送失败到 {registration_id}: {error_code} - {error_msg}") # 根据错误码处理异常场景(示例) if error_code in ['messaging/invalid-registration-token', 'messaging/registration-token-not-registered']: # 这里可添加逻辑:从数据库移除无效/已注销的token pass elif error_code in ['messaging/unavailable', 'messaging/internal-error']: # 这里可添加重试逻辑 pass
常见错误码及对应问题
messaging/invalid-registration-token: 设备token格式无效,可能是前端传递时出现错误messaging/registration-token-not-registered: token已被Firebase注销,通常是用户卸载应用或清除了应用数据messaging/unavailable: Firebase服务暂时不可用,建议稍后重试messaging/quota-exceeded: 推送配额超出,需要检查Firebase控制台的配额限制
内容的提问来源于stack exchange,提问作者Eduardo Camargo
相关产品推荐
相关产品推荐

