Реагировать на родной код - не получать уведомления, когда приложение убито/не запущеноAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Реагировать на родной код - не получать уведомления, когда приложение убито/не запущено

Сообщение Anonymous »


Я использую response-native-firebase@4.2.0 для push-уведомлений.

Когда приложение открыто на экране, я получаю уведомление через onNotification и предупреждение, как это предусмотрено моим кодом.

ПРОБЛЕМА 1 Когда приложение находится в фоновом режиме (не закрыто), я получаю уведомление в строке состояния, но при нажатии на него оно просто закрывается и приложение не открывается.

Я также получаю эту ошибку в Android logcat:

06-21 17:26:03.892 5926 8672 D RNFMessagingService: получено событие onMessageReceived 06-21 17:26:03.913 5926 8600 E ReactNativeJS: для ключа RNFirebaseBackgroundMessage не зарегистрирована задача --------- начало сбоя 06-21 17:26:03.932 5926 8601 E AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: mqt_native_modules 06-21 17:26:03.932 5926 8601 E AndroidRuntime: Процесс: com.mycustomapp, PID: 5926 06-21 17:26:03.932 5926 8601 E AndroidRuntime: com.facebook.react.common.JavascriptException: для ключа RNFirebaseBackgroundMessage не зарегистрирована задача, стек: 06-21 17:26:03.932 5926 8601 E AndroidRuntime: startHeadlessTask@57242:24 06-21 17:26:03.932 5926 8601 E AndroidRuntime: __callFunction@4106:49 06-21 17:26:03.932 5926 8601 E AndroidRuntime: @3876:31 06-21 17:26:03.932 5926 8601 E AndroidRuntime: __guardSafe@4068:13 06-21 17:26:03.932 5926 8601 E AndroidRuntime: callFunctionReturnFlushedQueue@3875:21 06-21 17:26:03.932 5926 8601 E AndroidRuntime: 06-21 17:26:03.932 5926 8601 E AndroidRuntime: на com.facebook.react.modules.core.ExceptionsManagerModule.showOrThrowError(ExceptionsManagerModule.java:56) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: на com.facebook.react.modules.core.ExceptionsManagerModule.reportFatalException(ExceptionsManagerModule.java:40) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: в java.lang.reflect.Method.invoke(собственный метод) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: на com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:374) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: на com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:162) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: на com.facebook.react.bridge.queue.NativeRunnable.run (собственный метод) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: в android.os.Handler.handleCallback(Handler.java:790) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: в android.os.Handler.dispatchMessage(Handler.java:99) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: на com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31) 06-21 17:26:03.932 5926 8601 E Время выполнения Android: в android.os.Looper.loop(Looper.java:164) 06-21 17:26:03.932 5926 8601 E AndroidRuntime: на com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:194) 06-21 17:26:03.932 5926 8601 E Время выполнения Android: в java.lang.Thread.run(Thread.java:764) 06-21 17:26:03.938 590 590 E SELinux: avc: Denied {find} for service=opdiagnose pid=5926 uid=10238 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:opdiagnose_service: s0 tclass=service_manager permissive=0 06-21 17:26:03.939 590 590 E SELinux: avc: Denied {find} for service=opdiagnose pid=5926 uid=10238 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:opdiagnose_service: s0 tclass=service_manager permissive=0 06-21 17:26:03.939 5926 8601 W OPDiagnose: getService:OPDiagnoseService NULL 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: ошибка при анализе метки времени в событии GCM 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: java.lang.NumberFormatException: s == null 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: в java.lang.Integer.parseInt(Integer.java:570) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: в java.lang.Integer.parseInt(Integer.java:643) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: на com.google.firebase.messaging.zzb.zzb (неизвестный источник: 81) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: на com.google.firebase.messaging.zzb.zzc (неизвестный источник: 2) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: на com.google.firebase.messaging.FirebaseMessagingService.zzd (неизвестный источник: 353) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: на com.google.firebase.iid.zzg.run (неизвестный источник: 26) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: на com.google.android.gms.common.util.concurrent.zza.run (неизвестный источник: 7) 06-21 17:26:03.946 5926 8672 W FirebaseMessaging: в java.lang.Thread.run(Thread.java:764) ПРОБЛЕМА 2 Когда приложение закрывается или не запускается, я получаю это в своем лог-коде Android:

W GCM : обратный вызов широковещательного намерения: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=com.mycustomapp (есть дополнительные возможности)

и всё. Никаких push-уведомлений в строке состояния или чего-то еще.

Это службы, добавленные в мой AndroidManifest.xml:

функции, вызываемые при запуске приложения:

firebase.messaging().hasPermission() .then(включено => { если (включено) { // разрешения предоставлены } еще { // разрешения не предоставлены } }); firebase.messaging().getToken() .then(fcmToken => { если (fcmToken) { // у пользователя есть токен устройства console.log(fcmToken); } еще { // у пользователя еще нет токена устройства } }); firebase.notifications().getInitialNotification() .then((notificationOpen: NotificationOpen) => { если (уведомлениеOpen) { // Приложение было открыто по уведомлению // Получаем действие, вызванное открытием уведомления // Получаем информацию об открытом уведомлении } }); this.onTokenRefreshListener = firebase.messaging().onTokenRefresh(fcmToken => { // Обрабатываем ваш токен по мере необходимости console.log(fcmToken); }); this.notificationDisplayedListener = firebase.notifications().onNotificationDisplayed((уведомление: Уведомление) => { // Обработка вашего уведомления по мере необходимости // ANDROID: удаленные уведомления не содержат идентификатор канала. Вам придется указать это вручную, если вы хотите повторно отобразить уведомление. console.log("onNotificationDisplayed", уведомление); }); this.notificationListener = firebase.notifications().onNotification((notification: Notification) => { // Обработка вашего уведомления по мере необходимости Оповещение.alert( уведомление.заголовок, уведомление.тело, [ {текст: 'ОК', onPress: () => console.log('Нажата ОК')}, ], { можно отменить: правда } ) }); this.notificationOpenedListener = firebase.notifications().onNotificationOpened((notificationOpen: NotificationOpen) => { // Получаем действие, вызванное открытием уведомления константное действие = NotificationOpen.action; // Получаем информацию об открытом уведомлении постоянное уведомление: Уведомление = NotificationOpen.notification; console.log("onNotificationOpened", уведомление); }); this.messageListener = firebase.messaging().onMessage((сообщение: RemoteMessage) => { // Обрабатываем ваше сообщение по мере необходимости console.log("onMessage", сообщение); }); А это мой bgMessaging.js:

import { AppRegistry } из 'react-native'; импортировать Firebase из «реакции-native-firebase»; // Необязательный тип потока тип импорта {RemoteMessage} из 'react-native-firebase'; экспортировать асинхронный код по умолчанию (сообщение: RemoteMessage) => { // обрабатываем ваше сообщение console.log("RemoteMessage", сообщение); вернуть Promise.resolve(); } AppRegistry.registerHeadlessTask('AppBackgroundMessage', () => bgMessaging); Если это вообще актуально, я использую react-native-navigation. Если вам нужна дополнительная информация, прокомментируйте.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»