【问题标题】:getIntent().getExtras() returns null FCMgetIntent().getExtras() 返回空 FCM
【发布时间】:2017-11-28 16:55:07
【问题描述】:

我花了几个小时研究这个没有运气,所以我在这里问。我已经检查了这些问题无济于事:

直到今天(AFAIK——我已经有一段时间没有测试过了),Firebase Cloud Messaging 运行良好。我可以从 Firebase 控制台发送包含数据的通知,并且使用 getIntent().getExtras() 将允许我从应用程序访问该数据。

然而,今天我发送了一个测试通知,但点击它并没有执行预期的操作。经过一番挖掘,我发现getIntent().getExtras() 无论如何都只是返回null。这是相关代码:

private void respondToNotificationClick() {
    if (getIntent().getExtras() != null) {
        Log.e("NOTIF", "NOTIF");
        //...
    }
}

(这个方法在主Activity的onCreate()onResume()都被调用。)

但该日志永远不会打印,如果我尝试在 if 语句之外记录 Intent.getExtras(),我会得到 NPE。

我怀疑这与 Firebase 11 与 10 有关,或者该应用程序的目标是 API 26,但我不知道如何修复它,而且 Google 的文档并不总是最有帮助的。

这里发生了什么?这是一个已知问题吗?是因为我使用的是 beta API(即使它应该已经完成​​)?

【问题讨论】:

  • FWIW——在 API 24 设备上使用 11.0.1 为我工作
  • @BobSnyder 我是个十足的呆子,我需要 Google Play 服务吗?
  • 是的,我只是在想这个。绝对需要。如果您使用的是模拟器,则尚未发布包含 API 26 的 GPS 的图像。针对较低 API 的更新几天前刚刚发布。
  • @BobSnyder 我是个聪明人......我会尽可能地测试 GPS,但这个问题可能会被关闭。
  • GoogleApiAvailability 是用于检查 GPS 的便捷功能集合。

标签: android firebase firebase-cloud-messaging


【解决方案1】:

不是一个答案,但我有太多要分享给 cmets...

听起来您在 API 26 模拟器上运行。正如我在之前的评论中所指出的,与 Firebase 11.0.1 兼容的 API 26 仿真器映像尚未发布。当我在 API 26 模拟器上运行时,此日志消息确认版本不兼容:

W/GooglePlayServicesUtil: Google Play services out of date.  Requires 11011000 but found 10930470

尽管如此,还是会出现从 Firebase 控制台发送的通知(没有数据值),并且在触摸时会调用我的启动器活动。在该活动的onCreate() 方法中,我有以下代码:

    Intent intent = getIntent();
    if (intent != null) {
        Bundle b = intent.getExtras();
        if (b != null) {
            Set<String> keys = b.keySet();
            for (String key : keys) {
                Log.d(TAG, "Bundle Contains: key=" + key);
            }
        } else {
            Log.w(TAG, "onCreate: BUNDLE is null");
        }
    } else {
        Log.w(TAG, "onCreate: INTENT is null");
    }

产生这个输出:

 D/MainActivity: Bundle Contains: key=google.sent_time
 D/MainActivity: Bundle Contains: key=from
 D/MainActivity: Bundle Contains: key=google.message_id
 D/MainActivity: Bundle Contains: key=collapse_key

所以我之前关于 Google Play 服务的问题是错误的。您观察到的行为是由其他原因引起的。

【讨论】:

  • 嗯。它在物理 API 25 平板电脑上也失败了。我想我只能等了。这对我来说已经足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多