模拟器上未收到 Firebase 消息
Posted
技术标签:
【中文标题】模拟器上未收到 Firebase 消息【英文标题】:Firebase message not received on emulator 【发布时间】:2017-09-28 08:25:08 【问题描述】:我按照https://***.com/a/38626398/565212 中的说明将 SNS 连接到 FCM 到 android 应用程序。 部署到模拟器时,应用程序会初始化,但不会收到任何消息。 相同的应用程序在我的实际 Nexus 6 设备上正常运行并接收消息。 为什么会有这种差异?
【问题讨论】:
您使用什么图像进行仿真?你确定图片是用 Google API 提供的吗?您可以从 SDK 管理器中检查它并验证已安装的包。 【参考方案1】:模拟器是否安装了 Google Play 服务?
来源: https://firebase.google.com/docs/cloud-messaging/android/client#sample-play
依赖 Play 服务 SDK 的应用应始终在访问 Google Play 服务功能之前检查设备是否有兼容的 Google Play 服务 APK。建议在两个地方执行此操作:在主活动的 onCreate() 方法中,以及在其 onResume() 方法中。 onCreate() 中的检查确保在没有成功检查的情况下无法使用应用程序。 onResume() 中的检查确保如果用户通过其他方式(例如通过后退按钮)返回到正在运行的应用程序,仍会执行检查。
如果设备没有兼容版本的 Google Play 服务,您的应用可以调用 GoogleApiAvailability.makeGooglePlayServicesAvailable() 以允许用户从 Play 商店下载 Google Play 服务。
【讨论】:
【参考方案2】:因为模拟器没有google api。因此,要查看通知或消息,您必须在安装了 Google 服务的真实设备上进行检查。
对于 GCM 等 Google 服务,使用“Google API”(任何版本)目标来接收来自 fcm 的推送通知或消息
【讨论】:
视情况而定,Google 提供的系统映像有或没有 Google APIS。较新的系统映像仅适用于 Google APIS。【参考方案3】:这个答案写于 2021 年 9 月,带有这些 gradle 依赖项:
implementation 'com.google.firebase:firebase-messaging:22.0.0'
implementation 'com.google.firebase:firebase-iid:21.1.0'
有时,模拟器停止接收 FCM 通知,这是我要解决的问题:
1- 选择带有 Google API 的模拟器。
2-擦除数据:
3-使用下面的函数获取组播ID,或者获取注册失败的原因。
private void check_token()
String TAG = "_testing";
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>()
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task)
if (!task.isSuccessful())
Log.e(TAG, "getInstanceId failed", task.getException());
return;
// Get new Instance ID token
String token = task.getResult().getToken();
// Log and toast
// String msg = getString(R.string.msg_token_fmt, token);
Log.e(TAG, token);
Toast.makeText(MainActivity3.this, token, Toast.LENGTH_SHORT).show();
);
一旦你拿到了token,你就可以尝试发送通知消息了。
注意: 无需使用谷歌帐户登录。 FCM 无需 gmail 登录即可工作。
【讨论】:
以上是关于模拟器上未收到 Firebase 消息的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Pub Sub Emulator 未收到消息
通过cURL / PHP发送时,设备上未收到Firebase通知