作者:KNN | 来源:互联网 | 2022-12-02 15:38
我无法仅在Android 8的Foreground中获得通知。也无法控制后台通知。 但是在低于8的Android版本上,可以在当前实现中正常工作。
遵循的步骤:-
将react-native-firebase插件版本5.0.0安装到应用程序中。
在Firebase控制台上创建了项目,并将google_service.json文件添加到android / app文件夹中。
在AndroidManifest中添加以下代码:-
在App.js页面上添加了以下函数,并在componentDidMountMethod()中调用:
performNotificationOperations(){
this.messageListener = firebase.messaging().onMessage((message: RemoteMessage) => {
console.log("Message",message);
alert("Notification Message Arrived");
if(this.state.isLogin){
const notification = new firebase.notifications.Notification()
.setNotificationId(message.messageId)
.setTitle(message.data.show_name)
.setBody(message.data.description)
.setData(message.data)
.android.setChannelId('test_app')
.android.setBigPicture(message.data.showImage)
.android.setPriority(firebase.notifications.Android.Priority.High);
firebase.notifications().displayNotification(notification).catch(err => alert("Error On Message"));
}
});
this.notificatiOnListener= firebase.notifications().onNotification((notification: Notification) => {
console.log("Notification=>",notification);
alert("Notification Arrived");
if(this.state.isLogin){
notification.android.setChannelId('test_app')
notification.android.setBigPicture(notification._data.showImage);
notification.android.setPriority(firebase.notifications.Android.Priority.High)
firebase.notifications().displayNotification(notification).catch(err => alert("Error On Notification"));
}
});
this.notificatiOnOpenedListener= firebase.notifications().onNotificationOpened((notificationOpen: NotificationOpen) => {
console.log(notificationOpen,"Opened listener");
console.log(notificationOpen.notification._data.type,"notificationOpen");
firebase.notifications().removeDeliveredNotification(notificationOpen.notification._notificationId)
if(this.state.isLogin){
if(notificationOpen.notification._data.type==='show'){
Navigate.forward('myshowdetails', this._navigator, {show:notificationOpen.notification._data});
}else if(notificationOpen.notification._data.type==='episode'){
this.playEpisode(notificationOpen.notification._data.episodeToken);
Navigate.forward('myshowdetails', this._navigator, {show:notificationOpen.notification._data});
}
}
});
firebase.notifications().getInitialNotification()
.then((notificationOpen: NotificationOpen) => {
if (notificationOpen) {
alert('Initial Notification');
console.log(notificationOpen,"notificationOpen");
console.log(notificationOpen.notification._data.type,"notificationOpen");
firebase.notifications().removeDeliveredNotification(notificationOpen.notification._notificationId)
if(this.state.isLogin){
alert('IS LOGIN TRUE');
if(notificationOpen.notification._data.type==='show'){
Navigate.forward('showdetails', this._navigator, {show:notificationOpen.notification._data});
}else if(notificationOpen.notification._data.type==='episode'){
this.playEpisode(notificationOpen.notification._data.episodeToken);
Navigate.forward('showdetails', this._navigator, {show:notificationOpen.notification._data});
}
}
}
});
firebase.messaging().getToken().then(token => {
console.log("GCM Token====>>>>>>>>",token);
Global.GCM_TOKEN=token;
// alert(token);
if(Global.IS_USER_LOGIN){
Util.saveFCMToken(token);
}
});
}
添加了bgMessage.js文件以处理数据消息,并使用AppRegistery注册了Headless JS服务。
// @flow
import firebase from 'react-native-firebase';
// Optional flow type
import type { RemoteMessage } from 'react-native-firebase';
import type { Notification,NotificationOpen} from 'react-native-firebase';
export default async (message: RemoteMessage) => {
// handle your message
// console.log("Message=>",message);
alert("Message Arrived");
const notification = new firebase.notifications.Notification()
.setNotificationId(message.messageId)
.setTitle(message.data.show_name)
.setBody(message.data.description)
.setData(message.data)
.android.setChannelId('podpitara_app')
.android.setBigPicture(message.data.showImage)
.android.setPriority(firebase.notifications.Android.Priority.High);
firebase.notifications().displayNotification(notification).catch(err => alert("Error in Background"));
return Promise.resolve();
}
无头JS服务电话:-
AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage',()=> bgMessaging);
附加信息:-
平台-Android
节点版本-v8.6.0
反应本机-0.57.0
react-native-firebase-0.5.0
面临的问题
仅在Android 8中无法在Foreground中接收通知。
在背景/最小化状态的情况下,希望以大图显示通知,但不想从我可以处理显示通知的地方获得控制权。
在调试模式下,应用程序会正常显示图像,并在通知托盘中显示图像,而在释放模式下,应用程序不会显示图像。
请让我知道,我做错了。
1> Pierre..:
得到它的工作。
这是因为从Android 8开始,您需要创建一个频道
// Build a channel
const channel = new firebase.notifications.Android.Channel('test-channel', 'Test Channel', firebase.notifications.Android.Importance.Max)
.setDescription('My apps test channel');
// Create the channel
firebase.notifications().android.createChannel(channel);
https://rnfirebase.io/docs/v4.2.x/notifications/android-channels
我只是在用
android.setChannelId(message.data.channelId)
现在,当应用程序处于前台时,它会显示出来。
我的全部功能是这样的
const newNotification = new firebase.notifications.Notification()
.android.setChannelId(message.data.channelId)
.setNotificationId(message.messageId)
.setTitle(message.data.title)
.setBody(message.data.body)
.setSound("default")
.setData(message.Data)
.android.setAutoCancel(true)
.android.setSmallIcon('ic_notification')
.android.setCategory(firebase.notifications.Android.Category.Alarm)
// Build a channel
const channelId = new firebase.notifications.Android.Channel(message.data.channelId, channelName, firebase.notifications.Android.Importance.Max);
// Create the channel
firebase.notifications().android.createChannel(channelId);
firebase.notifications().displayNotification(newNotification)
希望能帮到你