Facebook Messenger 的自定义 URI 方案
Posted
技术标签:
【中文标题】Facebook Messenger 的自定义 URI 方案【英文标题】:Custom URI Schemes for the Facebook Messenger 【发布时间】:2014-10-17 12:19:37 【问题描述】:鉴于最近 Facebook 将“encouragement”迁移到单独的消息应用程序,以及作为非常丰富!answer to the question on URL/URI schemes supported by the Facebook app 的后续行动,我一直想知道是否有关于 Facebook 消息程序应用程序 @987654323 的信息fb-messenger://
的@ 可用。
我正在寻找的功能是能够单击一个按钮,该按钮将打开一个与 Facebook 数字 ID 已知的用户的 FB 信使聊天窗口。如果设备上未安装 Facebook 应用程序 (katana)(即只有信使,orca),这也需要工作。
我找到了所需 deep linking (fb-messenger://user-thread/user-id
) 的 example,但这似乎不起作用。我意识到 FB 有每隔一段时间修改 URI 的趋势,因为这些通常不应该向公众提供(据我所知)。
【问题讨论】:
【参考方案1】:在搜索此信息失败后,我决定自己制作一个列表。以下是我到目前为止收集到的内容,以及一些解释:
这些取自版本 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
这些是从版本 293.0.0.13.232(2020 年 12 月 8 日)中添加的一些内容:
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 here。
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
的调查(来自该帖子的旧版本 - 可能无效):
ShareType
的StringExtra
可以是: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
是用户的全局数字ID(例如for Zuck it's 4
),可以通过解析html获得(截至2015年11月)与此人的用户名对应的文档(例如for Zuck it's https://www.facebook.com/zuck
)并提取其中的"entity_id"
。
根据我最新的测试,app-scoped user IDs,通常是开发者可用的 ID,不适合这个!
以下是提取已知用户名的全局 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()))
另外,this site 也可用于实现相同的目的。
另请注意,此方法是not officially supported,甚至可能是get your app banned by FB。
【讨论】:
谢谢你,但你如何使用它?是否在方案末尾添加查询?你能发布一个撰写或分享的例子吗?谢谢! @SebastienC。 - 我唯一尝试的是答案末尾提到的示例 -fb-messenger://user/user-id
- 它允许您向用户发送消息,其余的只是我在此过程中找到的一些其他命令。你问的不是微不足道的(至少对我来说)......
你能举个“消息”转发的例子吗?
感谢您的回复。请问,你是从哪里得到这些信息的?
如何在我的聊天中添加文字? uri uri = Uri.parse("fb-messenger://user/"); long a = Long.parseLong(facebookId); uri = ContentUris.withAppendedId(uri, a); Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.putExtra(Intent.EXTRA_TEXT, "testo"); intent.setType("文本/纯文本");开始活动(意图);【参考方案2】:
当您使用他们的域 www.messenger.com 时,Android 上的当前版本 Facebook 会自动要求用户打开应用程序或在 chrome 中打开 最好将用户重定向到这个 url 并让 facebook 处理它
https://www.messenger.com/t/username-or-page-name-here
Intent intent;
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.messenger.com/t/username-or-page-name-here"));
startActivity(intent);
【讨论】:
这是2018年最简单的解决方案【参考方案3】:这只是分享一个链接
<a href="fb-messenger://share?link=encodedLink"></a>
【讨论】:
有没有办法在消息中添加文本而不仅仅是链接? 它在浏览器/移动浏览器中运行良好,但在“Facebook 应用”或“Messenger 应用”(单击内部链接时打开的应用内浏览器)中根本不起作用Facebook)。有什么解决办法吗?【参考方案4】:在 Android 上使用 chrome 意图:以下代码将打开 FB Messenger(如果已安装)。否则重定向到后备 URL。
<a href="intent://user/<yourid>/#Intent;scheme=fb-messenger;package=com.facebook.orca;S.browser_fallback_url=http://yourfllbackweburl;end"> Open Messenger</a>
【讨论】:
【参考方案5】:我知道它已经晚了,但我希望它可以帮助别人
对于我的情况,我当然想打开我的页面信使气泡(如果已安装)
所以这对我有用:
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;
【讨论】:
您的isMessengerAppInstalled
方法可以通过检测FB Messenger 的精简版(com.facebook.mlite
、play.google.com/store/apps/details?id=com.facebook.mlite)来改进。也许还值得澄清是什么让这个答案比以前的答案组合更多。
@Dev-iL 是的,检查 mlite 是一个加分项,您可以编辑以获取更准确的信息以上是关于Facebook Messenger 的自定义 URI 方案的主要内容,如果未能解决你的问题,请参考以下文章
网站上的 Facebook Messenger,每个页面都有不同的问候信息
为 Messenger Bots(又名深度链接)创建自定义入口点(链接)