【问题标题】:Deep linking to Facebook Messenger深度链接到 Facebook Messenger
【发布时间】:2015-10-24 22:58:10
【问题描述】:

通过大量搜索,我发现使用fb-messenger://user-thread/ID 可用于深度链接到 Messenger 并使用传入的 FB ID 打开现有线程,如果不存在则启动新线程。

它弹出到 Messenger 并打开一个线程,但该线程与 Facebook User 并没有实际发送。见下图。单击标题中的 Facebook 用户将转到具有正确用户图像和名称的详细信息视图。

如何使这项工作正常进行?

【问题讨论】:

  • 请记住,Facebook 总是会不时更改他们的方案,因此请确保您没有将其作为系统中的关键部分。
  • 嘿,克里斯,我现在这是一篇旧帖子,但你有没有让这个工作?

标签: ios facebook facebook-graph-api deep-linking


【解决方案1】:

使用fb-messenger-public://user-thread/<ID> 我从 facebook messenger 网络挂钩有效负载中的收件人 ID 获得了我的 ID。例如

{
    "object": "page",
    "entry": [
        {
            "id": "1163189980393936",
            "time": 1500325170682,
            "messaging": [
                {
                    "sender": {
                        "id": ""
                    },
                    "recipient": {
                        "id": "ID"
                    },
                    "timestamp": 1500325170640,
                    "message": {
                        "mid": "mid.$cAAQh6kd9svBjg56V0FdUllNamImF",
                        "seq": 2888,
                        "text": "..."
                    }
                }
            ]
        }
    ]
}

【讨论】:

    【解决方案2】:

    如果要直接跳转代码,这里是:

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://m.me/%ld", USER_ID]];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
    

    【讨论】:

      【解决方案3】:

      正如WizKid(FB员工)所说here

      ...没有记录的方式与... [Messenger] 进行交互 你可能随时会崩溃。

      因此,考虑到这一点,听起来fb-messenger://user-thread/ID 已被弃用。话虽如此,我反编译了 Facebook Android APK 并找到了一行:

      return Uri.parse((new StringBuilder("fb-messenger://user/")).append(Uri.encode(s)).toString());
      

      所以据我所知,fb-messenger://user-thread/ID 似乎已被 fb-messenger://user/ID 替换

      还有一行是:

      return Uri.parse((new StringBuilder("fb-messenger://thread/")).append(Uri.encode(s)).toString());
      

      所以fb-messenger://thread/ID 也可能有效。 ID 可能是用户或线程 ID,我没有深入挖掘。

      编辑: 当前 Facebook 网址是 fb-messenger-public://user-thread/ID

      【讨论】:

      • 感谢您挖掘并提供详尽的答案。将这些 URL 中的一个嵌入到生产应用程序中并冒着随时中断的风险可能不值得。不幸的是,这对第 3 方使用不开放。哦,好吧
      • 很高兴为您提供帮助,对不起,我无法为您提供您希望的答案。如果您正在构建原生应用,您或许可以使用新的 iOS SDK developers.facebook.com/docs/messenger/ios 调用该应用
      • 奇数。我发现用户线程版本是唯一为我打开实际对话的版本,即fb-messenger://user-thread/{user_id} 其中user_id 是一个数字ID。 fb-messenger//user/... 版本打开了信使,但没有打开对话。我无法让任何用户或线程 ID 使用 fb-messenger://thread/... 表单。用户对话的桌面和移动浏览器等效项类似于 https://www.facebook.com/messages/{user_id}https://m.facebook.com/messages/read/?fbid={user_id}
      • 当前 Facebook 网址是 fb-messenger-public://user-thread/ID
      • 截至 2018 年 1 月,这对我不起作用。只是链接到 Messenger 中的一个空对话。
      【解决方案4】:

      这一切都变了。 Facebook 发布短链接以连接品牌或用户的 Messenger 个人资料。直接链接方式为http://m.me/PROFILEPAGE_NAME

      如果您正在构建机器人,您还可以传入引荐参数。我已经写了很多关于这个linking in to Messenger conversations 的文章。

      【讨论】:

        【解决方案5】:

        很抱歉让这件事起死回生,但 Facebook Messenger 似乎已经整合了通用链接来快速打开 Messenger 应用程序。

        m.me/$USERNAME
        

        例如:http://m.me/zuck 会将您普遍链接到消息 Zuckerberg。

        我玩了几个参数,但似乎没有任何东西可以预先填充消息。

        【讨论】:

        • 有谁知道使用 Facebook 用户 ID 而不是用户名的方法?将其与 Facebook ID 一起使用时,我收到“未找到用户名”:(