Firebase消息在模拟器上未收到

6

我按照https://dev59.com/_loT5IYBdhLWcg3wrA-5#38626398的说明将SNS连接到FCM并连接到Android应用程序。 在模拟器上部署后,应用程序初始化但未接收到任何消息。 相同的应用程序在我的Nexus 6设备上正常工作并接收消息。 为什么会有这种差异?


你在使用哪个镜像来进行仿真?你是否确认该镜像是由 Google API 提供的?你可以从 SDK 管理器中检查并验证已安装的包。 - Soulslayer
4个回答

9

模拟器是否安装了Google Play服务?

source: https://firebase.google.com/docs/cloud-messaging/android/client#sample-play

应用程序依赖于Play Services SDK的应该在访问Google Play服务功能之前始终检查设备是否有兼容的Google Play服务APK。建议在两个位置执行此操作:主活动的onCreate()方法和其onResume()方法。onCreate()中的检查确保应用程序不能在成功检查之前使用。 onResume()中的检查确保如果用户通过其他方式返回到正在运行的应用程序,例如通过后退按钮,则仍会执行检查。如果设备没有兼容版本的Google Play服务,则应用程序可以调用GoogleApiAvailability.makeGooglePlayServicesAvailable()来允许用户从Play商店下载Google Play服务。

2

因为模拟器没有Google API,所以要检查通知或消息,你需要在已安装Google服务的真实设备上进行检查。

对于像GCM这样的Google服务,请使用“Google APIs”(任何版本)目标来接收来自fcm的推送通知或消息。


2
这要看情况,Google提供带或不带Google APIS的系统镜像。较新的系统镜像只提供带Google APIS的版本。 - user1209216

1

本答案是在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 的模拟器。

enter image description here

2-清除数据:

enter image description here

使用以下函数获取组播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();
                }
            });
}

一旦您获得了令牌,就可以尝试发送通知消息。

注意: 无需使用Google帐户登录。 FCM可以在不登录Gmail的情况下工作。


1
Android Studio 中创建一个新的模拟器 > AVD Manager,并使用已安装有 `google APIs` 的 Android SDK 后,问题得到解决。
同时确保已安装了 SDK Manager > SDK Tools > Google Play Services

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接