深度链接到 Facebook Messenger

Posted

技术标签:

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

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

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

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

【问题讨论】:

请记住,Facebook 总是会不时更改他们的方案,因此请确保您没有将其作为系统中的关键部分。 嘿,克里斯,我现在这是一篇旧帖子,但你有没有让这个工作? 【参考方案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_idhttps://m.facebook.com/messages/read/?fbid=user_id 当前 Facebook 网址是 fb-messenger-public://user-thread/ID 截至 2018 年 1 月,这对我不起作用。只是链接到 Messenger 中的一个空对话。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

m.me/$USERNAME

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

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

【讨论】:

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

以上是关于深度链接到 Facebook Messenger的主要内容,如果未能解决你的问题,请参考以下文章

通过 Facebook 分享深度链接到 iOS 应用

深度链接回退

深度链接在 Facebook 时间线上不起作用

深度链接 Facebook android / ios 问题

Facebook 深度链接 target_url 参数缺少 iOS

iOS 中的 Facebook 移动深度链接