Intereting Posts
Как передать полезную нагрузку в RecyclerView.Adapter.notifyItemChanged? Android: увеличьте размер стека вызовов Geting "уже сосредоточено, игнорируя усиление фокуса: com.android.internal.view.IInputMethodClient $ Stub $ Proxy" в Android Android Studio E / dalvikvm: Не удалось найти класс '.DatabaseHelper', на который ссылается метод .DatabaseManager Как получить исходный код HTML из url в android? Как реализовать облачную службу обмена firebase на стороне сервера? Как оживить взрыв, который удаляет окружающие тела? ScrollView не изменяет размер сразу после изменений ребенка Проблема с использованием ViewPager и PageTransformer с Android API <11 Как создать кросс-платформенное приложение html5 для Android Как скопировать изображения / файлы в буфер обмена в Android? Любые альтернативные методы / шаги для получения этого Как добавить новую кнопку в виджет выбора даты в андроиде? Перезагрузка / выключение Android-эмулятора TextView – OnClick – Android Drawable vs. Bitmap

Консоль Firebase: как указать click_action для уведомлений

Я применил Firebase и тестировал уведомления Firebase. Когда приложение находится на переднем плане, у меня нет проблем, я реализовал службу, которая расширяет FirebaseMessagingService и обрабатывает сообщение и данные в onMessageReceived

У меня проблемы, когда приложение находится в фоновом режиме, я хотел бы отправить уведомление, которое открывает конкретную активность и выполняет то, что я планирую делать, а не только открытие приложения.

Я сделал это, как описано в руководстве Firebase, но я не могу начать конкретную деятельность.

Здесь манифест:

<activity android:name=".BasicNotificationActivity"> <intent-filter> <action android:name="OPEN_ACTIVITY_1" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

И вот Firebase Console. Что мне нужно написать в этих полях, чтобы открыть мою «BasicNotificationActivity»?

Консоль Firebase

Это дубликат этого вопроса: Firebase FCM уведомления click_action полезная нагрузка

Но ответ, который был принят автором этого вопроса, просто указывает, что это невозможно с Firebase Console, но это – с легким обходным решением. Этот ответ по дийду на тот же вопрос объясняет обходной путь, который я использовал бы.

ОБНОВИТЬ:
Чтобы уточнить его ответ:

Добавьте класс-помощник (или каким-то образом startActivity() метод startActivity() ):

 public class ClickActionHelper { public static void startActivity(String className, Bundle extras, Context context){ Class cls; try { cls = Class.forName(className); }catch(ClassNotFoundException e){ //means you made a wrong input in firebase console } Intent i = new Intent(context, cls); i.putExtras(extras); context.startActivity(i); } } 

В активности запуска вашего приложения вызовите mehtod для проверки любых новых намерений в onCreate() и onNewIntent() ( onNewIntent() вызывается только вместо onCreate() если Activity запущена с флагом одного верхнего уровня):

 @Override protected void onCreate(Bundle bundle) { [...] checkIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); [...] checkIntent(intent); } public void checkIntent(Intent intent) { if (intent.hasExtra("click_action")) { ClickActionHelper.startActivity(intent.getStringExtra("click_action"), intent.getExtras(), this); } } 

И в onMessageReceived() :

  public void onMessageReceived(RemoteMessage remoteMessage) { Map<String, String> data = remoteMessage.getData(); if (data.containsKey("click_action")) { ClickActionHelper.startActivity(data.get("click_action"), null, this); } } 

Чтобы отправить уведомление с помощью консоли firebase, поместите пару ключ-значение в качестве пользовательских данных следующим образом:

 Key: click_action Value: <fully qualified classname of your activity> 

Теперь, когда уведомление получено и будет нажато, оно откроет вашу деятельность. Если ваше приложение находится на переднем плане, оно также сразу же изменится на активность – вероятно, было бы хорошо спросить пользователя, хочет ли он перейти к этой операции или нет (показывая диалог в onMessageReceived() ).

У меня также есть проблемы, как и, но я не получаю никакого правильного ответа, это факты, которые я знаю,

  1. onNewIntent

Этот метод переопределения не работает, когда приложение является фоном для рабочего действия по умолчанию, является android.intent.action.MAIN

  1. Консоль Firebase

Firebase console недостаточно для обработки click_action, что означает, что действие нажатия не может доходить до приложения, когда приложение находится в фоновом режиме.

  1. CURL

Curl работает в фоновом режиме приложения, но не на переднем плане, может быть, я не могу найти.

 curl --header "Authorization: key=<Colud_Messaging_Server_Key_here>" --header Content-Type:"application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\":\"dwdfosu6SDs:APA91bFWxZZB2f8AOgP9MG504cy5AhFECHGbYFfIzVixoAfy-ErT0NYQrREg150CbKYBtk3Ywpu7WQuWsQhk-VmoOe-0iDK3ZgaFZNvYxDuixZB8zQp0zydoXhyrMosi5C4eyBb7Ai1z\",\"notification\": {\"title\": \"Click Action Message\",\"text\": \"Sample message\",\"click_action\":\"noti\",\"ticket_download\":\"noti\"}}" 

Добавить пример

 <activity android:name=".activity.TicketDownload" android:exported="true"> <intent-filter> <action android:name="noti" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Note: cloud_messaging_server_key – установка местоположения> облачная реклама

Если что-нибудь новые факты pls, дайте мне знать.