【问题标题】:Firebase message not received on emulator模拟器上未收到 Firebase 消息
【发布时间】:2017-09-28 08:25:08
【问题描述】:

我按照https://stackoverflow.com/a/38626398/565212 中的说明将 SNS 连接到 FCM 到 Android 应用程序。 部署到模拟器时,应用程序会初始化,但不会收到任何消息。 相同的应用程序在我的实际 Nexus 6 设备上正常运行并接收消息。 为什么会有这种差异?

【问题讨论】:

  • 您使用什么图像进行仿真?你确定图片是用 Google API 提供的吗?您可以从 SDK 管理器中检查它并验证已安装的包。

标签: android amazon-web-services firebase google-cloud-messaging amazon-sns


【解决方案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 登录即可工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2020-01-21
      • 2018-01-03
      • 1970-01-01
      • 2020-10-19
      相关资源
      最近更新 更多