android-React Native:处理无声推送通知

android-React Native:处理无声推送通知,第1张

概述我使用react-native-firebase为我们的React Native应用(用于android和iOS)处理推送通知.我注意到,在应用程序运行(前台或后台)时收到的推送通知只有1个回调,而在关闭或终止时则没有.firebase .notifications() .onNotification(notification => { con

我使用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:处理无声推送通知 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144981.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存