Facebook Messenger的自定义URI方案

时间:2014-08-24 00:06:36

标签: android uri deep-linking facebook-messenger

鉴于最近的" encouragement"通过Facebook迁移到一个单独的信使应用程序,并作为{非常翔实!} answer to the question on URL/URI schemes supported by the Facebook app的后续跟踪,我一直在想知道有关Facebook信使应用程序custom protocol的信息 fb-messenger:// 可用。

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

我找到了example所需的deep linkingfb-messenger://user-thread/{user-id}),但这似乎无效。我意识到FB偶尔会修改URI,因为这些通常不应该对公众开放(据我所知)。

4 个答案:

答案 0 :(得分:58)

在搜索此信息失败后,我决定列出自己的信息。以下是我到目前为止收集的内容,以及一些解释:

此版本已针对 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

以下是一些URI方案,其目的在此应用程序中我不知道:

  • fb:// - 查看此方案here的可能URI。
  • fb-work://
  • fbinternal://
  • fb-messenger-secure://
  • dialtone://

fb-messenger://share的调查(来自此帖子的旧版本 - 可能无效):

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

如果是ShareType.forward

  • Extra标记为"attachment" "message"
  • Extra标记为"trigger"
共享的{h3> Extra个字段Intent(标记:类型):
  • 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 Boolean
  • 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}可以实现所需的功能。

注意 {user-id}是用户的全局数字ID (例如for Zuck it's 4),可以获取(截至2015年11月)通过解析与该人的用户名相对应的html文档(例如for Zuck it's https://www.facebook.com/zuck)并提取内部找到的"entity_id"

根据我的最新测试,app-scoped user IDs(通常是开发人员可用的ID)不适用于此!

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

答案 1 :(得分:6)

使用当前版本的Facebook上的Facebook会自动要求用户打开应用程序或使用他们的域名www.messenger.com打开Chrome 将用户重定向到此网址并让Facebook处理它会更好

https://www.messenger.com/t/ {的用户名或页面名称这里-}

Intent intent;
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.messenger.com/t/{username-or-page-name-here}"));
startActivity(intent);

答案 2 :(得分:3)

这只是共享一个链接

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

答案 3 :(得分:0)

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

对于我来说,我想打开页面信使气泡(如果已安装)

所以这对我有用:

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;
        }
    }