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.2322020 年 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 的调查(来自该帖子的旧版本 - 可能无效):

有一个名为ShareTypeStringExtra 可以是:ShareType.inviteShareType.forwardShareType.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(又名深度链接)创建自定义入口点(链接)

深度链接到 Facebook Messenger

当请求视频和音频通话时,我如何接收全屏通知,例如颤振中的 Facebook Messenger

Facebook Messenger 平台 ngrok

比微信落后了 Facebook Messenger上线移动支付