我已经在Android设备上的Ionic2项目中实现了Cordova-Plugin-Firebase。
我遵循了指南,它有效。关于函数ontotificationopen(),如插件的DOC中所述:
应用在后台:
用户在其设备通知栏中接收通知消息
用户点击通知,并打开应用程序
用户在JavaScript回调中接收通知数据
如果应用程序已关闭(不在后台),则如果我发送了推送通知,则可以:
- 用户在其设备通知栏中收到通知消息
然后,我点击显示所有通知的面板中的通知,应用程序加载并打开。
如果该应用在后台,则以下功能会触发某些事件,因为该应用程序采用屏幕的前景:
Firebase.onNotificationOpen().subscribe(
(res) => { console.info(res)},
(err) => { console.info(err)},
() => {console.log("completed)}
);
但是当应用程序不关闭时,似乎上面没有设置此功能以在应用程序的开放处运行。因此,它不会捕获该应用程序已通过通知显示的通知面板中显示的应用程序。
是正常的:如果是的话,是否有文档说明为什么在某个地方;并且会有另一种方法可以通过事件检测 通知消息已被 the ?如果没有,人们会想知道我的错误吗?
必须在您自己的代码中的某个地方处理推送通知(如deeplink) - 您需要在某个地方确定通知打开的活动以及在这种情况下会发生什么。因此,您不能将其推迟到Firebase为您检测到。
应用程序死亡时,单击推送通知将将带有收到数据的意图发送给您的应用。这就是您可以处理它的目的(例如在onstart/resume()中)。如果您要记录您的应用程序从通知启动时可用的意图,您会看到它包含类似的内容:
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.my.package cmp=com.my.package/.MyMainActivity (has extras) }
Extras {
google.sent_time > 1490275998196,
from > 9994599943,
google.message_id > 0:14902799999965%346177c211bbbb7c2,
collapse_key > com.my.package
}
这意味着您可以做
之类的事情if (getIntent() != null && getIntent().getExtras() != null) {
//identify whether this was a push notification intent
if (getIntent().getExtras().get("google.message_id") != null) {
//Here you can do the same things you do when opened from background
console.log("completed"");
}
}