Как заставить onMessageReceived срабатывать при уведомлении (HMS Push Kit) в React Native?
Я пытаюсь прочитать полезные данные своих уведомлений, но событие не запускается. Он отлично работает для сообщений с данными, но, похоже, не замечает уведомлений.
AndroidManifest:
<service
android:name="com.huawei.hms.push.react.RNHmsMessageService"
android:exported="true">
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT" />
</intent-filter>
</service>
<receiver android:name="com.huawei.hms.push.react.RNReceiver"/>
<meta-data
android:name="push_kit_auto_init_enabled"
android:value="true" />
RNHmsMessageService
public void onMessageReceived(RemoteMessage message) {
Log.i(TAG, "onMessageReceived is called");
if (message == null) {
Log.e(TAG, "Received message entity is null!");
return;
}
Log.i(TAG, "getCollapseKey: " + message.getCollapseKey()...
RemoteMessage.Notification notification = message.getNotification();
if (notification != null) {
Log.i(TAG, "\n getImageUrl: " + notification.getImageUrl()...
}
Boolean judgeWhetherIn10s = false;
// If the messages are not processed in 10 seconds, the app needs to use WorkManager for processing.
if (judgeWhetherIn10s) {
startWorkManagerJob(message);
} else {
// Process message within 10s
processWithin10s(message);
}
}
build.gradle
implementation 'com.huawei.hms:push:4.0.4.301'
Я думаю, что message.getNotification() всегда имеет значение null, поэтому не запускается.
2 ответа
В этом разница между HMS Core Push Kit и FCM. Уведомляющие сообщения будут доставляться на панель задач, а сообщения данных будут доставляться методу onMessageReceived по умолчанию при использовании HMS Core Push Kit.
Кроме того, HMS Core Push Kit предоставляет возможность отправки уведомлений методу onMessageReceived, когда ваше приложение находится на переднем плане. Решение состоит в том, что вы можете установить поле foreground_show в сообщении > android > уведомление при использовании API сервера HMS Core Push Kit для отправки сообщений. Если для этого поля установлено значение true или оно оставлено пустым, уведомления отображаются на панели задач, даже если ваше приложение работает на переднем плане. Если для этого поля установлено значение false, сообщения могут доставляться методу onMessageReceived.
Вот пример полезной нагрузки:
{
"message": {
"notification": {
"title": "message title",
"body": "message body"
},
"android": {
"notification": {
"foreground_show": false,
"click_action": {
"type": 1,
"action": "com.huawei.codelabpush.intent.action.test"
}
}
},
"token": [
"pushtoken1"
]
}
}
Для получения дополнительных сведений см. Отображение уведомлений в пользовательском интерфейсе.
onMessageReceived()
вызывается только для сообщений с данными. Ознакомьтесь с этой частью FAQ по Push Kit:
[Q1] В чем разница между сообщениями с данными и уведомлениями?
Сообщения с данными не отображаются после отправки на телефоны с помощью HUAWEI Push Kit. Вместо этого сообщения передаются в приложение разработчика, и приложение отвечает за синтаксический анализ и отображение сообщений.
После того, как устройство получает уведомление, система напрямую отображает его в ЧПУ. Пользователь может нажать на сообщение с уведомлением, чтобы запустить соответствующее действие, например открытие приложения, веб-страницы или определенной страницы в приложении.
Для сообщения с уведомлением используйте приведенный ниже фрагмент кода.
Если приложение открывается щелчком push-уведомления, удаленное сообщение можно получить, вызвав HmsPush.getInitialNotification. Если приложение не открывается щелчком push-уведомления, возвращается значение null.
async function getInitialNotification(){
try{
console.log(await HmsPush.getInitialNotification())
}catch(ex){
console.log(ex)
}
}
Вот ссылка!
Это включено в последнюю версию плагина [Cordova Push Plugin 5.0.2 (2020-09-30)]. Это точно сработает.