26

鉴于 Facebook 最近“鼓励”迁移到单独的 Messenger 应用程序,并且作为对 Facebook 应用程序支持的 URL/URI 方案问题的回答{非常有用!}的后续行动,我一直想知道是否有关于Facebook Messenger 应用程序自定义协议fb-messenger://可用。

我正在寻找的功能是能够单击一个按钮,该按钮将打开一个与 Facebook 数字 ID 已知的用户的 FB 信使聊天窗口。如果设备上未安装 Facebook 应用程序 ( katana )(即仅信使orca ),这也需要工作。

我找到了所需深度链接( ) 的示例,但这似乎不起作用。我意识到 FB 有每隔一段时间修改 URI 的趋势,因为这些通常不应该向公众提供(据我所知)。fb-messenger://user-thread/{user-id}

4

5 回答 5

71

在没有成功搜索此信息后,我决定制作自己的列表。以下是我到目前为止收集到的内容,以及一些解释:

这些取自版本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 。
  • 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" OR "message"
  • 有一个Extrawith 标签"trigger"

###Extra共享字段Intent(标签:类型):###

  • 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(例如Zuck it's ),可以通过解析与该人的用户名(例如4Zuck it'shttps://www.facebook.com/zuck)对应的 html 文档并提取"entity_id"找到的 html 文档来获得(截至 2015 年 11 月)里面。

根据我最新的测试,应用范围的用户 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 禁止

于 2014-08-24T00:06:35.693 回答
7

使用当前版本的 android 上的 Facebook 会在您使用他们的域 www.messenger.com 时自动要求用户打开应用程序或在 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-05-28T02:34:09.230 回答
3

这只是分享一个链接

<a href="fb-messenger://share?link=encodedLink"></a>
于 2016-09-21T15:04:14.440 回答
1

我知道它已经晚了,但我希望它可以帮助别人

对于我的情况,我当然想打开我的页面信使气泡(如果已安装)

所以这对我有用:

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;
        }
    }
于 2019-10-03T13:09:27.193 回答
1

使用适用于 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>
于 2016-12-03T02:35:33.337 回答