- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
简介
我有一个小的 Facebook 粉丝页面,我要在上面发布更新。为此,我使用了一个长期存在的访问 token ,该 token 每 60 天过期一次,其权限为:“manage_pages”和“publish_stream”。
经过研究,我没有找到“就是这样”的解决方案,所以我创建了一个新帖子来描述我的问题,同时将我目前发现的所有内容链接起来作为摘要。它长得有点大哈哈(我很抱歉)。
要获得短期访问 token ,我通常按照描述的这些步骤进行操作 here .
- Go to https://developers.facebook.com/tools/explorer/ and select your app from the first drop down menu, in the left.
- Click on the button "Get access token", and in the "Select Permissions" window, click in "Extended Permissions" and check manage_pages and publish_stream, and click in "Get Access Token" blue button.
- You may be asked in this step to garant permissions to your app to access to your Facebook account, accept.
- Next, click at the end of the text field next to the "GET" drop down, and replace the numbers for: me/accounts, and click in the blue button next to this text field.
- You'll get the tokens for all your pages, including your app page. Find your page name in the list, will look like this: "name": "Your page name"
- When you located your page, copy the access token for the page (will be really long), that can look like this: "access_token": "XXXXXXXX". Also copy the id of the page: "id": "XXXXX".
使用
https://graph.facebook.com/oauth/access_token?
client_id=[clientid]
&client_secret=[clientsecret]
&grant_type=fb_exchange_token
&fb_exchange_token=[shortlivedaccesstoken]
例如,无论是在浏览器中还是通过 curl 请求,我都会返回 60 天有效的访问 token 。 ( Source )
作为Facebook API documentation描述,长期存在的访问 token 无法刷新。当然,我可以使用上面的端点刷新 token 并获得一个新的长期 token 具有相同的到期日期返回。
编辑:要在粉丝页面墙上创建一个帖子(作为页面用户)我正在做某事。像这样:
$this->fb = new Facebook(array(
'appId' => [app-id],
'secret' => [app-secret]
));
//~Get data from DB here~
//~some error handling in case data fetching failed~
$fbToken = '';
$fbToken = *[facebook access token]*;
$mediaData = array(
'picture' => [picture-url],
'message' => [message],
'link' => [link],
'name' => [name],
'description' => [description],
'access_token' => $fbToken
);
try {
$post_id = $this->fb->api('/' . [fb-page-id] . '/feed', 'post', $mediaData);
} catch(FacebookApiException $e) {
//log file output
}
问题
您只能使用短期访问 token 来获取新的长期访问 token 。
@maxim-aniskov 描述了一种获取新的短期访问 token 的方法 here .遇到同样的问题,它在第一次获取时工作一次。接受的答案涉及删除当前权限。
此外,在 this post评论中已经暗示,如果没有用户交互,即使是短暂的访问 token 也无法刷新。
最后,正如您所看到的,有很多人遇到了同样的乐趣 here too .
我什至在某处读到可以刷新现有的长期访问 token ,但前提是它即将过期。没有关于“即将到期”的时间表的信息。 (5 天不是)
最终他们都没有进一步帮助我。
问题
综上所述~
How to get a new short lived access token with the previously used permissions (manage_pages and publish_stream) querying an API endpoint?
是否真的只能通过撤销先前授予的访问权限才能实现?我正在尝试刷新其访问 token 的网站是关于发布实时更新,所以我希望几乎没有停机时间.. 而不是每次旧 token 过期时在 graph api explorer 中手动生成一个新的短期 token 或即将到期,我宁愿只按一个按钮来完成。
最佳答案
其实你对流程很困惑!让我来解释一下这个访问 token 是如何工作的——
首先,从 Graph API Explorer 获取访问 token 只是一种方式——当然不是最好的方式。 (但在你的情况下,这似乎很好,因为我认为你只是从你的帐户管理页面,而不是为其他 Facebook 用户管理页面 - 如果我错了请纠正我)。
通常,facebook 集成用于获取 facebook 用户的访问权限并执行某些事件或获取用户的数据,这是通过实现 facebook login 来完成的。 . Facebook 登录考虑了用户授予的权限并返回 access token。 - 这是用户访问 token
/me/accounts
).现在,好处是 - 您可以扩展
永不过期的页面访问 token !我已经解释了这些步骤
here .
如果您想以用户/管理员的名义发帖,您可以使用用户访问 token ,它可以通过发出您已经解释过的\GET 请求来扩展。现在当你说-
I've even read that an existing long lived access token can be refreshed but only if it's about-to-expire. There is no information in which timeframe 'about-to-expire' lies. (5 days ain't)
这个说法是错误的!您可以随时扩展 token 。今天你有一个 60 天到期的代币,明天它可以再次延长,最多 60 天到期。要刷新扩展 token ,您必须重复第一次用于生成扩展 token 的步骤,即 - 使用登录流程或图形 api 资源管理器获取访问 token (正常的)(是的 - 没有其他方法获取访问 token )并发出\GET 请求以获取扩展 token 。就是这个!
你问-
How to get a new short lived access token with the previously used permissions (manage_pages and publish_stream) querying an API endpoint?
别担心,下次当您尝试获取访问 token 时,它将拥有相应的权限,因为您已经授权了该应用程序。你不需要为此处理任何事情!
编辑
如果您不想使用 Graph API Explorer,您可以使用 JS/PHP/其他语言编写一个小脚本并实现 facebook 登录 - 获取访问 token - 并扩展该 token (哦等等!你没有告诉你如何创建帖子?你只能用你的脚本来做到这一点 - 足够简单!)。祝你好运!
关于php - 如何在不使用 api 资源管理器的情况下获取具有以前使用的权限的新 'short lived' facebook 访问 token (服务器端)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732843/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
Android 权限(您在 list 中请求并在安装时显示的权限)是否与 root 用户在 root 手机上获得的 linux 权限相同? 更确切地说:如果我的手机上有 root 权限并且我有一个可以
我经常读到 VIEW 的一个目的是安全性:允许一些用户访问基础表,而其他用户只允许访问派生 View 。考虑到这一点,我设计了几个向外部用户提供受限数据集的 View 。 一切都很好,但在实践中这是行
在 Facebook API v2.3 中,“user_posts”听起来像是“user_status”的超集。是这样吗?如果我已经有“user_posts”,为什么还需要“user_status”?
在为 BLUETOOTH_CONNECT 请求运行时权限后,android 12 崩溃了,我在 Samsung Android 12 设备中遇到了这个问题。在其他低于 Android 12 的设备上运
请理解这个问题可能有点头晕,因为这是我第一次提问。另外,请理解语法可能很奇怪,因为我不擅长英语并使用翻译。 我是一个在 Android 工作室中使用 java 制作应用程序的人。 尝试使用蓝牙时出现连
我刚刚将我的 Magento 商店从 cPanel 移动到 DirectAdmin (Centos)。 我的问题现在是权限。以前在 cPanel 上,所有文件夹都设置为 755 和文件 644。这很好
我希望在我的 Django 项目中获得更细粒度的权限,但无法决定使用哪个应用程序。 我所拥有的是这样的: class Item(models.Model): name = models.Cha
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我们已经设置了一个 Github 应用程序,以便它使用 Github API 自动为另一个个人 Github 用户创建一个存储库。现在我们遇到了一个问题,不是每个人都想让我们完全读取他们所有的私有(p
假设我有一个网站想要访问 Facebook 的用户帐户信息。通常,用户会获得网站要求的所有权限,并且可以整体上允许或拒绝这些权限。 是否可以让用户选择(例如,通过授权屏幕上每个权限的复选框)他想授予网
平台下载地址:https://gitee.com/alwaysinsist/edp 权限介绍 权限实际上就是谁有权使用或是访问什么,这里的“谁”可以视作"授权对象",&qu
playstore 给我发这个消息 We've detected that your app contains the requestLegacyExternalStorage flag in the
我可以在没有 sudo 的情况下运行 docker,但有时它会再次请求权限,我无法在 VS 代码中附加容器 Got permission denied while trying to connect
我正在尝试在 Ubuntu 中的可执行文件上运行 gdb。但是,当我尝试在 gdb 中运行 run 时,出现以下错误。 /vagrant/unit_test: cannot execute: Perm
我的应用程序工作了一年,然后对 instagram 的 API 调用停止返回任何数据。 我使用以下 instagram 端点: https://api.instagram.com/v1/media/s
我使用 TFS 2012 并希望为 TFS 用户组设置以下权限。 允许创建新问题项。 拒绝创建新的任务项。 拒绝更改他的任务项,只能更改提醒时间、描述和状态。并且不能更改分配的用户、优先级和迭代。 我
我有一个谷歌计算引擎实例,我使用与我的 glcoud 帐户关联的 SSH key 通过 SFTP 连接到该实例。但是,我无法将任何文件上传到/var/www 目录,尽管我可以读取目录列表。/var/w
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我不确定如何正确处理以下情况: 我的程序通过安装程序安装 我在应用程序文件夹中创建SQLite数据库(程序启动时) 在某些配置中,我收到“ Attemt写入只读数据库”错误。这是权限问题,现在我通过将
我是一名优秀的程序员,十分优秀!