FCM中restricted_package_name使用示例咨询及代码正确性验证
使用Firebase Cloud Messaging区分同项目下不同包名的应用发送通知
先给你吃个定心丸——你写的代码用法是完全正确的!restricted_package_name这个参数正是用来解决你这种场景的:当同一个Firebase项目下有多个不同包名的应用时,通过指定这个参数,能确保通知只会发送给对应包名的应用,避免误发到其他同项目的应用上。
为什么这个参数有用?
虽然每个应用的FCM注册ID(registration_id)本质上已经和对应的包名绑定了,但restricted_package_name相当于额外加了一层安全校验。如果某个注册ID被错误地用到了其他包名的应用调用中,Firebase会因为包名不匹配而拒绝发送通知,避免出现通知串发的问题。
完整可参考的示例代码
下面是一个完整的示例,展示如何给两个不同包名的应用分别发送通知:
from pyfcm import FCMNotification # 初始化FCM服务,替换成你自己的Firebase服务器密钥 push_service = FCMNotification(api_key="YOUR_FIREBASE_SERVER_KEY") # 给第一个应用(包名:com.domain.app1)发送通知 # 注意:这里的registration_id必须是来自com.domain.app1的设备注册ID registration_id_app1 = "APP1_DEVICE_REGISTRATION_ID" data_payload_app1 = {"action": "connect", "status": "pending"} result_app1 = push_service.notify_single_device( registration_id=registration_id_app1, message_title="连接请求", message_body="请稍等,我们正在为你建立连接", restricted_package_name='com.domain.app1', data_message=data_payload_app1 ) # 给第二个应用(包名:com.domain.app2)发送通知 # 这里的registration_id要对应com.domain.app2的设备注册ID registration_id_app2 = "APP2_DEVICE_REGISTRATION_ID" data_payload_app2 = {"type": "alert", "content": "有新消息"} result_app2 = push_service.notify_single_device( registration_id=registration_id_app2, message_title="新通知", message_body="你收到了一条新的消息提醒", restricted_package_name='com.domain.app2', data_message=data_payload_app2 ) # 打印发送结果,方便调试 print("App1的通知发送结果:", result_app1) print("App2的通知发送结果:", result_app2)
几个关键注意点
- 确保你的Firebase项目中已经添加了这两个不同包名的应用,并且每个应用都完成了FCM的基础配置(比如下载google-services.json文件并集成到应用中)。
- 每个应用的
registration_id是设备上对应应用生成的,一定要对应正确,不能把App1的注册ID用到App2的通知调用里。 - 如果不需要额外的安全校验,其实只靠正确的
registration_id也能区分应用,但加上restricted_package_name能让你的通知发送逻辑更严谨。
内容的提问来源于stack exchange,提问作者kilokahn
相关产品推荐
相关产品推荐

