You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过FB Webhooks订阅指定用户发帖推送,无需用户重复授权?

核心结论

你的用法没有根本性错误,但Facebook Graph API的Webhook对用户对象的订阅有明确的前置规则,和你是不是移动端应用无关:

所有user类型对象的Webhook订阅,仅对已经完成Facebook登录授权你的应用、且授予了对应权限的用户生效,这里的「安装应用」不是指移动端安装APP,是指用户完成了OAuth授权流程,将你的应用关联到了自己的Facebook账号下。

实现前提
  • 你的Facebook应用必须先通过应用审核,申请到user_posts权限,这是获取用户发帖内容、订阅发帖通知的必要权限
  • 目标用户必须主动完成你的应用的Facebook OAuth授权流程,并且授予user_posts权限,授权一次后只要用户不主动取消授权、权限没有过期,就不需要反复授权
  • 你必须先完成Webhook基础配置,回调地址即你可正常运行的Azure函数地址
可运行的实现步骤

1. 配置Webhook基础校验

首先在Facebook开发者后台的应用面板中完成基础配置:

  • 进入「产品 > Webhook」,选择用户(User)对象,添加需要订阅的字段posts
  • 填写你的Azure函数地址作为回调URL,设置自定义的验证令牌
  • 你的Azure函数需要先适配GET请求逻辑:当收到Facebook的校验请求时,直接返回请求参数中的hub.challenge值即可完成校验

2. 程序化订阅用户对象(也可直接在开发者后台手动配置)

你可以调用以下接口完成全局的User对象订阅,请求需要携带你的应用级访问令牌(App Access Token):

POST /v18.0/{你的应用ID}/subscriptions HTTP/1.1
Host: graph.facebook.com
Content-Type: application/x-www-form-urlencoded

object=user&
callback_url=https%3A%2F%2F{你的Azure函数域名}%2Fapi%2Fcallback&
fields=posts&
include_values=true&
verify_token={你设置的验证令牌}&
access_token={你的应用访问令牌}

3. 处理用户授权逻辑

当用户向你的端点提交UserId前,必须先引导用户完成OAuth授权,授权链接核心参数如下:

https://www.facebook.com/v18.0/dialog/oauth?client_id={你的应用ID}&redirect_uri={你的授权回调地址}&scope=user_posts&response_type=code

用户授权完成后,你可以拿到用户的访问令牌,将其与用户ID关联存储到你的数据库即可,无需重复发起授权。

4. 接收Webhook通知

你的Azure函数适配POST请求即可,收到的发帖通知结构示例如下:

{
  "object": "user",
  "entry": [
    {
      "id": "对应用户ID",
      "time": 1234567890,
      "changes": [
        {
          "field": "posts",
          "value": {
            "post_id": "新发布的帖子ID",
            "created_time": 1234567890,
            "message": "帖子内容文本"
          }
        }
      ]
    }
  ]
}
注意事项
  • 如果你想要订阅未授权你应用的用户的发帖通知,是完全无法实现的,Facebook出于隐私保护完全禁止这种行为
  • 当前用户访问令牌默认有效期为60天,你可以通过刷新令牌延长有效期,无需用户反复操作授权

内容的提问来源于stack exchange,提问作者Tim Cadieux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:54:03