Я разрабатываю функцию уведомления, используя react-native-firebase
на React native
в Android
.
Большинство функций (таких как удаленное уведомление на переднем и заднем плане, отображение локального уведомления) хорошо реализованы, но есть одна проблема, которую я не решил.
Как я уже говорил выше, получение уведомлений на переднем и заднем плане работает хорошо.Когда экран устройства выключен (режим блокировки или режим ожидания), уведомление хорошо воспринимается с вибрацией и звуком, но экран не включен.Я тестировал на эмуляторе (Nexus 5X с Google Play), LG G Flex2, Samsung galaxy S8.
Ожидание
Пробуждение устройства (включение экрана) при получении уведомлений на Android
Текущая ситуация
Когда поступили уведомления, звук и вибрация работают, но экран выключен.
Я не тестировал на iOS.Вот мои конфигурации.
gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
build.gradle (проект)
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.2.1'
}
build.gradle (приложение)
compileSdkVersion 26
minSdkVersion 16
targetSdkVersion 26
React Native Version
"react": "^16.3.0-alpha.1",
"react-native": "0.54.3",
response-native-firebase версия
"react-native-firebase": "^4.2.0",
коды получения уведомлений на стороне клиента
async configureNotifications() {
const enabled = await firebase.messaging().hasPermission();
if (enabled) {
this.listenNotification();
} else {
try {
await firebase.messaging().requestPermission();
this.listenNotification();
} catch (e) {
Alert.alert('', '알림 거부하시면 화재 감지 알림을 받으 실 수 없습니다.');
}
}
}
listenNotification() {
if (Platform.OS === 'android') {
const channel = new firebase.notifications.Android.Channel(
'alert',
'alert',
firebase.notifications.Android.Importance.Max,
).setDescription('My apps alert');
firebase.notifications().android.createChannel(channel);
}
const subProm = [];
const { account } = this.props;
const { deviceInfo } = account;
for (let i = 0; i < deviceInfo.length; i++) {
subProm.push(firebase.messaging().subscribeToTopic(deviceInfo[i].deviceID));
}
Promise.all(subProm).then(() => {
this.messageListner = firebase.messaging().onMessage((message) => {
let newNotification;
if (Platform.OS === 'android') {
newNotification = new firebase.notifications.Notification()
.setNotificationId(message.messageId)
.setTitle(message.data.title)
.setBody(message.data.body)
.setSound('default')
.android.setPriority(firebase.notifications.Android.Priority.High)
.android.setChannelId('alert');
}
return firebase.notifications().displayNotification(newNotification);
});
});
}
на стороне клиентафоновый обработчик задач без головы
export default async (message) => {
console.log('on Background Message');
console.log(message);
let newNotification;
if (Platform.OS === 'android') {
newNotification = new firebase.notifications.Notification()
.setNotificationId(message.messageId)
.setTitle(message.data.title)
.setBody(message.data.body)
.setSound('default')
.android.setPriority(firebase.notifications.Android.Priority.High)
.android.setChannelId('alert');
}
return firebase.notifications().displayNotification(newNotification);
};
index.js
AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => bgMessaging);
отправка кодов уведомлений на стороне сервера (тестовая версия)
nodejs с firebase-admin
var msg = {
android: {
ttl: 36000,
data: {
title: 'title',
body: 'body' + topic,
},
priority: 'high',
},
topic,
};
admin
.messaging()
.send(msg)
.then((res) => {
console.log('Successfully sent message', res);
process.exit();
}, console.error);