在Titanium中集成Ti.goosh模块对接Firebase推送遇阻求助
解决Ti.goosh集成Firebase推送收不到消息的问题
我明白你现在的困扰——Ti.goosh的文档确实有些模糊,尤其是Firebase密钥配置这块很容易卡壳。我帮你理清楚整个流程和关键配置点,一步步解决收不到推送的问题:
一、先搞懂核心逻辑:Ti.goosh和Firebase的关联方式
首先得掰扯明白:Ti.goosh是帮你处理客户端的推送注册(获取deviceToken)和消息接收,但推送的触发是需要你的后端(或者Firebase控制台)用Firebase的服务器密钥来调用API发送的——Ti.goosh本身不需要在客户端配置服务器密钥!这是很多人混淆的核心点。
你的客户端已经成功拿到deviceToken,说明客户端和Firebase的注册流程是通的,问题大概率出在推送发送端的配置或者Firebase项目的权限/设置上。
二、关键配置:服务器密钥的获取和使用
1. 获取Firebase服务器密钥
打开你的Firebase项目控制台,进入「项目设置」→「云消息传递」标签页,找到「服务器密钥」(注意不是API密钥,API密钥主要是客户端调用Firebase其他服务用的,推送必须用服务器密钥)。复制这个密钥,它是你发送推送请求时的核心认证信息。
2. 发送推送的两种测试方式
你可以先从简单的方式验证:
- 用Firebase控制台直接发测试消息:在控制台的「云消息传递」里选「发送测试消息」,输入你拿到的
deviceToken,填好标题和内容后发送,看设备能不能收到。 - 用后端API调用推送接口:发送POST请求到
https://fcm.googleapis.com/fcm/send,请求头必须包含Authorization: key=你的服务器密钥,请求体格式参考:
注意:Ti.goosh的{ "to": "你的deviceToken", "notification": { "title": "测试推送", "body": "这是Ti.goosh的测试消息" }, "data": { "customKey": "自定义内容" } }callback里会解析e.data,所以自定义数据要放在data字段里。
三、客户端配置的二次检查
虽然你已经拿到deviceToken,但还是要确认tiapp.xml的配置没遗漏:
- 确保GCM Sender ID(Firebase项目编号)配置正确,格式如下:
<property name="ti.goosh.gcm_sender_id" type="string">你的Firebase项目编号</property> - 检查Android权限配置(Ti.goosh一般会自动添加,但手动确认更稳妥):
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
四、常见问题排查
- 为什么收不到推送?
- 先确认设备网络正常,并且关闭省电模式(很多安卓设备的省电策略会拦截后台推送)。
- 去Firebase控制台的「云消息传递」查看消息记录,看看推送状态是「已发送」还是「未送达」——如果未送达,可能是deviceToken无效或者设备注册状态异常。
- 确认服务器密钥没有泄露或被修改,Firebase控制台可以重新生成密钥。
- Ti.goosh需要配置API密钥吗?
完全不需要!客户端只需要GCM Sender ID,API密钥是给客户端调用Firebase数据库、存储等服务用的,和推送无关。
五、梳理整体推送流程
把整个逻辑串起来就清晰了:
- 客户端注册:App通过Ti.goosh向Firebase注册,拿到deviceToken后传给你的后端保存。
- 后端触发推送:需要发推送时,后端用Firebase服务器密钥调用FCM API,指定目标deviceToken和消息内容。
- 客户端接收消息:Firebase把消息推送到设备,Ti.goosh的
callback回调触发,你可以处理消息内容。
先从Firebase控制台发测试消息开始验证,确认能收到后再对接后端接口,这样一步步来就不会乱啦。
内容的提问来源于stack exchange,提问作者Nuibb
相关产品推荐
相关产品推荐

