尝试在我的应用中登录Facebook时,我遇到了一些奇怪的行为。iOS Appcelerator Facebook登录 - 登录事件不会在设备上触发
当前堆栈信息:
- Appcelerator的6.0.1.GA
- Appcelerator的CLI 6.1.0
- 的iOS 10.1
- XCODE 8.2.1
怪异的行为:
login
从Facebook登录设备返回时,事件永不会触发。login
从模拟器上的Facebook登录返回时,事件有时不会触发。- 设置facebook.LOGIN_BEHAVIOR_NATIVE仍尝试使用设备上的浏览器登录,有时。
- 有时在设备上,应用程序切换器会打开Facebook应用程序和浏览器进行登录。这很令人烦恼。
我实际上是模块的setLoginBehavior
功能的原始贡献者,尽管自从“我们总是希望您使用浏览器”的贡献以来,Facebook的立场似乎发生了变化。到“我们总是希望你使用Native。”。我在这里发布这个问题,以防某人有一些洞察力 - 当我等待答案时,我将回到该模块的源代码中。
我能想象的唯一因素可能与大多数应用程序不同,因为我使用的是Kris Kowals Q。下面的代码,几乎逐字从我的应用程序。
实际的函数,它登录:
// linkingmodule.js
exports.linkFacebook = function() {
var Q = require('vendor/q'),
response = Q.defer(),
facebook = require('facebook'),
permissions = ['public_profile', 'user_friends', 'user_likes'];
facebook.initialize();
facebook.setLoginBehavior(facebook.LOGIN_BEHAVIOR_NATIVE);
facebook.permissions = permissions;
facebook.addEventListener('login', function fireLogin(e) {
if(!e.success || !facebook.loggedIn) {
return response.reject({
status: e.code,
error: e.error
});
}
response.resolve({
uid: e.uid,
data: e.data,
token: facebook.getAccessToken()
});
});
facebook.authorize();
return response.promise;
};
调用登录功能的合金控制器功能:
// login.js
function facebookLogin() {
var remote = require('linkingmodule');
remote.linkFacebook().
then(function(r) {
// do some things
}).
fail(function(e) {
console.error(e);
throw 'Unable to login with Facebook.';
});
}).
fail(function(e) {
console.error('Facebook login failed');
console.error(e);
});
}
附加信息:在模拟器上,只有在清除内容和设置后才能登录,然后重新构建应用程序。随后重建应用程序将导致登录无法启动。 – threeve