You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:45