Как определить, когда мессенджер Facebook открыт?

Facebook использует сервис для продвижения мессенджера на Android — что-то вроде следующего: http://www.piwai.info/chatheads-basics/

Я хочу определять, когда всплывающая подсказка открывается/закрывается

Я начал исследовать следующие варианты -

  • Слушаем (Потянув) запущенные сервисы - обнаружил 4 сервиса при показе мессенджера и 2 когда его убивают. Я хочу знать, когда пузырь мессенджера близок, чтобы мне это не помогало.

  • Слушайте уведомления - я знаю, когда оно полностью удаляется (когда пользователь перетаскивает его в область «X») - тоже не помогло.

Я ищу хак, чтобы узнать, когда пузырь Facebook открывается и когда закрывается.


person Gal Bracha    schedule 24.12.2014    source источник


Ответы (2)


Под открытым\закрытым вы имели в виду, что пузырь чата остается на экране, а окно чата открывается\закрывается, или что пузырь либо виден, либо невидим? В случае последнего:

При осмотре AndroidManifest.xml видим следующее:

<receiver android:name="com.facebook.orca.chatheads.service.ChatHeadsServiceBroadcastReceiver"
          android:permission="com.facebook.permission.prod.FB_APP_COMMUNICATION">
    <intent-filter android:priority="499">
        <action android:name="com.facebook.orca.chatheads.ACTION_SHOW_CHATHEADS"/>
        <action android:name="com.facebook.orca.chatheads.ACTION_HIDE_CHATHEADS"/>
        <action android:name="com.facebook.orca.chatheads.ACTION_SET_CHATHEADS_POLICY"/>
    </intent-filter>
</receiver>

Возможно, вы могли бы попытаться перехватить эти трансляции внутри своего собственного сервиса и как-то отследить открытие\закрытие пузырей.


(Раскрытие информации: я никогда не пробовал ничего подобного сам и был бы рад пересмотреть\удалить этот ответ, если это предложение окажется непрактичным)

person Dev-iL    schedule 05.02.2015
comment
Это круто. Вопрос в том, что намерение ACTION_SHOW_CHATHEADS отправляется как публичная трансляция. следовательно, другие приложения могут его получить. сейчас проверю. - person Gal Bracha; 06.02.2015
comment
Один из способов узнать это :) בהצלחה ~~ Однако, учитывая официальную документацию на широковещательных рассылках: приемники, используемые с API-интерфейсами контекста, по своей природе являются средством для нескольких приложений, поэтому вы должны учитывать, как другие приложения могут злоупотреблять вашим использованием. - вам может повезти :) - person Dev-iL; 06.02.2015
comment
В чем проблема? - person Dev-iL; 10.02.2015

Боюсь, вы не можете этого сделать.

Для этого приложение Facebook должно использовать один из общедоступных API Android, например Broadcasts или даже Notifications. Но они не используют ни один из них.

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

Вы можете получить к нему доступ, используя что-то под названием xposed framework для корневых устройств.

person tasomaniac    schedule 24.12.2014
comment
Вот почему я думаю о решении этого на уровне Android. Например, послушать один из сервисов, которые есть у этого процесса (например, процесс аналитики), и тогда я смогу проверить, когда он в последний раз был активен. и эта служба активируется каждый раз, когда пользователь нажимает на всплывающую подсказку. проблема с этим решением заключается в том, что эта служба также обновляется, когда кто-то отправляет сообщение - person Gal Bracha; 24.12.2014
comment
Вы пытаетесь сделать это на нерутированных устройствах? - person tasomaniac; 24.12.2014
comment
Я думаю, вы не можете этого сделать. Это экосистема Android. Вы не можете получить больше от другого приложения, если оно не делится с вами. Это там для безопасности. - person tasomaniac; 24.12.2014
comment
Я хочу верить, что могу. Я понимаю безопасность на Android. Тем не менее, я верю в взлом ОС или что-то, что говорит мне приложение. триггер, который я могу использовать, чтобы узнать это. - person Gal Bracha; 24.12.2014
comment
Я слежу за этой темой, чтобы узнать, можете ли вы. Я бы хотел знать. Если вы это сделаете, пожалуйста, опубликуйте это как ответ. Android — одна из самых безопасных операционных систем в мире. Каждое приложение имеет собственное пользовательское пространство. Это как 200 пользователей, если у вас установлено 200 приложений. - person tasomaniac; 24.12.2014