【问题标题】:OAuthException "(#210) Subject must be a page."OAuthException "(#210) 主题必须是一个页面。"
【发布时间】:2012-01-13 20:19:26
【问题描述】:
即使我使用的是页面访问令牌而不是应用程序访问令牌,我也会不断收到 OAuthException (#210) Subject must be a page. 错误。
我正在使用以下内容:
- 来自 facebook 的最新 JavaScript SDK (//connect.facebook.net/en_US/all.js)
- 用户登录后使用 FB.api 方法调用
/{PAGE_ID}/tabs?app_id={APP_ID}&method=POST&access_token={PAGE_ACCESS_TOKEN}。
我的应用程序不是 FBML,而是 Canvas / iFrame 应用程序。我做错了什么?
我研究了包括 Stackoverflow 和其他 facebook 论坛在内的网络,但仍然没有答案。我的应用程序已启用 OAuth。
另外,如果我将链接复制并粘贴到浏览器中,它可以正常工作。如果我使用 API 进行操作,则不会。
【问题讨论】:
标签:
javascript
facebook-graph-api
facebook-javascript-sdk
facebook-page
facebook-oauth
【解决方案1】:
我终于搞定了。
但是,我没有使用 FB.api 来调用上面的链接,而是使用了 jQuery。
我使用了 jQuery "$.getJson(url)" 并且成功了。
它的工作原理如下。
如下构建链接。
“https://graph.facebook.com/{PAGE_ID}/tabs?app_id={APP_ID}&method=POST&access_token={PAGE_ACCESS_TOKEN}&callback=?”
如下调用 jQuery 方法。
"$.getJSON(pageUrl, OnCallBack);"其中“OnCallBack”是回调方法。您可以在回叫中做任何您需要的事情。就我而言,它类似于以下内容。
function OnCallBack(r, s) {
var html = "";
if (s == "success" && !r.error) {
for (p in r) {
html += p + ": " + r[p] + "<br />";
}
} else {
html = r.error.message;
}
$("#dv").html(html);
}
【解决方案2】:
致再次遇到此错误的任何人:
当我使用 wininet 向 https://graph.facebook.com/ 发布 https 请求时,我收到了相同的错误消息......
我只是将动词从 "POST" 改为 "GET" ,然后效果很好:
//string strVerb = "POST";
string strVerb = "GET";
PS:变量“strVerb”用作windows函数HttpOpenRequest的第二个参数。