Facebook Messenger的自定义URIscheme

鉴于Facebook最近“ 鼓励 ”迁移到单独的Messenger应用程序,并且作为对Facebook应用程序支持的URL / URIscheme问题的{非常翔实的} 回答的后续,我一直在思考fb-messenger://的Facebook Messenger应用程序自定义协议可用。

我正在寻找的function是能够点击一个button,将打开一个FB用户的数字Facebook ID已知的用户聊天窗口。 如果Facebook应用程序( katana )没有安装在设备上(即只有信使, 逆戟鲸 ),这也需要工作。

我find了一个想要的深层链接的例子 ( fb-messenger://user-thread/{user-id} ),但是这似乎不起作用。 我意识到FB有每隔一段时间修改一次URI的倾向,因为这些通常不应该公开(据我所知)。

在search这些信息失败之后,我决定列出我自己的列表。 以下是我迄今为止收集的数据,以及一些解释:

这已更新为版本141.0.0.25.76 (2017年10月21日)

 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 

这里有一些URIscheme,其目的在这个应用程序,我不知道:

  • fb:// – 在这里看到这个scheme的可能的URI。
  • fb-work://
  • fbinternal://
  • fb-messenger-secure://
  • dialtone://

fb-messenger://share调查fb-messenger://share (从这个post的旧版本 – 可能是无效的 ):

  • 有一个名为ShareTypeStringExtra ,它可以是: ShareType.inviteShareType.forwardShareType.regular
  • 有一个名为ShareType.invitedUser可选 (?) StringExtra
  • 有一个名为ShareType.invitedUserDisplayName可选 (?) StringExtra
  • 有一个可选的 (?) StringExtra名为ShareType.inviteEntryPoint
  • 有一个名为ShareType.invitesSentBroadcastAction可选 (?) StringExtra
  • (其他几个)

ShareType.forward的情况下:

  • Extra的标签"attachment" "message"
  • 有一个Extra的标签"trigger"

共享的Extra字段Intent (标签: types ):

  • android.intent.extra.TEXTString
  • attachmentParcelable
  • messageParcelable
  • page_nameString
  • page_post_idstring
  • page_target
  • send_as_message_entry_pointString
  • share_attachment_urlstring
  • share_captionString
  • share_descriptionstring
  • share_fbidstring
  • share_link_urlstring
  • share_media_urlstring
  • share_return_to_fb4a布尔值
  • share_robotextString
  • share_story_urlstring
  • share_titlestring
  • ShareTypestring
  • target_recipientsStringArray
  • titlestring
  • triggerstring

通过使用fb-messenger://user/{user-id}而不是fb-messenger://user-thread/{user-id}可以实现所需的function。

请注意{user-id}是用户的全局数字ID (例如Zuck是4 ),可以通过parsing与该用户名相对应的html文档(例如Zuck的https://www.facebook.com/zuck )并提取里面find的"entity_id"

根据我最近的testing, 应用程序范围的用户ID (通常是开发人员可用的ID)不适用于此!

下面是一个python3脚本,提取一个已知用户名的全局ID(信用: 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 。

这只是分享一个链接

 <a href="fb-messenger://share?link=encodedLink"></a> 

Android使用chrome intents:下面的代码打开如果安装了FB messenger。 否则redirect到回退URL。

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