Пользовательские схемы URI для Facebook Messenger

Учитывая недавнее «поощрение» перехода Facebook на отдельный мессенджер app и в качестве дополнения к {очень информативному!} ответу на вопрос о схемах URL/URI, поддерживаемых приложением Facebook, мне интересно, является ли информация о приложении Facebook messenger пользовательским протоколом fb-messenger:// доступный.

Функциональность, которую я искал, заключалась в возможности нажать кнопку, которая открывала бы окна чата FB-мессенджера с пользователем, чей числовой идентификатор Facebook известен. Это также должно работать, если приложение Facebook (katana ) не установлен на устройстве (т.е. только мессенджер, orca< /а>).

Я нашел пример нужного глубокие ссылки (fb-messenger://user-thread/{user-id}), но, похоже, это не сработало. Я понял, что FB имеет тенденцию время от времени пересматривать URI, поскольку они, как правило, не должны быть доступны для общественности (насколько я понимаю).


person Dev-iL    schedule 24.08.2014    source источник


Ответы (5)


После безуспешных поисков этой информации я решил составить свой собственный список. Ниже приведено то, что мне удалось собрать, а также несколько пояснений:

Они были взяты из версии 141.0.0.25.76 (21 октября 2017 г.):

fb-messenger://accounts
fb-messenger://active_now
fb-messenger://addcard
fb-messenger://addmembers
fb-messenger://android_date_time
fb-messenger://android_storage
fb-messenger://autocompose
fb-messenger://autocompose_payment
fb-messenger://bots/get_started/?page_id=%s&cta_id=%s
fb-messenger://business
fb-messenger://business/
fb-messenger://business_extensions
fb-messenger://buy/mc?item_id={#%s}
fb-messenger://callsearch
fb-messenger://commerce/
fb-messenger://compose
fb-messenger://contactmigration
fb-messenger://contacts
fb-messenger://contacts/add_contacts
fb-messenger://contactuploadoptin
fb-messenger://direct_share
fb-messenger://drawoverotherapps
fb-messenger://games
fb-messenger://groupcompose
fb-messenger://groupstab
fb-messenger://groupthreadfbid/
fb-messenger://groupthreadfbid/%s
fb-messenger://ig_contact_import
fb-messenger://installupdate
fb-messenger://instant_article/?article_id=
fb-messenger://instant_article/?article_id=%s
fb-messenger://invite
fb-messenger://join_request
fb-messenger://mai
fb-messenger://messagerequests
fb-messenger://messagesearch
fb-messenger://montage
fb-messenger://montage_composer
fb-messenger://montage_mediapicker
fb-messenger://montageaudiencepicker
fb-messenger://montagecomposer
fb-messenger://networkempathy
fb-messenger://new
fb-messenger://newuser/
fb-messenger://newuser/signup?provider_name=%s&provider_page_fbid=%s
fb-messenger://nfc
fb-messenger://omni_m
fb-messenger://opengrouppreview
fb-messenger://opengrouppreview?group_preview_hash=
fb-messenger://optimistic
fb-messenger://optimistic/%s
fb-messenger://payments
fb-messenger://payments/
fb-messenger://platform
fb-messenger://platform/cta/postback/?cta_id=%s
fb-messenger://platform/share/?cta_id=%s
fb-messenger://ride_map/{%s}
fb-messenger://roomcompose
fb-messenger://rtccall
fb-messenger://sampleflows
fb-messenger://settings
fb-messenger://settings/datasaver
fb-messenger://settings/messengeronlybackup
fb-messenger://settings/montage
fb-messenger://settings/notifications
fb-messenger://settings/people
fb-messenger://settings/phoneevents
fb-messenger://settings/profilepicture
fb-messenger://settings/tincan
fb-messenger://share                    < Used for sharing multimedia, contains 
                                          several extras. See more info below.
fb-messenger://sms
fb-messenger://sms/
fb-messenger://sms/%s
fb-messenger://sms-bridge
fb-messenger://sms-takeover
fb-messenger://sms-takeover/nux?context=%s
fb-messenger://sms-takeover/nux?context=%s&thread_id=%s
fb-messenger://sms-takeover/sms_anonymous_chat_head
fb-messenger://stickerstore
fb-messenger://thread/                  < Deprecated
fb-messenger://threadkeystring
fb-messenger://threads
fb-messenger://threadsettings
fb-messenger://user
fb-messenger://user/
fb-messenger://user/%s                  < Opens chathead/conversation with user %s, where
                                          %s is the numeric fb user id. Using a username 
                                          string here crashes the orca app.
fb-messenger://user/%s?ref=%s&ref_source=%s
fb-messenger://verifyphonenux
fb-messenger://voip
fb-messenger://wave

Вот некоторые дополнения, взятые из версии 293.0.0.13.232 (8 декабря 2020 г.):

fb-messenger://carrier_messaging/
fb-messenger://carrier_messaging//%s
fb-messenger://carrier_messaging_group/
fb-messenger://carrier_messaging_group//%s
fb-messenger://dialtone/switch_to_dialtone
fb-messenger://instant_games/play?game_id=
fb-messenger://m.me/
fb-messenger://payments/checkout/?product_type=pages_commerce&product_id=
fb-messenger://payments/paypal_close/
fb-messenger://payments/settings
fb-messenger://paypal_connect_fail/
fb-messenger://paypal_connect_success/
fb-messenger://settings/datasetting
fb-messenger-sametask://instant_games_contact_pick
fb-messenger-sametask://montage_mediapicker
fb-messenger-sametask://share
fb-messenger-sametask://threadsettings
fb-messenger-secure://accounts
fb-messenger-secure://accounts/triggersso
fb-messenger-secure://join_request
fb-messenger-secure://messagerequests
fb-messenger-secure://messagesearch
fb-messenger-secure://notification_to_account_switch
fb-messenger-secure://page_notification_direct_reply
fb-messenger-secure://page_rtc_notification_to_account_switch
fb-messenger-secure://rtccall/audio/%s
fb-messenger-secure://speakeasy_invite_list

Вот несколько схем URI, назначение которых в этом приложении мне неизвестно:

  • fb:// - см. возможные URI этой схемы здесь.
  • dialtone://
  • fbinternal://
  • fb-messenger-aol://
  • fb-messenger-assistant://
  • fb-messenger-lite://
  • fb-messenger-lite-secure://
  • fb-messenger-public://
  • fb-messenger-secure://
  • fb-work://

Расследование fb-messenger://share (из старой версии этого поста - может быть недействительным):

  • Имеет StringExtra с именем ShareType, которое может быть: ShareType.invite, ShareType.forward, ShareType.regular.
  • Имеет необязательный (?) StringExtra с именем ShareType.invitedUser.
  • Имеет необязательный (?) StringExtra с именем ShareType.invitedUserDisplayName.
  • Имеет необязательный (?) StringExtra с именем ShareType.inviteEntryPoint.
  • Имеет необязательный (?) StringExtra с именем ShareType.invitesSentBroadcastAction.
  • (несколько других)

В случае ShareType.forward:

  • Имеет Extra с тегом "attachment" ИЛИ "message".
  • Имеет Extra с тегом "trigger".

###Extra поля общего ресурса Intent (тег : type):###

  • android.intent.extra.TEXT : Строка
  • attachment : Доступно
  • message : Раздельно
  • page_name : Строка
  • page_post_id : Строка
  • page_target : Длинный
  • send_as_message_entry_point : Строка
  • share_attachment_url : Строка
  • share_caption : Строка
  • share_description : Строка
  • share_fbid : Строка
  • share_link_url : Строка
  • share_media_url : Строка
  • share_return_to_fb4a : логическое значение
  • share_robotext : Строка
  • share_story_url : Строка
  • share_title : Строка
  • ShareType : Строка
  • target_recipients : Массив строк
  • title : Строка
  • trigger : Строка

Необходимая функциональность может быть достигнута путем использования fb-messenger://user/{user-id} вместо fb-messenger://user-thread/{user-id}.

Обратите внимание, что {user-id} – это глобальный числовой идентификатор пользователя (например, для Zuck это 4), который можно получить (по состоянию на ноябрь 2015 г.) путем анализа html-документа, соответствующего имени пользователя (например, для Zuck это https://www.facebook.com/zuck) и извлечение "entity_id", которое находится внутри.

Согласно моему последнему тесту, идентификаторы пользователей на уровне приложения, которые обычно Идентификаторы, доступные разработчикам, для этого не годятся!

Ниже приведен скрипт python3, который извлекает глобальный идентификатор для известного имени пользователя (кредит: Paul Schreiber) :

#!/usr/bin/python

import requests
import re

url = 'https://www.facebook.com/zuck'
idre = re.compile('"entity_id":"([0-9]+)"')
page = requests.get(url)
print(idre.findall(page.content.decode()))

Кроме того, для достижения той же цели можно использовать этот сайт.

Также обратите внимание, что этот метод официально не поддерживается и может даже запретить ваше приложение FB< /а>.

person Dev-iL    schedule 24.08.2014
comment
Спасибо за это, но как вы его используете? Добавить запрос в конце схемы? Не могли бы вы опубликовать пример создания или обмена? Спасибо! - person Sebastien C.; 24.11.2014
comment
@СебастьянС. - Единственное, что я пробовал, это пример, упомянутый в конце моего ответа - fb-messenger://user/{user-id} - который позволяет вам отправить сообщение пользователю, остальные были просто другими командами, которые я нашел в процессе. То, о чем вы спрашиваете, не тривиально (по крайней мере, для меня)... - person Dev-iL; 24.11.2014
comment
Не могли бы вы привести пример переадресации сообщений? - person alicanbatur; 10.03.2015
comment
@alicanbatur - К сожалению, нет - я просто не знаю, как это сделать. Смотрите мой ответ SebastienC. - person Dev-iL; 10.03.2015
comment
Спасибо за ответ. Могу я спросить, откуда вы взяли эти сведения? - person alicanbatur; 10.03.2015
comment
Фантастика. Спасибо за то, что поделился этим. Этот список нелегко найти, и я думаю, что Facebook не собирается его публиковать... Они хотят заставить всех использовать свой Messenger SDK. - person Fabiano; 15.05.2015
comment
Привет, Dev-iL, я хочу отправить ссылку через приложение Facebook Messenger с моего мобильного веб-сайта в браузере Chrome на моем мобильном телефоне. Я использую настраиваемую схему URI мессенджера facebook fb-messenger://share, как вы упомянули. Я использовал полный URL-адрес: fb-messenger://share?ShareType=ShareType.regular&share_story_url=‹URL› Я попробовал несколько вариантов для общего доступа, но ничего не работает. Он пытается открыть приложение и закрывается. - person Manik Mittal; 05.04.2016
comment
Привет @ManikMittal - то, что вы написали, звучит так, будто это должен быть отдельный вопрос. Тем не менее, единственное, что я когда-либо пытался сделать, это открыть окно чата с каким-то пользователем. Так что, к сожалению, мне нечего сказать о других URI... - person Dev-iL; 05.04.2016
comment
У меня отлично сработало, чтобы открыть чат Messenger моей фан-страницы. fb-messenger://user/{user-id} (числовой идентификатор) - person Maycow Moura; 23.05.2016
comment
Как добавить текст в мой чат? Uri uri = Uri.parse(fb-messenger://user/); длинный a = Long.parseLong (facebookId); uri = ContentUris.withAppendedId(uri, a); Намерение намерение = новое намерение (Intent.ACTION_VIEW, uri); намерение.putExtra(Намерение.EXTRA_TEXT, testo); намерение.setType (текст/обычный); startActivity(намерение); - person Massimiliano Allegretti; 09.02.2017
comment
@MaulikSantoki Вы уверены, что указываете правильный user-id? Вы пробовали это с каким-то жестко заданным значением (например, fb-messenger://user/4)? NinadKambli предлагалось в прошлом (теперь ответ удален) с использованием Uri uri = Uri.parse("fb-messenger://user/"); uri = ContentUris.withAppendedId(uri,[provide user id]); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);. - person Dev-iL; 27.03.2017
comment
не могли бы вы взглянуть на этот связанный вопрос, пожалуйста: from-my-app" title="невозможно ли сейчас открыть чат друзей facebook messenger из моего приложения"> stackoverflow.com/questions/46841489/ - person Hammad Nasir; 20.10.2017
comment
Хорошо, но конечная точка fb-messenger://share НЕ согласуется с developers.facebook.com/ документы/обмен/мессенджер ?! у кого есть правильный ответ? ;-) - person Dam Fa; 13.11.2017

В текущей версии Facebook на Android автоматически просит пользователя открыть приложение или открыть его в Chrome, когда вы используете их домен www.messenger.com. Лучше просто перенаправить пользователя на этот URL-адрес и позволить Facebook справиться с этим.

https://www.messenger.com/t/{имя-пользователя-или-название-страницы-здесь }

Intent intent;
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.messenger.com/t/{username-or-page-name-here}"));
startActivity(intent);
person Nawwar Elnarsh    schedule 28.05.2018
comment
Это самое простое решение в 2018 году - person Josselin; 15.11.2018

Это просто поделиться ссылкой

<a href="fb-messenger://share?link=encodedLink"></a>
person ethannguyens    schedule 21.09.2016
comment
Есть ли способ добавить в сообщение текст, а не только ссылку? - person kfiroo; 19.02.2017
comment
Он отлично работает в браузере/мобильном браузере, но совсем не работает в приложении Facebook или приложении Messenger (браузере в приложении, который открывается при нажатии на ссылку внутри Facebook). Любое решение? - person Dam Fa; 13.11.2017

Использование chrome намерений для Android: приведенный ниже код открывает мессенджер FB, если он установлен. Else перенаправляет на резервный URL.

<a href="intent://user/<yourid>/#Intent;scheme=fb-messenger;package=com.facebook.orca;S.browser_fallback_url=http://yourfllbackweburl;end"> Open Messenger</a>
person Abhilash    schedule 03.12.2016

Я знаю, что уже поздно, но я надеюсь, что это может помочь другим

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

Итак, вот что сработало для меня:

messengerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String messengerUrl ;
                if (isMessengerAppInstalled()) {
                    Toast.makeText(ServiceClient.this, "messenger is installed , open app bubble", Toast.LENGTH_SHORT).show();
                    messengerUrl = "fb-messenger://user/475527699675914/";
                } else {
                    Toast.makeText(ServiceClient.this, "messenger is not installed , open messenger in browser", Toast.LENGTH_SHORT).show();
                    messengerUrl = "https://www.messenger.com/t/475527699675914/";
                }
                Intent messengerIntent = new Intent(Intent.ACTION_VIEW);
                messengerIntent.setData(Uri.parse(messengerUrl));
                startActivity(messengerIntent);


            }
        });

public boolean isMessengerAppInstalled() {
        try {
            getApplicationContext().getPackageManager().getApplicationInfo("com.facebook.orca", 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }
person waghydjemy    schedule 03.10.2019
comment
Ваш метод isMessengerAppInstalled можно улучшить, если он также будет определять облегченную версию мессенджера FB (com.facebook.mlite, play.google.com/store/apps/details?id=com.facebook.mlite). Возможно, также стоит уточнить, что делает этот ответ чем-то большим, чем комбинация предыдущих ответов. - person Dev-iL; 03.10.2019
comment
@ Dev-iL да, проверка mlite - это плюс для ответа, вы можете отредактировать для получения более точной информации - person waghydjemy; 03.10.2019