Ani*_*ake 1 android-notifications react-native android-8.0-oreo react-native-firebase
我无法仅在Android 8的Foreground中获得通知。也无法控制后台通知。 但是在低于8的Android版本上,可以在当前实现中正常工作。
遵循的步骤:-
Run Code Online (Sandbox Code Playgroud)<service android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <service android:name="io.invertase.firebase.messaging.RNFirebaseInstanceIdService> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> <service android:name="io.invertase.firebase.messaging.RNFirebaseBackgroundMessagingService"/> <receiver android:name="io.invertase.firebase.notifications.RNFirebaseNotificationReceiver"/> <receiver android:enabled="true" android:exported="true" android:name="io.invertase.firebase.notifications.RNFirebaseNotificationsRebootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.QUICKBOOT_POWERON"/> <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@mipmap/ic_launcher"/> <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="test_app"/>
Run Code Online (Sandbox Code Playgroud)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); } }); }
Run Code Online (Sandbox Code Playgroud)// @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(); }
AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage',()=> bgMessaging);
平台-Android
节点版本-v8.6.0
反应本机-0.57.0
react-native-firebase-0.5.0
面临的问题
仅在Android 8中无法在Foreground中接收通知。
在背景/最小化状态的情况下,希望以大图显示通知,但不想从我可以处理显示通知的地方获得控制权。
在调试模式下,应用程序会正常显示图像,并在通知托盘中显示图像,而在释放模式下,应用程序不会显示图像。
请让我知道,我做错了。
得到它的工作。
这是因为从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);
Run Code Online (Sandbox Code Playgroud)
https://rnfirebase.io/docs/v4.2.x/notifications/android-channels
我只是在用
android.setChannelId(message.data.channelId)
Run Code Online (Sandbox Code Playgroud)
现在,当应用程序处于前台时,它会显示出来。
我的全部功能是这样的
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)
Run Code Online (Sandbox Code Playgroud)
希望能帮到你
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |