Android Twilio Video Call, проснись приложение и вывести на передний план

Я пытаюсь обеспечить удобство работы с видеозвонками с помощью Twilio Video Call. Вот сценарий:

  1. Человек ААА звонит человеку ВВВ.
  2. Человек BBB не имеет открытого приложения, в фоновом режиме или на переднем плане, приложение находится в отключенном состоянии, телефон может быть даже заблокирован.
  3. Когда приходит звонок от AAA, приложение открывается с помощью видеоинтерфейса с кнопкой ответа. Так же, как в WhatsApp, Google Duo, Skype...

У нас есть FCM, и мы получаем push-уведомление. Попытка открыть кнопку ответа на видеозвонок в момент поступления звонка, не нажимая на уведомление, как в Whatsapp, Google Duo... (в телефонах Android)

Мы попытались запустить службу в фоновом режиме с открытым сокетом. Сокет будет прослушивать входящие вызовы и открывать VideoCallActivity, когда в сокет отправляется событие входящего вызова.

Это была наша лучшая ставка, но пока безуспешно. Как бы вы достигли этой функциональности?

1 ответ

Итак, мы разобрались с этим решением (когда приходит уведомление, выведите приложение на передний план), и я выкладываю его, хотя это было давно:

  1. Уведомление FCM (уведомление об отправке сообщений в облачной базе Firebase) должно отправлять только "данные" в уведомлении. Поэтому в структуре JSON уведомления нет объекта Notification, только данные. Таким образом, уведомление обрабатывается классом FirebaseMessagingService.java вашего приложения. Пожалуйста, прочитайте подробно ниже, чтобы понять, как обрабатываются 2 типа уведомлений FCM. https://firebase.google.com/docs/cloud-messaging/android/receive https://firebase.google.com/docs/cloud-messaging/concept-options

  2. В классе FirebaseMessagingService.java запустите действие VideoCall с намерением. Не забудьте добавить этот сервис в Manifest.xml

            Intent intent = new Intent(this, VideoCallActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            getApplicationContext().startActivity(intent);
    
  3. В действии VideoCall убедитесь, что у вас есть код ниже в начале onCreate():

    // These flags ensure that the activity can be launched when the screen is locked.
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
    // to wake up screen
    PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
    wakeLock.acquire();
    
    // to release screen lock
    KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
    keyguardLock.disableKeyguard();
    
Другие вопросы по тегам