我像这样使用 FB.ui() :
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '##########', // App ID
channelUrl : '//www.xxxxxxxxxx.com/channel.php', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
// Additional initialization code here
};
// 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));
</script>
然后,这是发送消息的链接:
<a href='#' onClick="
FB.ui({
method: 'send',
name: 'Bla bla bla',
link: 'http://www.xxxxxxxxxxx.com',
to: ###########,
//redirect_uri: 'http://www.xxxxxxxxxxx.com/fb/'
});
">Send a message</a>
问题: 这对我和我测试过的每台计算机/浏览器来说都是一种魅力。但是我的客户经常收到以下错误消息:
API Error Code: 191
API Error Description: The specified URL is not owned by the application
Error Message: redirect_uri is not owned by the application
这让我完全难住了!我的代码有什么问题吗?如果是这样,为什么我的客户端始终可以在多台计算机/浏览器上重现此错误?
PS:如果您想自己尝试,该页面在这里住。您必须授权该应用程序,但我保证不会发生任何令人毛骨悚然的事情。
编辑:错误提到了redirect_uri
,你会注意到在我的代码中被注释掉了。原因是当我包含该参数时,当我点击“关闭”时对话不会关闭。
EDIT2:我能够在朋友的电脑上重现这个错误,CBroe 也证实了这一点。所以,(抛开为什么我自己仍然无法制作它的奥秘不谈),最让我难过的是为什么这只会发生一半的时间?如果我的代码不正确,它永远不会起作用,对吗?
这是错误消息中的网址:
https://www.facebook.com/dialog/send?display=popup&link=http%3A%2F%2Fwww.streetofwalls.com&locale=en_US&name=Career%20Networking%20powered%20by%20Street%20of%20Walls&next=http%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D8%23cb%3Df2c657ef78%26origin%3Dhttp%253A%252F%252Fwww.streetofwalls.com%252Ff3575a615c%26domain%3Dwww.streetofwalls.com%26relation%3Dopener%26frame%3Df1ca46b43c%26result%3D%2522xxRESULTTOKENxx%2522&sdk=joey&show_error=true&to=573501273
版本后url_decode()
:
https://www.facebook.com/dialog/send?display=popup&link=http://www.streetofwalls.com&locale=en_US&name=Career Networking powered by Street of Walls&next=http://static.ak.facebook.com/connect/xd_arbiter.php?version=8#cb=f2c657ef78&origin=http%3A%2F%2Fwww.streetofwalls.com%2Ff3575a615c&domain=www.streetofwalls.com&relation=opener&frame=f1ca46b43c&result=%22xxRESULTTOKENxx%22&sdk=joey&show_error=true&to=573501273
EDIT3:
这个难题的一部分已经解决。发生错误的时间是FB.init()
不工作的结果。我已经把它包裹起来了FB.ui()
,FB.getLoginStatus(function(response){ \\... }
所以现在你可以在控制台中看到一个更有用的错误。悬而未决的问题是……为什么 FB.init() 经常失败?