Firebase如何通过REST API发送本地化推送通知?
FCM推送内容本地化实现指引
方案1:服务端预判断语言,返回对应本地化内容(适合可控用户语言场景)
- 首先在用户注册设备ID时,额外存储用户设备当前的系统语言偏好,比如将
zh-CN、en-US这类标准语言码和DeviceID关联存入你的数据库 - 推送前先根据目标DeviceID取出对应的语言码,在PHP侧加载对应语言的翻译配置,示例配置结构:
// 翻译配置数组,按语言码分组 $translations = [ 'zh-CN' => [ 'push_title_new_message' => '您有一条新消息', 'push_content_new_message' => '快点击查看好友给你发送的内容' ], 'en-US' => [ 'push_title_new_message' => 'You have a new message', 'push_content_new_message' => 'Click to view content sent by your friend' ] ];
- 组装请求参数时替换对应语言的文案即可,示例代码:
// 假设已拿到目标用户的语言码为$userLang,默认回退到中文 $currentLang = isset($translations[$userLang]) ? $userLang : 'zh-CN'; $postData = [ 'to' => $deviceId, 'notification' => [ 'title' => $translations[$currentLang]['push_title_new_message'], 'body' => $translations[$currentLang]['push_content_new_message'] ] ]; // 之后正常调用FCM接口发送即可
该方案优势是逻辑简单,不需要客户端做额外适配;缺点是如果要支持多语言,需要维护服务端的翻译配置,且用户切换语言后要同步更新服务端存储的语言偏好。
方案2:使用FCM原生本地化参数,客户端自动匹配系统语言(推荐,无需服务端存储语言偏好)
FCM接口本身支持本地化参数,你不需要在服务端传固定的title和body,而是传title_loc_key、title_loc_args、body_loc_key、body_loc_args参数,客户端会自动根据当前系统语言读取对应本地化资源里的文案。
- 请求参数示例:
{ "to": "DeviceID/Group", "notification": { "title_loc_key": "push_title_new_message", "body_loc_key": "push_content_new_message", "body_loc_args": ["张三"] // 如果文案有占位符,传对应参数,没有可以省略 } }
- 你需要提前把所有推送用到的文案,按key对应配置到安卓和iOS客户端的本地化资源文件里,key要和你服务端传的
*_loc_key完全一致
该方案优势是不需要服务端存储用户语言,用户切换系统语言后自动适配,翻译维护都在客户端侧;缺点是需要客户端提前预置所有推送文案的翻译,无法动态新增推送文案类型。
内容的提问来源于stack exchange,提问作者al404IT
相关产品推荐
相关产品推荐

