【问题标题】:Custom URI Schemes for the Facebook MessengerFacebook Messenger 的自定义 URI 方案
【发布时间】: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 的趋势,因为这些通常不应该向公众提供(据我所知)。

【问题讨论】:

    标签: android uri deep-linking facebook-messenger


    【解决方案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.mliteplay.google.com/store/apps/details?id=com.facebook.mlite)来改进。也许还值得澄清是什么让这个答案比以前的答案组合更多。
      • @Dev-iL 是的,检查 mlite 是一个加分项,您可以编辑以获取更准确的信息
      猜你喜欢
      • 1970-01-01
      • 2016-03-22
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 2021-04-30
      • 2012-08-20
      相关资源
      最近更新 更多