getIntent()。getExtras()返回null FCM

时间:2017-06-25 19:20:58

标签: android firebase firebase-cloud-messaging

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

直到今天(AFAIK - 我有一段时间没有测试过),Firebase Cloud Messaging工作得很好。我可以使用Firebase控制台发送数据通知,使用getIntent().getExtras()可以让我从应用中访问该数据。

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

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

(此活动从主要活动中的onCreate()onResume()调用。)

但该日志从未打印过,如果我尝试在Intent.getExtras()语句之外记录if,我会得到一份NPE。

我怀疑它与Firebase 11与10有关,或者这个应用程序的目标是API 26,但我无法弄清楚如何修复它,而Google的文档并不总是最有用的。< / p>

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

1 个答案:

答案 0 :(得分:2)

不是答案,但我要分享太多评论......

听起来你在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服务的评论是错误的。您正在观察的行为是由其他原因引起的。