Android模拟器无法接收Parse Server推送通知问题求助
排查方向1:先解决FCM基础问题(你测试原生FCM也发不出去,优先排查这部分)
- 核对包名与配置文件:确认Firebase控制台填写的应用包名,和你安卓项目
build.gradle里的applicationId完全一致,同时确认最新的google-services.json已经放在app模块根目录,修改过Firebase配置的话需要重新下载该文件替换旧版。 - 检查模拟器镜像:你所用的安卓模拟器必须搭载带Google Play服务的系统镜像,无Google服务的原生镜像无法接收FCM推送。可以打开模拟器设置>应用列表,确认存在「Google Play商店」应用,不存在的话请在AVD Manager中更换带Google Play标识的镜像,优先选择Android 10及以上的稳定版本。
- 网络连通性检查:FCM推送需要设备能正常访问谷歌服务器,确认模拟器和测试手机的网络没有相关访问限制,这是FCM正常工作的前置条件。
排查方向2:修正Parse相关配置与代码
- 核对Parse服务端推送密钥:你Parse Server配置中
push.android.apiKey字段,必须填写Firebase控制台「项目设置>云消息传递」下的服务器密钥,注意不要填成客户端API密钥,填错的话FCM会直接拒收推送,但Parse侧仍会返回发送成功。 - 检查Installation表数据:确认Installation表中对应模拟器的记录
deviceToken字段非空、deviceType为android、channels字段包含你订阅的Chat频道,任意字段不匹配都会导致推送被过滤,无法到达设备。 - 修正MainActivity初始化顺序:你当前把
notificationsPush()放在super.onCreate(savedInstanceState)之前执行,会导致Parse初始化未完成就操作Installation对象,容易出现隐形异常,修改成正确的初始化顺序:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); createGraphicElements(); notificationsPush(); }
- 修正云函数推送Payload格式:FCM对推送Payload格式要求严格,建议统一按标准格式编写,同时携带
notification和data字段,避免应用在前台时无法弹出通知:
Parse.Push.send({ where: query, data: { notification: { title: "新消息", body: request.params.Message }, sound: 'default' } }, { useMasterKey: true })
排查方向3:安卓端权限与服务配置
- 检查AndroidManifest.xml配置:确认已经添加FCM和通知所需的权限,以及ParseFCM服务声明:
<!-- 基础权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Android 13及以上通知权限 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- Parse FCM服务 --> <service android:name="com.parse.fcm.ParseFCMService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
- 动态申请通知权限:如果你的应用targetSdkVersion >=33,必须在应用启动时主动向用户申请
POST_NOTIFICATIONS权限,未授权的情况下就算推送到达设备,也不会弹出通知栏提示。
内容的提问来源于stack exchange,提问作者Harold Barrera
相关产品推荐
相关产品推荐

