我使用react-native-firebase为我们的React Native应用(用于androID和iOS)处理推送通知.
我注意到,在应用程序运行(前台或后台)时收到的推送通知只有1个回调,而在关闭或终止时则没有.
firebase.notifications().onNotification(notification => { console.log('Notification received'););
但是,如果该应用程序关闭或被杀死,它只会将通知放在托盘中,而不会执行上面的console.log.
然后输入静默推送通知.因此,当我仅在通知的有效负载中发送数据部分时,即使应用程序位于前台,也不会触发上面的回调.
我看不到其他有助于接收静默推送通知的回调.
那么我们如何处理JavaScript部分中的推送通知?
最佳答案您不需要其他答案中建议的其他软件包.@H_404_23@使用RNFirebase.io,您可以轻松处理此问题.如果您在应用程序处于后台的情况下收到通知,则必须自己处理它才能显示此通知.例如,请参见我的用于推送通知的init-Method.
import firebase from 'react-native-firebase'; const notifications = firebase.notifications(); .... notifications.onNotification((notif) => { notif.androID.setChannelID('app-infos'); notifications.displayNotification(notif); });
您可以通过displayNotification来实现.但是请确保在调用之前设置了Notification-Channel,因为否则它将无法在> = AndroID 8.0上运行
顺便说一句:请确保您已完全设置Firebase并授予所有必需的权限,以便在应用关闭或在后台运行时能够监听通知. (https://rnfirebase.io/docs/v5.x.x/notifications/android)
附录
我以这个为例来说明如何将firebase-notification-stuff实现为一个小型库(如果不需要,请删除redux-stuff):
import firebase from 'react-native-firebase';import { saveNotificationToken } from 'app/actions/firebase';import reduxStore from './reduxStore';import NavigationService from './NavigationService';const messaging = firebase.messaging();const notifications = firebase.notifications();const crashlytics = firebase.crashlytics();function registerNotifChannels() { try { // Notification-Channels is a must-have for AndroID >= 8 const channel = new firebase.notifications.AndroID.Channel( 'app-infos','App Infos',firebase.notifications.AndroID.importance.Max,).setDescription('General information'); notifications.androID.createChannel(channel); } catch (error) { crashlytics.log(`Error while creating notification-channel \n ${error}`); }}// This is the Promise object that we use to initialise the push// notifications. It will resolve when the token was successfully retrIEved. The// token is returned as the value of the Promise.const initPushNotifs = new Promise(async (resolve,reject) => { try { const isPermitted = await messaging.hasPermission(); if (isPermitted) { registerNotifChannels(); try { const token = await messaging.getToken(); if (token) { resolve(token); } } catch (error) { crashlytics.log(`Error: Failed to get notification-token \n ${error}`); } } } catch (error) { crashlytics.log(`Error while checking notification-permission\n ${error}`); } // If we get this far then there was no token available (or something went // wrong trying to get it) reject();});function init() { // Initialise the push notifications,then save the token when/if it's available initPushNotifs.then(token => reduxStore.dispatch(saveNotificationToken(token))); // Save the (new) token whenever it changes messaging.onTokenRefresh(token => reduxStore.dispatch(saveNotificationToken(token))); notifications.onNotification((notif) => { notif.androID.setChannelID('app-infos'); notifications.displayNotification(notif); }); notifications.onNotificationopened((notif) => { const { notification: { _data: { chatroom: chatRoomID } } = {} } = notif; if (chatRoomID) { NavigationService.navigate('ChatRoom',{ chatRoomID }); } });}export default { init,};
这样,只需转到index.Js文件(或应用程序的根文件,以及如何命名),然后调用init-Metod即可:
...import LPFirebase from 'lib/LPFirebase';LPFirebase.init();
总结 以上是内存溢出为你收集整理的android-React Native:处理无声推送通知 全部内容,希望文章能够帮你解决android-React Native:处理无声推送通知 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)