firebase - RNFirebase v6 推送通知不会同时出现在 iOS 和 Android 中
问题描述
我正在尝试将通知从 firebase 控制台发送到我的 react-native 应用程序
据我所知,我在这里遵循了糟糕的文档:https ://invertase.io/oss/react-native-firebase/v6/messaging/quick-start
我安装了@react-native-firebase/app 和 /messaging,这是我在组件中的代码:
componentDidMount() {
this.reqNotifications()
this.checkNotificationPermission()
}
reqNotifications() {
requestNotifications(['alert', 'badge', 'sound']).then(({status, settings}) => {
console.log('NOTIFICATION STATUS' + status)
});
}
async checkNotificationPermission() {
const enabled = await messaging().hasPermission();
if (enabled) {
console.log('APPROVED');
await messaging().registerForRemoteNotifications()
messaging().getToken().then(token => console.log('token: >> ' + token))
} else {
console.log('NOT APPROVED');
}
}
- 我正在通过 react-native-permissions 请求许可,并且许可请求正在 运行。
- 我的 Apple APN在 Apple 和 Firebase 控制台上正常
- 我通过代码上的 getToken() 方法成功获取了我的 令牌。
但我无法从 firebase 向设备发送任何内容;前台和后台都没有发生任何事情。我尝试了令牌测试,也尝试了正常但没有,没有任何反应。
我将此代码添加到componentDidMount:
messaging().onMessage(async remoteMessage => {
console.log('FCM Message Data:', remoteMessage.data);
});
据我了解,这订阅了云消息,当我从 firebase-console 发送一些云消息通知时,我应该得到控制台输出;但什么也没发生。
我不知道我错过了什么,但我认为这个包有一个很大的更新,大部分文档都是针对以前版本的,我真的卡在这里谢谢你的帮助
解决方案
for rnfirebase.io V6
componentDidMount = async () => {
this.checkNotificationPermission();
await messaging().requestPermission({provisional: true});
await messaging().registerDeviceForRemoteMessages();
await this.getFCMToken();
if (Platform.OS === 'android') {
this.createAndroidNotificationChannel();
}
this.backgroundState();
this.foregroundState();
};
checkNotificationPermission = () => {
firebase
.messaging()
.hasPermission()
.then(enabled => {
if (!enabled) {
this.promptForNotificationPermission();
}
});
};
promptForNotificationPermission = () => {
firebase
.messaging()
.requestPermission({provisional: true})
.then(() => {
console.log('Permission granted.');
})
.catch(() => {
console.log('Permission rejected.');
});
};
createAndroidNotificationChannel() {
const channel = new firebase.notifications.Android.Channel(
'channelId',
'Push Notification',
firebase.notifications.Android.Importance.Max,
).setDescription('Turn on to receive push notification');
firebase.notifications().android.createChannel(channel);
}
foregroundState = () => {
const unsubscribe = messaging().onMessage(async notification => {
console.log('Message handled in the foregroundState!', notification);
});
return unsubscribe;
};
// Register background handler
backgroundState = () => {
messaging().setBackgroundMessageHandler(async notification => {
console.log('Message handled in the background!', notification);
});
};
推荐阅读
- reactjs - 从多选器(ReactJS、TypeScript)中删除项目时,搜索结果未显示默认列表
- sql - 没有 Group By 的 SQL MAX 函数行为
- vue.js - Vuejs中路由更改时异步功能是否继续运行?
- wpf - 将元素添加到 FlowDocument 时自动滚动到底部
- .net-core - 事件溯源以及何时执行验证
- react-native - 如何在 React-Native 中按百分比翻译 X?
- r - 如何删除使用 which() 函数拉取的行
- node.js - 从通用 npm 包中导入子模块
- python - 如何减少使用 Pyspark 将大型 CSV (12 Go) 写入 GCS 存储桶的时间?(>6小时)
- class - Shopify 色板多种选择