Facebook需要扩展权限:发布操作
我正在开发一个与竞赛和促销相关的Facebook应用程序,我的目的是在我公司的页面上创建一个标签,提供对该应用程序的访问 一旦他们获得了奖励,用户就可以提名当地公司参加奖励。后来;一旦获得提名,用户就可以投票选出获胜者 我已经将Open Graph集成到我的应用程序中,这样我就可以利用对象类型(Facebook需要扩展权限:发布操作,facebook,facebook-graph-api,facebook-apps,Facebook,Facebook Graph Api,Facebook Apps,我正在开发一个与竞赛和促销相关的Facebook应用程序,我的目的是在我公司的页面上创建一个标签,提供对该应用程序的访问 一旦他们获得了奖励,用户就可以提名当地公司参加奖励。后来;一旦获得提名,用户就可以投票选出获胜者 我已经将Open Graph集成到我的应用程序中,这样我就可以利用对象类型(组织)、操作类型(提名、投票)和聚合(提名)。我的主要目标是将这些操作转移到用户的时间线上 我使用了recipebox示例作为基础。我提供了我的代码来演示提交操作类型/对象类型组合所需的身份验证和post
组织
)、操作类型(提名
、投票
)和聚合(提名
)。我的主要目标是将这些操作转移到用户的时间线上
我使用了recipebox示例作为基础。我提供了我的代码来演示提交操作类型/对象类型组合所需的身份验证和post操作
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
<head prefix="og: http://ogp.me/ns# og_<<app namespace>>: http://ogp.me/ns/apps/<<app namespace>>#">
<meta property="fb:app_id" content="<<app id>>" />
<meta property="og:type" content="<<app namespace>>:organization" />
<meta property="og:title" content="Client 1" />
<meta property="og:image" content="<<client image path>>" />
<meta property="og:description" content="Client 1 description here ... " />
<meta property="og:url" content="<<custom client URL>>">
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
// Init the SDK upon load
window.fbAsyncInit = function() {
FB.init({
appId : '<<app id>>', // App ID
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
// listen for and handle auth.statusChange events
FB.Event.subscribe('auth.statusChange', function(response) {
if (response.authResponse) {
// user has auth'd your app and is logged into Facebook
FB.api('/me', function(me){
if (me.name) {
document.getElementById('auth-displayname').innerHTML = me.name;
}
})
document.getElementById('auth-loggedout').style.display = 'none';
document.getElementById('auth-loggedin').style.display = 'block';
} else {
// user has not auth'd your app, or is not logged into Facebook
document.getElementById('auth-loggedout').style.display = 'block';
document.getElementById('auth-loggedin').style.display = 'none';
}
});
// respond to clicks on the login and logout links
document.getElementById('auth-loginlink').addEventListener('click', function(){
FB.login();
});
document.getElementById('auth-logoutlink').addEventListener('click', function(){
FB.logout();
});
}
function nominate () {
FB.api('/me/<<app namespace>>:Nominate&organization=<<custom client URL>>', 'post', function(response) {
if (! response || response.error) {
alert('Error occured');
console.log(response);
} else {
alert('Post was successful! Action ID: ' + response.id);
}
});
}
</script>
</head>
<body>
<div id="fb-root"></div>
<div id="auth-status">
<div id="auth-loggedout">
<a href="#" id="auth-loginlink">Login</a>
</div>
<div id="auth-loggedin" style="display:none">
Hi, <span id="auth-displayname"></span>
(<a href="#" id="auth-logoutlink">logout</a>)
</div>
</div>
<h2>Client 1</h2>
<form>
<input type="button" value="Nominate" onclick="nominate()" />
</form>
<fb:activity actions="<<app namespace>>:nominate"></fb:activity>
</body>
</html>
我遇到以下错误(我是此应用程序的管理员):
第一个错误让我很不安。我无法从Apps | | Permissions | Extended Permissions
中选择publish_actions
。此外,我遇到的补救措施建议我将我的应用程序重新分类为游戏(这不起作用),并完成聚合(我做了;仍然不起作用)
此方法必须使用应用程序访问令牌调用错误
access\u token
错误是因为我在页面选项卡URL上直接测试/与应用程序交互;不是通过Facebook
我不再收到需要扩展权限:publish_actions error
;然而,我的测试人员和开发人员都是。我知道我遇到了这个错误,因为在最初的facebook.com登录提示中没有请求发布操作权限
如果我的开发人员/测试人员注销Facebook,则在提示下重新登录:
FB.login(function (response) { }, { scope:'publish_actions'});
然后,此权限和应用程序将集成到他们的Facebook会话中
我的最后一个问题是-是否有一种事实上的、首选的方法可以在不登录/退出Facebook的情况下请求此权限?对于第二个问题,请按照错误所述,使用您的密码拨打电话;如果您已经这样做了,但失败了,请在facebook应用程序仪表板的应用程序设置中检查应用程序是否未设置为“本机/桌面”模式。如果是,则应用程序访问令牌不受信任,API的行为就好像您没有提供它一样
首先,您确定用户正在向您的应用授予发布操作权限吗?使用用户的访问令牌调用
/me/permissions
,将显示授予的权限。请注意,经过身份验证的转介/应用程序中心登录流与用户的应用程序常规流是分开的,而不是通过经过身份验证的转介或应用程序中心,因此请检查您是否在调用Oauth对话框的范围中包含发布操作。我已修复了这两个错误。感谢那些为我提供反馈并使我走上正确道路的人
这些错误已得到解决:
1. Requires extended permission: publish_actions
2. This method must be called with an app access_token
首先,CBroe是正确的。由于我需要扩展权限(发布操作)
我需要在FB.login()中的回调函数之后指定这是我的选项对象,如下所示:
FB.login(function (response) {
if (response.authResponse) { // The user has authenticated
authenticatedSoDoSomething();
}
else { // The user has not authenticated
notAuthenticatedSoDoSomethingElse();
}
}, { scope:'publish_actions' });
最后,我没有成功地使用JavaScript SDK通过FB.api()
将操作发布到用户的时间线。这是I使用的代码:
FB.api('/me/<<app namespace>>:<<my action>>&<<my object>>=<<a URL>>', 'post',
function(response) {
if (! response || response.error) {
alert('Error occured');
} else {
alert('Post was successful! Action ID: ' + response.id);
}
})
FB.api('/me/:&=','post',
功能(响应){
如果(!response | | response.error){
警报(“发生错误”);
}否则{
警报(“发布成功!操作ID:”+响应.ID);
}
})
我忽略了包括应用程序访问令牌。应用访问令牌可以通过连接应用id、管道和应用机密来构造
我使用PHPSDK来实现这个请求,因为我想对我的api保密。以下是我使用的[大部分]代码:
require_once('facebook-php-sdk/src/facebook.php');
$facebook = new Facebook(
array(
'appId' => '<<my app id>>',
'secret' => '<<my app secret>>'));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
}
catch (FacebookApiException $e) {
error_log($e);
$user = null;
echo json_encode(array('success' => false));
}
}
try {
$facebook->api('/' . $user . '/<<app namespace>>:<<my action>>&<<my object>>=<<a URL>>', 'POST', array('access_token' => $facebook->getAppId() . '|' . $facebook->getApiSecret()));
}
catch (FacebookApiException $e) {
echo var_dump($e->getResult());
}
require_once('facebook-php-sdk/src/facebook.php');
$facebook=新facebook(
排列(
“appId'=>”,
'秘密'=>'');
$user=$facebook->getUser();
如果($user){
试一试{
$user_profile=$facebook->api('/me');
}
捕获(FacebookApiException$e){
错误日志($e);
$user=null;
echo json_编码(数组('success'=>false));
}
}
试一试{
$facebook->api('/'.$user'/:&=','POST',数组('access_-token'=>$facebook->getAppId()。'.$facebook->getApiSecret());
}
捕获(FacebookApiException$e){
echo var_dump($e->getResult());
}
希望这有帮助 我只能看到您调用FB.login()
,而没有任何范围
参数–那么您希望在哪里实际授予权限发布操作
?
FB.api('/me/<<app namespace>>:<<my action>>&<<my object>>=<<a URL>>', 'post',
function(response) {
if (! response || response.error) {
alert('Error occured');
} else {
alert('Post was successful! Action ID: ' + response.id);
}
})
require_once('facebook-php-sdk/src/facebook.php');
$facebook = new Facebook(
array(
'appId' => '<<my app id>>',
'secret' => '<<my app secret>>'));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
}
catch (FacebookApiException $e) {
error_log($e);
$user = null;
echo json_encode(array('success' => false));
}
}
try {
$facebook->api('/' . $user . '/<<app namespace>>:<<my action>>&<<my object>>=<<a URL>>', 'POST', array('access_token' => $facebook->getAppId() . '|' . $facebook->getApiSecret()));
}
catch (FacebookApiException $e) {
echo var_dump($e->getResult());
}