但是,当我尝试从Facebook移动应用程序运行应用时,Canvas应用程序会加载(这是正确的),但不会登录。
我正在使用FB.login函数。
login: function () {
var deferred = $q.defer();
FB.login(function (response) {
if (!response || response.error) {
deferred.reject('Error occured');
} else {
deferred.resolve(response);
}
}, {
scope: 'email, user_friends'
});
return deferred.promise;
},
在设置中 > 高级选项中,我已经填好了:客户端OAuth登录、Web OAuth登录、嵌入式浏览器OAuth登录、有效的OAuth重定向URI和设备登录。
但是,即使如此,在Facebook移动应用程序中,画布应用程序仍然无法执行登录。
我一直在努力让它工作,但整天都找不到解决方案。我也无法调试Facebook移动应用程序。
有什么想法来解决这个问题吗?
编辑
还查看了我的Node服务器日志,发现FB.login甚至没有被调用。
编辑2
最终,我用getLoginStatus替换了登录,对于我来说这没有问题,因为它是一个Facebook画布应用程序......但问题仍然是如何进行登录。
编辑3 11/26/2015
那么,getLoginStatus并没有完全解决我的问题,因为它实际上并没有将用户登录,所以对于画布游戏,如果您需要权限,您可能需要在第一次进入时登录......我的解决方案是,如果getLoginStatus返回not_autorized,则添加登录,如下所示:
/**
* [getLoginStatus get the FB login status]
* @return {[type]} [description]
*/
getLoginStatus: function () {
var deferred = $q.defer();
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
deferred.resolve(response);
} else if (response.status === 'not_authorized') {
_fbFactory.login().then(function (fbLoginResponse) {
deferred.resolve(fbLoginResponse);
});
} else {
deferred.reject('Error occured');
}
});
return deferred.promise;
},
但是,请等一下……在移动画布游戏上,FB.login函数的效果不佳(不确定是不触发还是浏览器阻止弹出窗口或两者都有)。无论如何,你需要通过按钮积极调用它……因此对于移动画布游戏,我必须添加一个开始游戏的按钮,然后登录才能正常工作。
编辑4(最终版)
最终我注意到,除非是外部事件触发,否则FB.login()不会被触发,因此我对Mobile canvas进行了更改,如果getLoginStatus没有返回连接,则显示一个登录按钮,该按钮进行登录……其余保持不变。 我为移动设备所做的与已接受的答案类似,只是适合我的需求……
我希望这可以帮助除我之外的其他人……
getLoginStatus
的响应是什么? - Rayon