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的旧版本 – 可能是无效的 ):
- 有一个名为
ShareType
的StringExtra
,它可以是:ShareType.invite
,ShareType.forward
,ShareType.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.TEXT
: String -
attachment
: Parcelable -
message
: Parcelable -
page_name
: String -
page_post_id
: string -
page_target
: 长 -
send_as_message_entry_point
: String -
share_attachment_url
: string -
share_caption
: String -
share_description
: string -
share_fbid
: string -
share_link_url
: string -
share_media_url
: string -
share_return_to_fb4a
: 布尔值 -
share_robotext
: String -
share_story_url
: string -
share_title
: string -
ShareType
: string -
target_recipients
: StringArray -
title
: string -
trigger
: string
通过使用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>